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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( Q- I$ A5 O+ R6 r$ y4 ?main文件:
8 c- P5 a! X% f2 ]( Cinterrupt void interrupt4(void)  
& {' d: L- K* J' H6 K) q/ F0 P{6 ^- [% X8 D+ B# I
  Uint32 sample;/ y& Q* m  ^3 S. U' y4 ]& B. m0 K
6 _! w8 X9 Q/ ^* h) W8 G# G0 Q2 ]7 \
  sample = input_sample(); // read L + R samples from ADC
- O9 q7 @; m. ^: q: S% [: m7 }  output_sample(sample);   // write L + R samples to DAC
9 n% i+ P7 Q9 _, z  return;' d" B4 S5 j1 X
}% j1 W; j9 ~( o6 j
4 }; b* \) u) T0 u* X
int main( void )
" g! `! [. H/ h# L{5 Q0 R4 K' R$ t( ^

4 m- S5 i/ B5 Q5 q" o    /* Initialize BSL */
4 Z' H/ L) @1 }$ \4 E  `5 ~+ F    EVMC6747_init( );
. g, l, [5 B9 f( J5 t% f  L& T: |        /* Call evmc6747_intr function */
9 V0 E  F  `3 R3 I) J1 j    aic3106_init( );
1 f7 K. H) a: o" P        while(1);) _" Q' P8 V8 L0 ^
}
4 p8 ^* m: ^2 t. }9 a- N7 M
" L; S7 Q( I6 n- I) c+ F; u( D
8 D  k- }9 G9 J  O) g4 i- [aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ W! ]: h3 e" R- f* X% v. [/* Initialize MCASP1 */0 v% F' w% ~8 ^0 U/ W; n$ J6 K
    mcasp = &MCASP_MODULE_1;
6 n3 G6 B" }. ^: {# y    mcasp->regs->GBLCTL  = 0;       // Reset
9 f: t5 T, T; K& I    mcasp->regs->RGBLCTL = 0;       // Reset RX2 I( R( c5 @+ o" b
    mcasp->regs->XGBLCTL = 0;       // Reset TX' X+ T- m$ {7 r5 I3 g9 {9 k+ s
    mcasp->regs->PWRDEMU = 1;       // Free-running0 b4 v- o- I0 ~1 W: Z) {7 B
   // configure McASP0 receive registers
, W8 w; s3 }( q; W+ f; I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ E6 |: J# m) p7 u9 x+ J
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 B- V) }  P' O# A5 S
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 b# ^' P- i) N/ F# F    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 K! g* X. ]1 t* Y+ A
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 _+ b  z4 Q3 F+ b    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ N' k/ O; |) V' W: B4 `3 m5 L
    mcasp->regs->RINTCTL    = 0x00000000; // Not used: E  O7 y6 _/ r
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# e; j! N( U+ }: F2 K& I* ?5 h8 n: G7 k: e
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, ^2 g7 J8 X. G  {, ?& f; m; g$ W    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& v/ K+ M. {# v' E$ M# h) V    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( f& R0 p1 B! |+ U" g    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 P7 N" X- i7 B6 _  n" @( b
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 K* k2 T, G$ [  M; Z" B- p    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% `6 i, K$ k6 X( i- [
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% z+ z4 n' L2 M. i
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 K/ B6 O) {, |7 |6 O
5 f. V, Q5 C9 g# A/ _
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ W# L+ q8 P6 m- j
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) b- ^% C7 X6 }% r, ?
    mcasp->regs->PFUNC      = 0;          // All MCASPs7 W' ~% n7 M- r. A& Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ h. L& r* A) _* [" ?
. T* h& i0 q( d  I2 f    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 z" y4 p, _0 s1 e    mcasp->regs->DLBCTL     = 0x00000000; // Not used% t0 @! r6 j4 s: }9 v4 v
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 E# N( n3 M% h& f1 n: o( |; Z
' e& v5 o6 d+ k0 {2 F
/* Starting sections of the McASP*/+ U6 p% t' c* n+ N# ^# R9 C
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 p* M+ ~8 U: T4 [. h* P( }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  * k# k4 ^$ d0 V
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , e- K; s. r* C* l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# o- N) a) t: @" E
. V- c) z# B5 u; m0 E4 S" |
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- [6 N9 F5 D, z1 Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) E! I7 ^  B, T
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " d3 Q  p2 _1 l+ e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* N; t( s1 F& V& D. P( D) R# F
, S6 q7 s% E( n$ @    mcasp->regs->XSTAT = 0x0000ffff;
7 E* i& c0 p  E    mcasp->regs->RSTAT = 0x0000ffff; 6 W; @  \0 x% }$ x
' W0 x6 B* V4 n* A/ e' _
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 b1 Y+ J1 }) L  j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% d3 E% j; e7 U' a4 l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 Y, x2 B7 e# P& q& U1 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" q& J  L- C5 \6 t0 ?+ y! U7 [; p; E9 q1 O6 V
    /* Write a 0, so that no underrun occurs after releasing the state machine */
' C) k; |% Z( P! y2 ~- B: k* H) G9 D    mcasp->regs->XBUF5 = 0;
# ?! ~5 G, [9 L" U0 ~    mcasp->regs->RBUF0 = 0;
. R# W* t2 u% S% M6 n, Q  j  I* T
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: f3 u- ~% W+ o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- W5 G  w9 \! b2 f. q; D7 M8 M    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! t% u' B$ k9 v5 ~3 Z$ W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# T3 ?2 L& x7 t, N. n

) j6 f' y7 v; I/ ^    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( \+ V/ Y; x' K" ]- P7 X: P  W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' U" n. L1 Z% A, A* w# n5 z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& U* \8 R& N8 s5 v- W4 S4 N/ U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 U9 H  |( {+ v# L* Q3 v4 H2 a
% A# d; @9 b; V5 }% y
    CSR = 0x0000;; s0 ^) y5 |6 [& ]7 ^" N. k
    INTC_INTMUX1 = 0x3d;) E. q' x, B: ]" O4 t/ j; W. a* ~
    ISTP = (unsigned int)vectors;8 A' p% N' J/ O: `1 Z, z  t
    ICR = 0xFFF0;  5 K0 o. w) K5 t# V. V
    IER |= 0x12;  
/ u3 g3 r4 ?1 D. U    CSR |= 0x01;  
' p/ |6 k$ K( k7 G3 |4 i4 A; P1 L) t3 c# Q/ g0 X
# B' ~( v% u- `4 ?0 S, F% C

; ^- F+ j& x+ }  Z7 A还有就是两个输入输出函数:+ v9 F8 @/ f4 v% {5 U$ F8 Q+ p
void output_sample(Int32 out_data)
8 f) Z5 z% d9 L! |2 |: `{4 i5 N0 Y# u/ }
  AIC31_data.uint = out_data;  ; d+ t$ p% I- L5 W/ i9 g7 u
  MCASP1_XBUF5_32BIT = AIC31_data.uint;- j3 g8 ]$ v2 {3 o$ L$ U! K7 z/ O8 Q
}
3 M( X9 t9 x7 G" _& g, J9 C
; L" X! @; k  _) UInt32 input_sample(void)
" g1 R( R+ `8 ]. _4 u  n  a{  
7 A% \- }* T$ T$ Z  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 u5 G1 v0 G! x# S1 @; j  return (AIC31_data.uint);
) v5 _) f7 ~/ N}
2 z* a6 \, E& E& D8 A7 B6 c3 S3 T& h4 [% f! R. M2 B
分享到:  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-1-17 11:58 , Processed in 0.041141 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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