C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5623|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! x9 B# I9 a/ Z5 }: y& K) U7 ymain文件:
3 L+ G1 p5 V5 {4 W( B2 U4 b, ointerrupt void interrupt4(void)  
: _5 C' y6 I7 Y" `0 J9 }{
% g1 H- j6 x" X+ |" [  Uint32 sample;  z, @7 u0 ~- s

5 @2 R% F' v  K' R  sample = input_sample(); // read L + R samples from ADC
6 x; Z2 u% v  Z+ z  output_sample(sample);   // write L + R samples to DAC
3 H9 y% w# o. C8 G! s+ X* r! M+ y5 J2 B  return;
! n$ C7 Z- _# _" F1 q& a1 T}2 D2 E8 K: R4 u# S. n5 p* o" m+ h
2 @  d$ Y  ]0 X- A* F: _
int main( void )- s. j8 u) o8 h6 ]9 q
{
7 L$ W3 S% |! _& q% {# M) w3 u$ v( _1 e; p
    /* Initialize BSL */
3 @7 g; O4 ^' t" B9 O2 Z$ ]    EVMC6747_init( );7 K8 [1 F* T! Q  [3 m) I9 S
        /* Call evmc6747_intr function */
- s( L6 O- W9 J2 e& K    aic3106_init( );, v) n5 G) k! z- P
        while(1);# W2 m9 Y: S6 e- |, a
}
* A6 g6 e# C% x$ W9 a4 n3 N- }/ _1 f0 ]& Y

' a8 i  D6 I$ c8 L/ V4 kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& I4 Q% |  D0 j+ T; y1 K/* Initialize MCASP1 */
$ x4 p& Z: r* [4 ?    mcasp = &MCASP_MODULE_1;( r/ V. V) s% \6 P+ d
    mcasp->regs->GBLCTL  = 0;       // Reset
. P- t, k* R( ?  V  e/ ?    mcasp->regs->RGBLCTL = 0;       // Reset RX0 \( A% _! S# g  [; Q6 V
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ r' J- R$ h( F1 v$ N
    mcasp->regs->PWRDEMU = 1;       // Free-running0 s) f  B' w( k" v4 v2 T
   // configure McASP0 receive registers3 w, n( ~6 \* U% x9 ], L
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 S$ B: X& i' b0 i/ I8 }, |    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  _6 S) A3 P4 H6 j& A4 e$ \; N0 q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 w/ S8 ~# h1 w0 \
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- u. t+ v, p2 B  w    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 |( ?6 B6 r5 l: F; k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( D+ a; k7 R/ D4 p1 f! z( k    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& M5 E0 o9 u! R0 {; z2 {    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% F# l( A3 b- U
' J  @0 s3 b  l, {4 q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; f4 y+ b4 M& n1 G: z6 i" U    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; @4 q& j  F- F9 H! T
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ o6 z$ q0 l; E- j6 Y, R7 Y( F    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 a1 j) \  i8 v. d0 g    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; X- [2 p3 H" ^/ S2 B
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! t4 A2 F( B; y0 W: Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 g$ e! w0 v" U8 `: j    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 d$ z) O' ]0 U! @" k. j* D
- {+ G8 x, b9 W% n8 u/ ]2 e2 K/ i    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN6 c+ S% ]+ ^! u8 p. m$ i0 x
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 K9 p# \: U3 w    mcasp->regs->PFUNC      = 0;          // All MCASPs7 {. @4 ]" n& j  k8 g8 _( I% L
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, u0 S7 k2 ?  f8 @- l! J, A

+ d8 \$ C2 Y: Q+ K8 G    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ ~# ?3 L# t  ]5 ?2 j) x# b& I+ r    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 D# ^: u3 M* g" e) z& Y& `, V+ Y    mcasp->regs->AMUTE      = 0x00000000; // Not used
! }3 b  Z9 v+ j* B. n  N3 L' o; a% n' [  b+ K- H! \1 p% y% l
/* Starting sections of the McASP*/. M- ^5 r' V' S; k& |
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ e/ U; V+ |+ q' D3 A) N# T) R8 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  3 q4 l+ Z/ D% b. \9 Z; D. I
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) ^/ K) l3 |  @, f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( C  m8 @" i' {5 \3 w
( H; D% f% z- M& x3 h  p4 x/ M
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; h# ^+ c* F2 J; f* C0 R2 E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 K6 K) q3 ]% F! c$ m4 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / n$ Y# `% a3 w9 l: g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 a3 ], L8 V" P/ i  n4 m6 d+ N# _% x6 _0 k+ q9 ~6 Z
    mcasp->regs->XSTAT = 0x0000ffff;
9 T7 R! Z+ u. f+ @- z3 x' C    mcasp->regs->RSTAT = 0x0000ffff; : ~; J" t6 U! D: E  h5 q& G$ E. I6 p+ f

7 _! g& k& b  R3 J' e/ D: D    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 w. w! t$ G/ Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 \- L! B# P, b& o3 U+ L
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   }; o5 X* U1 i3 [( y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 n/ n+ y# m! c( P, ^. w; v
6 R! p6 x0 ?# t" z6 Z3 s$ K
    /* Write a 0, so that no underrun occurs after releasing the state machine */
- m  J2 I5 j4 U' ^( L% Q$ m& `( j5 ~    mcasp->regs->XBUF5 = 0;
/ S  T! I9 s! b6 w    mcasp->regs->RBUF0 = 0;! C8 y$ ^7 h$ ^# B  y6 K6 A' d

4 a& \7 O2 w7 \0 B( A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 G& h# ~% p; V! e( O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* M( U4 Y* X. |/ g    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # t! q$ Q2 u+ ?; }. |1 Q9 L. t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: e6 G8 k& @) b) d8 ^) W  v  T. _6 J  I  W4 P
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 b) [& K* V0 c, ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! u) s, U6 D/ p) N! g& @
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / _( Q9 i% L/ n" u6 L8 A0 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; @( E: p) H) h6 D, n
3 m2 r$ J! }* U3 }: e
    CSR = 0x0000;
3 c9 Z2 A6 R$ O/ G) G5 T: S* Z    INTC_INTMUX1 = 0x3d;7 W/ ]3 ?7 _! `7 h% r6 Q
    ISTP = (unsigned int)vectors;& i" s# s- x# u7 g& {
    ICR = 0xFFF0;  - P- o5 l1 l6 W- Y6 m
    IER |= 0x12;  
" C- z/ U$ o7 N1 [    CSR |= 0x01;  
9 b5 q! p1 j  h: }& _( S* a( G% ?) m, a" @: J8 j: C

+ _5 M' D! k* u8 c, Z) a2 F+ `. r' |) o$ |# B) v, _: K
还有就是两个输入输出函数:( H/ w) Y/ U4 }* `4 c; Z- |, G1 o
void output_sample(Int32 out_data)
  }' p+ [7 A1 q{; V, L* }! x0 E) b- G+ C$ l
  AIC31_data.uint = out_data;  9 V* w- w2 Q4 l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 R/ [# E) c, s. h! a4 A5 _& y}7 N" o, j4 {2 P& t% g* Z* |
2 D- l9 A. \& n+ D; w1 E5 \
Int32 input_sample(void)8 k+ K' L4 q8 K7 Z* g& L
{  
3 V0 A+ X& e8 I: k  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 F1 i& r$ n% b  return (AIC31_data.uint);" U9 e/ h( S* c0 e+ ~) q
}+ O& e- u3 a6 e5 L6 m- u

) ?; W  @+ N% Q2 t9 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-11-28 10:55 , Processed in 0.039529 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表