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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. m0 M, x1 V5 B* _6 Vmain文件:% p: q- k7 B+ u& V9 z
interrupt void interrupt4(void)  * s" G) k$ ^$ l$ U2 _
{
: @* L( c# V) R' Z  Uint32 sample;1 S2 y# U9 x6 ?

  j2 o8 C: o3 V& y' Y0 o  sample = input_sample(); // read L + R samples from ADC" m' A3 s3 Y3 e- `" y
  output_sample(sample);   // write L + R samples to DAC * c8 x+ [5 f3 q, U
  return;! ]5 h# ~. S% ^! m( q/ M1 D  C2 ~
}
7 d3 B% }. [0 [& _9 S) Y5 ^( n& a
/ T# m$ v8 I6 l& _* o0 H$ f( Vint main( void )5 u' N& N3 S) C9 J& R
{7 h! p# [/ }  g/ F  `

- w* {4 a% G; M! [2 [* t    /* Initialize BSL */$ ~" _6 T' x- r6 C- }; k6 j
    EVMC6747_init( );
) w9 _. l' `2 s# W2 k7 o( y1 z" [        /* Call evmc6747_intr function */
, F! M- U4 J* u    aic3106_init( );
0 X7 O8 p( Z" P6 _9 V  R& Q        while(1);
  U. u6 h. F& J% ^, e}4 {1 z* g9 B' t- m5 g& r; C

6 M, l9 e3 O$ i  w+ F, \9 P
$ Z0 K# h" A7 `" `  laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 p$ C7 D3 j' X6 b$ a& l
/* Initialize MCASP1 */
: }: \- a7 v+ V6 @  X    mcasp = &MCASP_MODULE_1;
0 C$ E* z- X6 |    mcasp->regs->GBLCTL  = 0;       // Reset2 ?. s+ y5 o! \
    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 y  H/ o: E. j7 u3 t: A    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 U( M  u9 r( a( j    mcasp->regs->PWRDEMU = 1;       // Free-running6 U7 i; g* B; b* ?) Q
   // configure McASP0 receive registers8 i) `9 S. |( I: ^$ ?6 l8 r
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' x' i& _/ I: y$ N) N1 l    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 h. r. p9 w% T0 I. P# L3 P    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; i( G, d4 H& O" w' _8 s: [
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' I' k0 v6 E( G0 R8 U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 Y3 h- d% u' ~4 @    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. K1 H% f+ W7 w! y6 i4 U
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 C+ e/ J0 E  S2 I! d9 X/ Z    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ q& E$ \+ n: v1 e# K7 W

* g+ B6 \: g, I, j, O/ |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" i( W* Y& ^0 G6 l; _, }$ w  p0 ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ a  ~- Z2 v9 \+ N3 @# d3 t
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) m0 ~, v0 l* i' X9 R/ F    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  J3 N! q  E! A' o: `% H+ I    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 i9 `( e- C0 A) [/ }! k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: S; V* I& T9 v( v: u5 q
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 p0 R4 h: _( s/ z9 d
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  V) R( S- H: _/ M
; j% }- c6 e4 X; a4 N. n3 T    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: L* y* u' o' Q. `1 d* u    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 k% R8 Q- }0 F; H" y, ^& Q    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 ~: L8 {3 f. V6 C' Y6 C% c# D2 Q1 M    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# ~) c0 L! F/ J4 O9 A. t, \, M: f1 ?1 w1 d
    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 M; K8 @1 W1 z/ f! |  U- q    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 K/ L6 j# ?1 I3 c+ x. r% u    mcasp->regs->AMUTE      = 0x00000000; // Not used
) Q; ?% Y5 L9 O3 F0 |" }' N. u
7 p) Z' d9 E. M7 e- v' N/* Starting sections of the McASP*/
1 R' A& v# u# Y2 l! p  s    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' E- H+ m8 F1 i6 Q; q) ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - a. E3 z  O" G6 b0 t
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % B; P$ ]% u2 f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 X. G1 ^- X0 n" _
  z5 N8 |- X& F! ]4 T+ N2 g3 C    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 ?/ J5 H' H7 q% r) m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 B% _: T! @1 |9 `
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- R9 i7 _  j( c3 g! Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' o1 m* G) ]8 z/ W

* a4 O( R, f, r* O0 y) @! ]    mcasp->regs->XSTAT = 0x0000ffff;
7 p! E! K5 w$ e; z. g    mcasp->regs->RSTAT = 0x0000ffff; + R! D, F& M. S* p1 `
2 @$ ^2 ]% q! B# u% d; Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: l4 |0 A1 E% Y  h) q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" o8 J& o) E" l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 o. h5 q) u! h* U, ?5 b& M4 y8 C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- I) r) [4 x+ i, @
3 s. _3 O3 [5 S# V0 n/ g    /* Write a 0, so that no underrun occurs after releasing the state machine */: r& F7 Y$ N0 z9 D- X9 k/ E; t) _
    mcasp->regs->XBUF5 = 0;
9 i4 p/ E) Y) o8 E5 z0 e# w    mcasp->regs->RBUF0 = 0;
6 v  ?/ I7 F. V+ H5 d" n; T# f' X# r: O& ]% G
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; Q7 ?& H  G1 o% |! A' {7 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* y9 c6 Y" X2 q  T3 o3 v
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 D4 V8 _% V" p1 {: B8 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 @, g! B6 s0 o4 M8 ]

% W+ Z# V3 D; u    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* l. b0 `  t1 K8 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! j( h- x/ Q5 {
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 o; Y+ U( T7 W# Y- }+ }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: X5 J6 C, f  G: V+ \( m
7 e" k* T- {5 B3 k! w7 j" C1 |
    CSR = 0x0000;  D3 [6 w- p4 K
    INTC_INTMUX1 = 0x3d;7 J4 K) O/ q7 Y0 [  [
    ISTP = (unsigned int)vectors;0 I1 q3 x- h' {) X
    ICR = 0xFFF0;  
  ]- v* k) Q; ]" B. @9 T    IER |= 0x12;  ) i5 j. S. E! R5 K- t) Y6 M
    CSR |= 0x01;  
) n! L! E! k3 D/ H! U, }
4 T$ l* l0 R2 n9 g1 ^3 O* ?
2 q$ }6 j5 M0 A& `4 r9 b2 a0 A0 R) E; l# z/ n
还有就是两个输入输出函数:
  v: l' K  r( W1 q5 Gvoid output_sample(Int32 out_data)
. a, k8 ?- h! ]& O{: `! B" S3 J& y8 o  J/ D3 w& X
  AIC31_data.uint = out_data;  
) G: N( n$ P4 ^7 I) I2 X. o  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) g* H' ^! Z' u! V}; V( J+ I0 g$ `) t; R

( x/ ]$ q/ C) _4 JInt32 input_sample(void)
+ a, e( r) j0 l4 ~" @  g{  
5 X- `0 d1 a& J* O  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 m+ [7 M. `* a% @+ f
  return (AIC31_data.uint);
6 @4 w$ ]; D+ L' w}
! W0 c& `! ?/ h- b2 K4 ~. \3 u" J- m! I4 B+ G2 Y4 j
分享到:  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-25 13:22 , Processed in 0.038889 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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