C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 n/ r6 h3 c" e0 Pmain文件:. m$ N0 _  q- @9 n
interrupt void interrupt4(void)  
5 g! Z( ^: v. N6 R{: Y8 T  j1 g7 y& Z
  Uint32 sample;
- B9 j5 U& U/ T" j# h* P0 Z6 K! h! n: f; [" b' m
  sample = input_sample(); // read L + R samples from ADC2 A  m9 m8 @# p& W% |
  output_sample(sample);   // write L + R samples to DAC / C: t2 L! J( ?# a: c6 c
  return;9 V0 x  J6 _" V( s5 r+ R# {
}- |# j! b% A+ _% r6 i

3 G4 a" i6 k! y5 z+ A1 \. cint main( void )
% n# z0 ~4 R+ E{/ f: y- J7 M* H+ x: E1 Y
4 H$ S& X) E6 s8 H4 m
    /* Initialize BSL */
- j  C1 T# M" b7 w4 N7 n    EVMC6747_init( );
9 k; Y1 z$ l$ K  V! {$ M        /* Call evmc6747_intr function */  J( F* L' H, P. |
    aic3106_init( );+ b! h8 U: B+ s* Z
        while(1);
4 q# G" ]$ w7 V) S. a}" z; m8 q0 l$ S9 \
  F, D$ A1 f  h* E8 }
: R7 r, ~9 j0 c, b$ y9 H
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 m$ m# _. a" C; e# u- i8 W/* Initialize MCASP1 */
6 T  |3 j3 b; S2 I7 C    mcasp = &MCASP_MODULE_1;
5 k. e8 n2 d; X& ]$ M, ^    mcasp->regs->GBLCTL  = 0;       // Reset
/ x1 r( A' g- }5 t9 K" r3 d    mcasp->regs->RGBLCTL = 0;       // Reset RX9 h% M, f$ C" q
    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ Z' d- G1 N6 C2 O$ `# ~) ^    mcasp->regs->PWRDEMU = 1;       // Free-running" Y# T) K# a( i$ W# O3 j$ G
   // configure McASP0 receive registers
1 G3 R7 j  h; h. P9 j0 h$ [    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* b  u" N9 n, h& F    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 O' i9 S2 m- o6 l2 ^! Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ }6 R) ]1 J5 g- y8 S2 R2 H
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 q' Z0 b8 [, K2 c  o, g7 M
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  Y1 A# h2 E/ H/ h& i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1* v7 {. ?" u8 ]1 f7 ~$ t$ l: ?
    mcasp->regs->RINTCTL    = 0x00000000; // Not used  s2 F4 E( ]3 }- B9 p. G; Y& J$ n
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! W, o1 T" _2 }

8 z$ v2 {1 z; L% u    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 e* Y3 \& }! t1 w1 c% j
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 h- s8 _2 h1 o( a( \) ]    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* T9 B( j" G' d# ^    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ D, v& z6 I: n2 \
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( D! ^; N( k+ r5 Y5 R# p- F
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 J% W" s& m) E4 z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. ]/ }' ^* w- k5 ]7 P% @# a0 |( u
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" G) z/ k2 O" P1 y' R; ]

7 P6 R9 [8 K: w4 Z/ L- T; W" \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN$ E) w5 `& S7 Y+ _; J6 W
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 R) r, G0 b9 O2 }. a) Z- X    mcasp->regs->PFUNC      = 0;          // All MCASPs. }& ^" j! G, ~$ g
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 N) s/ L1 n8 v' e" p  K9 V/ L/ G9 K6 T/ q& @  Y
    mcasp->regs->DITCTL     = 0x00000000; // Not used& u( B' O+ H4 J* j0 l, E* ^: `
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 u* o4 \1 w' r8 H    mcasp->regs->AMUTE      = 0x00000000; // Not used! r( c( S5 C1 V, B/ a9 v
0 c$ u9 p1 d5 Q* R
/* Starting sections of the McASP*/
+ T$ E3 {+ I. a+ [) w8 U6 Q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ H$ W+ w! C/ I/ A+ X8 P( A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 V6 J) J* Q2 [: \
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 q* P" S( q) a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 _2 E6 s3 V; r% v) p( F! A% L+ `' U
' V& N+ |9 o, k8 k
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 N* t% }% t2 d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  ~8 M& r& O! H( z5 }
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & a2 [, u2 ]7 M* u, Y6 }, b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ L+ _1 \  ~+ Q- [0 J
& ]) q& Z) d1 P    mcasp->regs->XSTAT = 0x0000ffff; 7 \0 k. u6 B" a' l" r: X
    mcasp->regs->RSTAT = 0x0000ffff;
& R& l* K/ ?; b- O$ V/ D: {% Z8 G" A& G, V
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# m1 f3 H; P" }+ b# X& x' v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  R( r: `# s" R( n! G
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# P$ I# j2 ?" T5 u1 ]' k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! V) ?. S6 \, @# {3 a3 o1 Y- s

+ {# f; a* a8 A/ a+ h    /* Write a 0, so that no underrun occurs after releasing the state machine */* Y4 O( A8 e( M- x! v
    mcasp->regs->XBUF5 = 0;- `8 o- K7 C. m* ]" j
    mcasp->regs->RBUF0 = 0;5 v: V0 a, }/ G; N8 `
6 o. y5 d1 E  C) a; }( J' Y/ @. \
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 |) O' Y  T2 L" o! z( Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* r* [1 m% P* ?$ d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, v. k0 \2 E% ~9 H5 g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) a% U0 C% X4 j# c7 j0 U
' U6 X$ e, R6 Q) e7 ]' Q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " s/ q# T7 n. l  u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: Q8 k/ Q8 @( [3 _    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 E8 H: p0 D" R3 X$ m* `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: p- ~$ {2 ~' s& Q2 {

2 w( c+ j$ [1 ^7 y  `    CSR = 0x0000;3 l2 m! ]) v4 J' Y0 R' a% y9 g8 b
    INTC_INTMUX1 = 0x3d;- ?: x) N6 Q6 E3 @9 @
    ISTP = (unsigned int)vectors;) p+ G' K6 n: q+ z4 q( p% x
    ICR = 0xFFF0;  
8 n3 a7 @  c- L& T/ [    IER |= 0x12;  
8 @7 Z0 @! t' W6 t8 Z    CSR |= 0x01;  
  K: D* y& T1 a6 r1 O3 m( Z% _' q! p0 ~

% F7 [, N) B, L: F1 Y; k( {
0 g1 _" x1 m+ ~2 h, C0 `' L8 x还有就是两个输入输出函数:
9 H: D9 @$ [! c3 }  d- yvoid output_sample(Int32 out_data)
( p7 e3 U1 `% C4 \( P0 v4 G{
( a. n, n  m$ F/ j  AIC31_data.uint = out_data;  ! k  U0 A6 S5 W3 O0 {- e# c8 o
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 ?+ @! O. U7 l/ N}4 Q3 r8 g, R( Z  e# E2 l) Y3 u, J; C
1 O& e9 `+ X; ?& a1 _, B
Int32 input_sample(void)
1 U$ v6 g: I; D4 J. @{  2 Y; C6 i) @: ]9 k
  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ d& I$ Y, E5 w
  return (AIC31_data.uint);
4 o% @- R: T9 H, D: {' `: i7 T1 X}
; e/ O# q; s4 v) a  p5 l4 U0 f9 J) J8 J7 }( _/ y4 l
分享到:  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, 2026-2-6 20:44 , Processed in 0.049709 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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