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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: J  D# ?2 e6 }$ X- \1 a
main文件:: j1 _6 g- q; B% {" ~: S" X' q! T+ d; e
interrupt void interrupt4(void)  5 ]6 ?3 z0 T1 ^
{
9 M) t: s+ O, O: o5 j8 @  Uint32 sample;5 I0 d2 k) y* d4 C; l/ `# q* j
& W; ~. t+ B$ r
  sample = input_sample(); // read L + R samples from ADC
+ H7 C7 |2 D* E0 ^* |  output_sample(sample);   // write L + R samples to DAC
7 L! p, u( g) i) B  return;' ^$ D) }: _& w( E- @3 _6 H
}1 `' k  R) b& j0 l

, f. b* V& X, z5 L4 S' ?6 xint main( void )7 h# ^! e, `* e. S* ~
{. X' P  h, F7 E* m" W

" |% G8 o) y0 }! _9 G& O5 t    /* Initialize BSL */
; N; a! F' x; B* U9 {9 u    EVMC6747_init( );
/ B& M. t3 y( k/ Z/ {2 i2 o        /* Call evmc6747_intr function */, h2 C% J" \' V( Y, g1 w
    aic3106_init( );& _6 U, F9 o! N( p) T) ?& s* I
        while(1);
  I9 ]) g) t( B  O}" R' \# P2 W- R2 k" m/ X
4 q7 I/ M% R4 a( o) M( k
4 c  C3 D4 h) N2 q9 N1 K. `
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ `! X' {) d0 h3 z
/* Initialize MCASP1 */% F% L2 {) L" c: h+ O
    mcasp = &MCASP_MODULE_1;
6 \6 j* {" y; \) Y, m8 N    mcasp->regs->GBLCTL  = 0;       // Reset
1 W3 _( ]. P! k- k* U% s    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 ?1 E9 p, Z& {. q: W1 x    mcasp->regs->XGBLCTL = 0;       // Reset TX1 M& |8 T; v+ B
    mcasp->regs->PWRDEMU = 1;       // Free-running% {9 e0 R+ x( E
   // configure McASP0 receive registers6 P" c+ f! |! U& Q# u/ A
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 j+ L$ S- L2 a  K, i1 T) f
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 i0 p( J9 V3 i) b; j) u" ]    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 C. E8 o% n( y3 n. I( n; c
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" [9 e) B2 Z" a3 N' g& }    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ I/ k2 ]% I8 I3 Q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 T4 S8 d5 T+ E  n
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 z# U/ V2 d- Q5 w    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! O# D7 |  Y* h# S% H8 v/ B3 q

+ v. l; D# L( |5 Q" z9 W) G    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# k% E! j* {! G, E, s    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, ^3 R/ B  H2 t7 P, y6 l
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! H9 d6 _; M7 {    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 s5 p! T) A$ L/ _    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 h6 K% P) I8 P' u6 H/ C    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1) b9 E$ A; ^! @2 F0 L) p4 u
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
5 H3 v& S3 G, l/ x8 c) {4 D8 g    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. j% O* d% v* e3 r* w- }
- w: G# V/ R+ v) r: _+ w# h1 a& ?    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN3 o  ^- \% v, u" D9 l
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT, B0 k+ W, D6 R! ]7 [0 Z2 B1 V
    mcasp->regs->PFUNC      = 0;          // All MCASPs. ?& [0 L) t  n' A3 ]
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 L1 z# h& E, l( A' u% v

/ L: e# Y$ V# y4 s  e    mcasp->regs->DITCTL     = 0x00000000; // Not used+ i/ S' |  I6 g. A
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: X, E. R4 F6 J  L. T4 M2 }4 l    mcasp->regs->AMUTE      = 0x00000000; // Not used
( m3 B0 ?0 W, z: i
4 I) ]( w  Q( n# w5 X6 s/* Starting sections of the McASP*/
0 w, @' S$ ~7 O3 p0 i    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 B5 C' i+ r/ {$ \* X, z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" U1 R* V+ q& o" _3 G' `    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 z7 ~  j0 j6 w4 f4 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ ^5 H. [1 p4 v( _  U0 v
4 |% z- @- O9 L0 l# U8 R
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# ]- e, b) M/ _: v) \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" ]; H) c' a" T1 C  k) U$ h6 t    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 r9 l: M  a2 i9 B& A5 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, A( _- t8 ]: C# B& h
- a" r6 P5 f7 ^% v0 v    mcasp->regs->XSTAT = 0x0000ffff; - K$ o% P( n/ a/ a+ {
    mcasp->regs->RSTAT = 0x0000ffff; 5 P4 m4 X9 N+ D% u
0 T2 A3 z% D3 l, V; {% `& K6 s# f
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' j# ?- e' j+ B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# M) M( [5 c/ k    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! V& B% n0 {4 W0 c' H; |+ v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 F( x1 {) q( J  ~- B

* @% @1 D' W7 v* [+ W3 r    /* Write a 0, so that no underrun occurs after releasing the state machine */
' n* O3 O- ~% Y) p    mcasp->regs->XBUF5 = 0;
3 j# i2 S& P* F! i1 b  Q    mcasp->regs->RBUF0 = 0;
( O3 n4 _$ }! {/ t* J: L
8 U: A  h4 N- {5 X5 F3 X: G    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( T* J# B$ Z' E: ?1 g3 v. L! y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 _. c. G8 J% J4 x    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 k2 b# y! L1 V0 u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, u. B) V; |0 d. W- i& T7 ?" V5 H. N* K9 p; |7 a+ ^
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 G3 q6 A9 D" ^! g& K' P6 w: ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 ^$ ]% |: r/ U' l/ j- s    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * n6 t9 O% k" s/ o. ]) q. X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 |& s: i  H$ w7 i# l( V
4 G5 Z; m  s2 Z6 X8 @, B8 ]" H3 l
    CSR = 0x0000;
! r( F+ A6 `# d, m2 i7 Z* q* |0 }    INTC_INTMUX1 = 0x3d;
$ `1 ]* j/ y4 u* e    ISTP = (unsigned int)vectors;2 @+ g8 e" ?' K; R& L5 [
    ICR = 0xFFF0;  8 }% T1 |/ k) J3 o
    IER |= 0x12;  ( C' b0 U# i4 i$ \! z
    CSR |= 0x01;  * `/ D6 D% W1 U
( s: n8 l" c1 @- X! @
: D5 j. R1 e. t: x" ]& ]
# `7 K+ t7 h7 ^1 O) q+ H+ a
还有就是两个输入输出函数:  X5 ^0 v4 `) S
void output_sample(Int32 out_data)1 T! b3 o8 f: M0 M& r" B
{
5 u2 R4 j% `* }3 H5 Q  AIC31_data.uint = out_data;  : a2 O, d3 I9 @- E( o; R
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# c% i. T1 ]) m# ]" P; d9 P$ d! E
}
# y. Y6 d/ A# i0 s2 F' R
9 V3 m; R8 z& O" ]. C! G5 ~, zInt32 input_sample(void)3 F9 a7 y9 \; y& b- p
{  
! n9 k  g6 `/ o8 P5 H  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- |1 P; n0 C1 `1 i4 U" F  return (AIC31_data.uint);
% R5 r& s; C* i4 }1 ]+ K/ S% ^}
+ g" B  S9 @7 S! P: R9 E/ M% r, ?/ O' _" z% e. `: ~
分享到:  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-3-23 12:23 , Processed in 0.041166 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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