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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: b6 v  h% D. |5 I% m) V
main文件:) @  r- [) d5 H2 j  t9 G! }
interrupt void interrupt4(void)  
% o/ J. m& W, X( ^: R) o{  |) Y4 {" ~7 J. e6 J) g
  Uint32 sample;
! Y& f- F6 a+ |3 I4 V
; `# k/ g8 j2 o% L  sample = input_sample(); // read L + R samples from ADC) h& D- o& t+ Z( i* h
  output_sample(sample);   // write L + R samples to DAC
& a# G6 R; \% h7 |% r  return;/ h) L% b% Q0 n  n# y
}
$ [; f6 W* M: {; L
% a$ N2 d- y! P1 y9 F7 `1 I  Sint main( void )
. T, B* Y- {$ A7 N5 n$ ~, |{
3 @; q# J2 U0 t( C: z- ~9 T5 e( [7 P: |
    /* Initialize BSL */
$ j9 @. B7 `" m9 o  Y& @: F5 q' \    EVMC6747_init( );
+ R. T, j* a& t% S9 R* {; U% n- Z        /* Call evmc6747_intr function */
- {8 t( h& L9 o  Y, D3 `. w    aic3106_init( );
  O( ?5 R2 s* j( j7 u* q7 \        while(1);8 I, K3 Y! A3 L0 N
}
- v2 V  Z! c$ p& X2 R. d3 N% ?/ l; K* S% f; A  E
( m* E- s$ I- s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  [5 [; _+ p1 T1 U  v0 d6 N/* Initialize MCASP1 */. W* C2 |$ q+ z0 u% `% m) e& j
    mcasp = &MCASP_MODULE_1;5 q3 m3 t: _8 t" G
    mcasp->regs->GBLCTL  = 0;       // Reset
% s0 ^9 l% j3 {    mcasp->regs->RGBLCTL = 0;       // Reset RX' r5 l/ I" V4 p
    mcasp->regs->XGBLCTL = 0;       // Reset TX
; g3 O2 N* ]- }7 {9 U    mcasp->regs->PWRDEMU = 1;       // Free-running4 V5 m7 Y. P1 L5 Q- A
   // configure McASP0 receive registers+ P4 @; I3 T6 l% \- i0 ~& ~
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ \. `# |! F6 B+ G9 W7 A    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; m3 e  G, y* {1 ^2 c    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ I* V+ R1 f( b0 G4 e$ h1 z& p: M& Q    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 c# q: Y/ N8 j1 O    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) \( e( v, S/ Y7 h    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 H  ]$ y1 e6 }, c    mcasp->regs->RINTCTL    = 0x00000000; // Not used
! }/ `7 w9 @# J: h" h& ?; E  v/ E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 Y- B% i7 V$ l; l5 W$ `( X0 c$ q5 Z6 ^' Z8 m/ o4 M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 t7 J! z/ y" U- L% g; q, K3 p- O    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 C  L5 w( {2 {) N
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' b/ v$ z' K/ t8 ]& [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 Y1 j. O  `, k9 `
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
2 A8 e* m9 z5 I0 Z; P5 H4 d    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- h# X& n( l" M9 g
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 N6 \1 m0 {# M* B6 c9 _    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" q! ^5 K4 `0 m4 L  {; C1 ~7 X' n' C* |; \# l: R# H. Z  t. b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; @! |3 I7 Z" d& @/ c
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 C. {7 ?! _# f( W/ K- B6 U    mcasp->regs->PFUNC      = 0;          // All MCASPs
! m* v# Y$ T4 V4 z+ l    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) f/ J- f/ ~" l+ E
% m4 R$ U& V- `' \
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% j4 c! s7 a5 v2 y    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 C5 {( H" B! r% I; t3 Q
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 E, J: e5 {" J( M. w5 h5 ~( w- D

! |6 D) }2 W2 u2 k/ z/* Starting sections of the McASP*/
! o" j6 O- B) R" `5 \    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 g( m8 f! Q4 i0 B( @% v3 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 K9 A+ I) I, h; `/ o" \9 J/ E3 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % G# h6 K& H2 F0 T9 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 s3 q; m! K; F+ }
+ B* e$ C/ o7 Y. N* P0 Z; z- Q    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 q/ [2 U! S3 _! B: K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: _' ]3 j0 u' A# x3 A- f; d    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " z5 U- K' o2 I" x+ l# Z, V' ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 K! N9 s; E6 _
6 ]1 |- H5 ~$ m* C9 y4 U
    mcasp->regs->XSTAT = 0x0000ffff; * k5 B; ?: T4 o/ h' Y
    mcasp->regs->RSTAT = 0x0000ffff;
/ t+ K6 m. \; s, {. u3 X$ \# W1 U; X* s# H4 x1 j$ F8 K8 z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) [& f1 K* Z8 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 o  L1 N% V" ?& n  r; x/ l+ X
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 [# Z& V, G2 j% H% X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 `" X" r8 ^; j0 f' e
8 X8 [/ K- ?6 {, b1 A* c
    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 |7 u& L8 n# p( e$ d- T- @    mcasp->regs->XBUF5 = 0;
/ T: d" p( k" N* N6 G3 c0 Z    mcasp->regs->RBUF0 = 0;
- t+ i! B4 T: a0 C6 m; S/ Q7 O5 d  k* B# ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) l7 A& h1 o& Q. @1 y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: ^$ C2 [9 |* V: _! R) m+ k
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ ^# O/ y  j8 {- w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 s- ~0 t1 ^$ a$ i0 G
3 W& ?" E% K- E
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' a$ b. j  k( I- z$ f% m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! R2 r5 I. `8 M  Q* z& f
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / y; I7 |$ K% k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 {% l/ j1 O9 H& c1 \% Q

1 L1 U0 @% b! x    CSR = 0x0000;
# b) I7 h8 _5 q& I  m* @& V    INTC_INTMUX1 = 0x3d;
+ \/ Q. i& m8 s$ T    ISTP = (unsigned int)vectors;
  ]- B7 p3 V2 B% m1 N( ]9 w    ICR = 0xFFF0;  % r2 n% t; l; i9 D* j' n
    IER |= 0x12;  
6 Y1 g# g5 n+ z    CSR |= 0x01;  1 v4 _- S; w( I4 S: Z6 z% l( m/ z

* m( q; O7 H3 U& J8 m1 I5 e; @8 f5 M  K

  ~# ^8 ]. b, Z9 S还有就是两个输入输出函数:
+ q$ d: }2 Q$ q2 @* z! uvoid output_sample(Int32 out_data)
4 T4 C; _' C7 L" _6 b6 h/ ^& k{
) Q0 @2 ^9 Z3 f. z7 I! ^2 O$ X  AIC31_data.uint = out_data;  
! I9 N0 |6 f. s$ {0 z  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 v! ]) `+ Z+ a& ?
}
; D" C* l, U' X# G+ o9 k
# u4 B. l# G5 w4 v: x7 n0 |& JInt32 input_sample(void): _3 c1 J/ O& L/ x) @4 {, e7 `
{  
% Q0 V' N. k, f; q+ }9 M* }" [9 ]  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 o% r# X% X) b5 C  return (AIC31_data.uint);3 w+ ^) e( H# ~$ v
}
. r% [8 q, c$ \( V! C& E4 k$ k2 v8 t7 V) r8 e* Z% t! y4 k( d
分享到:  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-20 08:46 , Processed in 0.039153 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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