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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# J5 t  J- I+ u( [main文件:
; x/ @4 T3 Y( ^7 @interrupt void interrupt4(void)  6 z3 @4 Y5 s" E5 p/ C! i
{
3 y, m, Q1 `" g% T! J  Uint32 sample;- u  o# ^+ z1 l8 N& _. i. }

2 N' u9 Z* x( p. v7 F& I  sample = input_sample(); // read L + R samples from ADC4 ]* ~! \& A& J/ K
  output_sample(sample);   // write L + R samples to DAC 7 c3 h8 D! A- w( H& X4 T8 m5 _
  return;
9 J2 x3 ]9 @& H) M& S}
# U5 y/ r( C& t3 X  P; k/ f& K4 T$ C: ]- U7 z
int main( void )
- R& s# R. P- w8 o{! n+ [0 u& b- x0 a* y
/ P  |/ w! I# ?" y: k; X& t
    /* Initialize BSL */' q3 O7 m" z& \2 J
    EVMC6747_init( );3 j* o+ ^* W  ~) \, c3 h
        /* Call evmc6747_intr function */
% }3 K0 U0 j. |1 T" N    aic3106_init( );* x( d5 `" @/ O: e- R2 c
        while(1);1 d8 q* O3 o! f( @
}8 [' ?7 s) S5 ]* Z; \3 g
  E$ D- a: B7 I: G9 ~3 o
# @! e, ^2 }: K6 @* t0 S6 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; p) q9 F+ \0 h% B/* Initialize MCASP1 */" H, b9 y% B/ |
    mcasp = &MCASP_MODULE_1;7 [* ]" B, N; F# q! m2 ~
    mcasp->regs->GBLCTL  = 0;       // Reset& v. ^3 y( P1 I: e+ z, a
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" M( M# I. G+ S  W+ M" d8 K    mcasp->regs->XGBLCTL = 0;       // Reset TX
- {$ a/ b$ W  `, I    mcasp->regs->PWRDEMU = 1;       // Free-running
  m. {0 n; q6 f( T   // configure McASP0 receive registers& A) i8 V6 n- Y7 I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 `: e& n% p1 r
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( ]$ k8 i3 Y. i2 ?    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' n: l+ v( p, v    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! Q4 V6 M5 r/ n% v$ @& p    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). j" t0 t- C: l' X$ S! L4 y: Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! ~* w; V2 r) M1 p' A8 I
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- l0 q5 W6 v- i' |( c! U    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 b& C' L- \/ D! ~9 A8 ?  ]) b& O. C  s" M! _5 a1 P
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. g0 T9 C* t9 \2 ?0 s* U
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! `9 s. ?+ V4 N+ h0 n: K* B
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) @! P: }( N- ]6 U6 o6 [% X4 f1 P    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. e3 M; F+ j) o& g6 m
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( C% s1 M$ ]. a- t7 B% p6 h; w    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ D7 }0 E8 A8 M2 J$ d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! i3 X) [: X. X+ [- a9 G: ?3 z7 V4 g
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 v  x7 J/ p  f- e# l2 A. V
. H4 T* g. I) B* X- g: x) y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( R2 J4 i2 G  z) f    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" w0 p+ X* }2 W1 e5 P9 \
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 j' v6 V/ d3 j# u/ \! U+ q* `: r
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- E% Y- e! Z: i: U
) m' W8 `/ O; V5 O$ i    mcasp->regs->DITCTL     = 0x00000000; // Not used4 u0 A3 `! a' F. z4 J* K, r
    mcasp->regs->DLBCTL     = 0x00000000; // Not used: J7 T6 Z' k8 z% r5 Z3 Q5 R
    mcasp->regs->AMUTE      = 0x00000000; // Not used
" U9 h- E. M% U7 c% B! `! C( p0 g5 p* ]* L
/* Starting sections of the McASP*/# R7 D  f. H+ A2 ~1 j& g7 Q  [: ]* v
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; d1 b6 F9 k- @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 N. F- Z) o( u; u3 U$ l+ f! W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 g' D: ^: |8 f, Q2 y! r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& s0 H% G9 K. |: n/ z' z: F

  K5 U+ E8 C2 h; I: j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 L) j/ A5 }6 D% S3 a$ Z. T' u6 B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ }- C# f" n9 i' T, \
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; `# @2 I( _3 s5 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: g7 u; _' N% \% `9 X+ I) H
6 Q' ]4 F+ G( f; o- Z    mcasp->regs->XSTAT = 0x0000ffff;
) L; }3 K  A) l; {, L8 c9 M& a* P    mcasp->regs->RSTAT = 0x0000ffff;
/ g8 k: F) [& D6 \! N. K. {6 w) J
$ ?$ ~9 `$ T/ F8 s$ _$ F5 y    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) F3 A- d5 C; |& r/ d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; L6 _% e6 k, E5 G4 i. o9 b, h( b2 G5 V
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! o, K7 D! b4 T7 W4 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ Z8 P- S1 F5 @. g
) D! `. O, |: N5 t7 h) \
    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 X/ j# M+ v7 y+ z4 Z3 ~, A    mcasp->regs->XBUF5 = 0;4 {. L2 `1 t# j- f+ j7 L  X4 W& ?/ ?
    mcasp->regs->RBUF0 = 0;6 b0 @, P2 E! x" D' n' Q' }

6 d; K% N; G/ b, M: n! _1 x: V0 L$ \    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ E. }6 m# j) Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ J+ v6 m$ |4 r2 n3 @/ V    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , m3 ~- M' a% ?/ `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! q" L# C, Y4 ~, T5 S
! G! o4 M' D% @    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& ]6 E) T& u" R9 y* }2 c1 a# Y1 ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 ~- _0 u& c. B& E    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% R1 y; X, m! E% A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ z: A- g/ @. R) X' P$ r0 S" |; R  I' ?4 P5 v* S# y7 J4 s
    CSR = 0x0000;5 X; R! v5 T3 @! c% v
    INTC_INTMUX1 = 0x3d;
% u0 s, D6 M3 [; w5 d9 Y    ISTP = (unsigned int)vectors;6 z0 I9 \4 V4 a' P/ s1 |
    ICR = 0xFFF0;  ) D$ e: R& L7 ^/ |& e) i$ l
    IER |= 0x12;  
. V3 \. ?( s/ t0 t( k* m7 E. M& |    CSR |= 0x01;  
8 b' g' R; U% a. ^% \. M/ m5 ^. B4 P! V1 s
5 F! e/ c; T, }+ L
$ b8 S% F& M7 O) x1 \
还有就是两个输入输出函数:
$ Z/ G* h' u( O- Dvoid output_sample(Int32 out_data)$ x& S7 f/ g6 G3 F+ I" t" C. ^
{
3 Q1 p  Y& l- A# D  s0 `2 ^% H) g+ D  AIC31_data.uint = out_data;  # H) c- b% j* K* ~. Z2 b0 @% h: R  G
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. Z$ P5 o8 c0 O7 a0 N
}
# g! Q5 M6 p6 c% P( k8 p' |2 e- `% H' z1 S9 N1 I$ q
Int32 input_sample(void)
. Y4 @: D1 A8 ?0 Y5 P{  ' U3 C3 i! k# |- x! V% p) L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 f; d) K: u" C2 S9 ?  return (AIC31_data.uint);
+ T, l+ [# L9 X; w3 x}
) |3 D1 I6 X+ j. o- b
& i  d" @% K0 ]- P$ y! 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-4-30 12:09 , Processed in 0.038088 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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