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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' G8 m  }# ~( L9 m3 E+ s
main文件:9 R9 I3 Q+ P! S  n/ x1 a# ~
interrupt void interrupt4(void)  4 _" t1 Q5 d6 J) N$ L; D/ P
{/ m6 l( H1 ?* w! C& j
  Uint32 sample;
% F4 z" d; E. V( `) A- Z9 M5 v( e8 l5 u' m1 i
  sample = input_sample(); // read L + R samples from ADC7 v& W/ J! {: @
  output_sample(sample);   // write L + R samples to DAC
/ \4 m+ q6 W% U) z+ F( _  return;
& g! I: J- x$ p3 Y}: t* m: B" |7 b6 s8 }
% [, s0 J1 \$ M9 h; o" j9 v0 m) n7 u
int main( void )
8 W% i; o) {6 T{2 f& p7 J' d. E  i! M

% f- i( @, X' e    /* Initialize BSL */6 z" M8 I3 i) Y( d, K% R  _
    EVMC6747_init( );
% E3 C; x) ?# `        /* Call evmc6747_intr function */
! a! ]0 a6 S( |- Q, m    aic3106_init( );
8 O" `6 v- u0 R0 R7 R% t# V        while(1);
; }. }6 m( ?- |2 ^}
- D! Y' e* q4 v7 E! p6 B6 N% {
2 C0 v4 H! H2 f4 I5 E
" D  p" \; I8 E. w/ |6 x, baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 @: y" d! s' p7 w# |. v
/* Initialize MCASP1 */
( v8 o& G2 Y# i' J/ X1 n    mcasp = &MCASP_MODULE_1;4 _; {- K2 \+ i) e; Q4 w
    mcasp->regs->GBLCTL  = 0;       // Reset
* W3 B& W3 k( t    mcasp->regs->RGBLCTL = 0;       // Reset RX8 Y8 ~  \, F. c9 q0 D9 d$ v
    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ L. Z- V3 ~6 T3 H    mcasp->regs->PWRDEMU = 1;       // Free-running. w( Y, f/ Y* E
   // configure McASP0 receive registers
( V! i, _5 X& J4 ?8 ]% g    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 U, A1 l$ D8 o9 Q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& L7 Y" n* E3 v# j, R$ l    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; T" R" `; @, q    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ b$ i% f: C. C# s1 V0 E0 \
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  ]/ F+ C! h- z' l: A4 D$ P
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ m0 ?  t" s. G4 J
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ b( r7 f. D# b" f: @0 W    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' \: B7 g7 r6 q& q% e
$ R. \+ ~4 E% Q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* W2 R2 t- r' }+ D% Z) A6 {
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" X" J# V6 W: l$ ~5 h1 G
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% t7 D( Q; N/ u
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 P6 S! G1 i: @2 Z7 c& n% S% i& z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; W  z% x- Q2 Y! S
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1" f' H( O2 W- N; R
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 w, w3 G; j& Q) p6 l# _' H
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* U) a8 S. [3 \* h) K- e6 L
" _# s+ C! ?9 O0 {/ x    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- {. B9 Z6 E6 k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 M/ j# @2 C& t% @2 `    mcasp->regs->PFUNC      = 0;          // All MCASPs  B5 y+ Q$ G# P# n# D) K
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 S) H8 R; q! I5 P+ w  a

  Q9 y! H9 V- U* Q' [$ E    mcasp->regs->DITCTL     = 0x00000000; // Not used
( P- O& \+ U" h    mcasp->regs->DLBCTL     = 0x00000000; // Not used* P0 c! b( a9 k1 I$ ?1 `
    mcasp->regs->AMUTE      = 0x00000000; // Not used) R# W# q6 L: z! S) {. V

6 T8 Z0 O3 }7 J1 r8 t' x) @1 }2 @7 W/* Starting sections of the McASP*/" _6 w% R7 m' K& D  f7 P  a+ v' L
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & A( R5 n) C9 M2 T7 j2 A: j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( p4 G  b! l7 Q) T, p" C
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* P) r1 `# R; n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 P; z8 s% n% T* I* J7 b
- V( f$ `2 y- d3 T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ d1 x/ O* e) W3 [, c" m- ?' p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 |" M% u! S5 K/ u* y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , w6 j( B3 D  n1 f! }3 b( l( C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 P3 ?" a; d( ]' S5 ]
! z2 V: G8 j; ^' k0 v' e' f7 a    mcasp->regs->XSTAT = 0x0000ffff; % C) f& m1 ?- W% n
    mcasp->regs->RSTAT = 0x0000ffff;
% F* |9 i' R/ l% \7 H' h
5 U. d( R; L7 G    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( B7 z( b  B, [( j5 r# Z; ]: U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 i8 |8 ]5 @# ~* _1 G
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 r% P/ Y- f2 l4 r) V! b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 n# {. g) `- c' t0 D) {
5 I8 u0 k' I7 ^4 D! H& H2 U
    /* Write a 0, so that no underrun occurs after releasing the state machine *// j: s2 n4 g4 q5 ^
    mcasp->regs->XBUF5 = 0;
2 @) w8 j) Z0 C0 y4 _5 ~0 W% A    mcasp->regs->RBUF0 = 0;9 f! K* R3 ~, N
' I2 o& A( e; n% r9 U* I7 L
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + K+ x: O4 Q7 C1 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 J: ?" N: l2 a& Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 p" F# k1 v/ c. z% k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; p: f7 X# {* g5 B! M' m) D6 {+ N5 W* x8 u
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 t) `! W8 L$ X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" n. N" L' Z% e, r/ E. X    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 b1 H+ U2 B6 ?6 T# I3 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 g$ D2 n; z9 p" s$ l7 v. O

! Q7 a3 ~: H5 D: r    CSR = 0x0000;
" p4 o; k! \+ ~4 e& w    INTC_INTMUX1 = 0x3d;" V3 p9 q7 U; Q6 c4 F
    ISTP = (unsigned int)vectors;. f: `! E4 Z: M1 N% g
    ICR = 0xFFF0;  7 ]2 {) ?5 v+ u/ n( f: r- o
    IER |= 0x12;  
3 P- ^+ y' d. P$ Q& C    CSR |= 0x01;  . t( P8 b! u" h! K$ t
) `  K1 u# W. b3 I: ~' _5 T
7 q: f. R- p/ s6 R" v# Z. F( |3 d( t$ q

$ M( `) d+ u" X9 u3 h. E$ ^还有就是两个输入输出函数:4 E, i2 l3 x8 R% }
void output_sample(Int32 out_data)
7 {2 {) p. M' a- Z6 q1 x{4 l+ x  B- u& p) L$ W4 x3 w
  AIC31_data.uint = out_data;  
; v4 j6 O! S$ a  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 P: I0 O  }; b' a5 a$ a. `4 M
}/ \. r5 N8 v6 B+ ~
6 @: `' t$ H! ^. ^6 X
Int32 input_sample(void)" r, g3 e0 I: t6 H% Q
{  
( Y0 _1 N8 ~0 ?7 e! w  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 P8 _+ u' ]& B' i/ J! L8 U1 g5 }+ i1 c
  return (AIC31_data.uint);
7 `. v. F1 @7 |2 m2 {}
; e( M. e- t" Z2 A  h% C1 v. f
7 V3 H' ~* y( w2 a( U
分享到:  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-10 06:46 , Processed in 0.038138 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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