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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! y* I) X0 d+ E- b6 P  Dmain文件:, C* w. r& D8 P8 @/ o- w6 N
interrupt void interrupt4(void)  
1 t  A* k& ?% o* N6 C8 v7 ]& Q{3 o, u- f- O4 P
  Uint32 sample;
% I6 [) f" {8 x5 D
( `% t1 T; d5 P" j  sample = input_sample(); // read L + R samples from ADC* s2 ?5 n4 J7 Q0 ?( e6 K# J( f1 P
  output_sample(sample);   // write L + R samples to DAC - v# e- @$ k" y4 p5 O5 k
  return;* H4 _( ]4 W2 f; \
}: q) a/ o9 g7 O, g; v/ v1 l1 v

, n; t( b/ `) _) d4 I0 s; q  kint main( void )
: U& n, }& }  b& l& ^{
/ {- D, _. I  |5 c% i- y3 s1 h- a
: H( P4 }/ y# C* d% t% A$ j$ k    /* Initialize BSL */" P0 B7 a4 V( F3 M- R
    EVMC6747_init( );" R! @& }: K- g9 x7 b% y3 ]) r% c
        /* Call evmc6747_intr function */
- ~4 u& H1 l" D1 X! P    aic3106_init( );
+ H0 r8 \3 O$ O: g) v- v9 ~        while(1);! R) N: }( Z. E. w6 r& [
}
$ o; M$ n( c! U( S0 ~: v4 X2 J. o+ o) {: i
" t: j3 k+ ]5 a/ V# f) V- s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 p5 T* V: F' N5 p5 s5 m/* Initialize MCASP1 */. u, f% `. z5 d) {
    mcasp = &MCASP_MODULE_1;
1 x" `, J( D- P) _: h    mcasp->regs->GBLCTL  = 0;       // Reset6 l9 C  B6 \  Q. ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 {* A( k4 u/ m) v: i& p3 Y$ i( o* D$ G9 M    mcasp->regs->XGBLCTL = 0;       // Reset TX
; S9 V  z4 A# J# p4 u5 u    mcasp->regs->PWRDEMU = 1;       // Free-running% m* j" @$ z+ y. J3 t7 s4 `$ e
   // configure McASP0 receive registers
1 ~' F# W+ ~  o2 {( Q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 [$ c/ p/ H" l. K* r, g
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 I% n$ t8 y& x8 Y: X+ c    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 D, A$ `" `* A+ ]    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( r3 [; k1 k. e0 b1 x& ?, R
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( H+ N% j. v5 a' b' P  h/ m    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ F( A8 h1 f" y2 s. j! o3 S8 X! D    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 Y0 y' J7 t3 B3 [( C
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# \! @2 t* R* E. W& c7 ~
9 C0 H6 X: P: l3 Z2 |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( e" v: J( a! D3 W! j+ V; o
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! g( Y: U2 n& J0 F
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
  K4 D7 Y! C  k+ Z- ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 ~# ?9 |6 z0 m( ^# S    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 _' m# m9 U( e- R" G    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ i" o/ `) F3 C7 b. _& r
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 |& ?# }+ Z- z, @7 p9 |    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! k! y/ q- G; o& F+ V( n

! p; u! P. I; ?$ }    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. u. u! o' v% i4 h& b
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 `: f7 }* u: }8 {8 M( ]    mcasp->regs->PFUNC      = 0;          // All MCASPs& c7 ?- h6 @6 x! a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& d! a8 m# \! s

& J& }$ a9 j( r6 I4 X" @0 p% i    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 F+ u/ F4 I+ ]7 r' o! V. @$ b0 I    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# V2 K0 N1 c, B  b    mcasp->regs->AMUTE      = 0x00000000; // Not used, N4 x+ L/ p+ R, _# h
3 L" V4 I; e  ^+ a, B6 `
/* Starting sections of the McASP*/
" |, T5 s3 w+ T. S& `    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 \  G$ c3 n$ A# F# w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  t0 g' m* T6 ^' L& J, G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 C7 l( X" O- T4 t' g2 [; `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# Y/ G4 i% O5 F

; ?; q' m' x: k3 y, o9 X    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + N( c7 B/ [- N5 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( R/ R) C, u0 O( M! }
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 Y  l. ~' J, p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# k6 s0 F; P% H8 H0 i) d  r* X$ `/ R) z" f# G  T/ J
    mcasp->regs->XSTAT = 0x0000ffff;
  t: J  V7 ?+ p, y" H. A' N    mcasp->regs->RSTAT = 0x0000ffff;
1 [" S2 I2 W- e
" a, M: p6 C' h% g+ X( M6 _    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* H5 z- k" q: d, Y/ `5 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 `/ j9 e% T5 b0 q) r
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 q1 R: n% J" W, z5 H0 x) W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 W+ [: `7 Y5 @9 }& b. O6 C( c1 _$ g3 F
    /* Write a 0, so that no underrun occurs after releasing the state machine */
. ~3 E$ P/ O1 K  z* T) c    mcasp->regs->XBUF5 = 0;
& @3 A! a( c% [& j6 F    mcasp->regs->RBUF0 = 0;
- e1 |. ~/ Y9 S) Z) U4 B: p4 @4 C9 F, L5 ]- j& _5 j
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 \5 L" N- ^- \1 H; T5 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. S  j' z' J: q9 n/ n* U    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 U' e/ g' q% [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: R8 i# j8 z0 N, X
8 r( q) n1 _$ O& l+ y7 w
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 v; Z! Y& i/ s+ S2 p0 `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. G5 c# {/ g) L( J8 @
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , ^* [; c9 \4 m8 i0 o3 x7 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ k0 |: [: {" c! Z6 s. G! I
1 |2 y  z  [# r. [2 L; c8 Q    CSR = 0x0000;
: ^: ?4 m3 X2 u6 @2 ]2 ~3 \    INTC_INTMUX1 = 0x3d;/ B3 x- r' i: y; e. `0 O
    ISTP = (unsigned int)vectors;
& U3 M/ e& C) |0 x3 c4 G    ICR = 0xFFF0;  6 e2 @7 s; H; Y( H# n0 V) z9 P
    IER |= 0x12;  
5 J# r1 D1 S' d0 d- A" }    CSR |= 0x01;  
! c5 X/ l1 Q1 |5 |- u7 P9 b( J2 e5 I  A- h$ N9 B

. p5 x, ]1 a6 h0 X' D* N& T' _  x$ K% B% o* I1 n
还有就是两个输入输出函数:
) A5 O5 S0 o% b) i2 `3 ^void output_sample(Int32 out_data)
# k" {' |3 d% F- B{
5 x+ u0 n  K3 i/ m5 T+ b  AIC31_data.uint = out_data;  
" w. |* Y6 |: E  K7 M" J  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 D' ], O( y9 v, n, c* t
}
/ V8 }# z* c- v" Y8 Y4 J$ ^8 }9 K8 |9 K. O) l8 ~
Int32 input_sample(void)7 G3 I! T8 ?. q; ~8 p0 ?; }
{  ) F6 j1 [; @/ K* B5 J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" T8 a. q% g) y$ z$ z0 c% Z  return (AIC31_data.uint);
. e" {( R1 U( `$ n}$ n& H" |9 P  C. N; G' `0 v( ]
4 |+ @/ M, G! z% R
分享到:  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-12-19 07:49 , Processed in 0.047761 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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