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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 S8 s" ~! F: p0 Hmain文件:/ B5 Z" v. |8 \, l7 Y/ }
interrupt void interrupt4(void)  + [9 q8 S7 U& ~1 e$ J; x# ~+ u' M
{
/ m! J0 u! H; n) ?+ n6 I- Y* R  Uint32 sample;$ X1 ?; T* b/ c  Q5 n4 |. ^
4 @' \& K5 T: o! F) E% d
  sample = input_sample(); // read L + R samples from ADC7 ~4 D5 _2 [9 y; w
  output_sample(sample);   // write L + R samples to DAC
- ]- Z% {/ n. N+ i& k/ Y* [  return;
: s- K: ^* k4 `4 n}
: q& R. ~* Y( j! F, n' m+ _. X3 C% p. ^: d8 F, |( _* ^4 u2 W' F
int main( void )
, p& K' F, z( i{
$ r. F  ^) [6 U
; b7 T) t0 f" B: y0 ]  O* _0 n  y1 K    /* Initialize BSL */
5 [3 U$ X: r; T    EVMC6747_init( );2 A0 h, _8 {2 {
        /* Call evmc6747_intr function */
, ^- q  c2 x/ C; C    aic3106_init( );
* J4 R6 \5 Q/ d, F        while(1);
' H( c# @, s$ Z. [}
0 Q  j+ K: h* Y+ |' I
6 i: {2 c; F2 T& k, y
4 s& n- c) R" v3 A8 L- s1 }+ s0 |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 r9 c; H$ H/ `3 J/* Initialize MCASP1 */
) T2 B, t, _& V/ M' T4 c! Q    mcasp = &MCASP_MODULE_1;
. U. Q3 ^5 I0 F5 d3 F    mcasp->regs->GBLCTL  = 0;       // Reset$ t1 ~5 t. e: {# y, O
    mcasp->regs->RGBLCTL = 0;       // Reset RX6 d/ r  r, K+ h- A/ J
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ I5 A- M1 n: q) N
    mcasp->regs->PWRDEMU = 1;       // Free-running
+ M2 l, w3 U) Q& \. C   // configure McASP0 receive registers
3 G% B5 H7 Q' J    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: \, S6 [6 g. ^$ K1 Y6 G
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 i; a4 Q6 j, n8 I  M# v    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" s4 U0 Y) d8 t& Y# @    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 j% O, b8 s( |8 H6 i& E8 G    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 I+ Z' O; b+ f- O0 T
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 s% j, d  k; d, e    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 ?+ J/ w3 W% R9 `6 G8 y; ~2 _& r2 {    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& R; D5 L; e( w- ^2 K; _3 T
; r1 T8 c/ `- a8 K# v
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 V# M! m8 O% ?; P
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 Y6 Z& ]- z- a' c2 @. p  s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  F. b& C/ N, A0 E
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( Q6 \$ S5 k' |6 d
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
2 B! i! k3 K7 H) F    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 j- `( M  _1 `: J( a, C; w& L
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! W$ o' s9 ~0 [5 Z! C* |2 y' j    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 N; \7 A1 d, K8 V2 h5 Y% V# w: C1 `; q% U. b& {- d8 c( M
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- B* x- z9 m) v2 W1 z    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 q4 i1 t/ t% P2 b! X8 Q1 X: n; I
    mcasp->regs->PFUNC      = 0;          // All MCASPs
; r. h% B" v2 A! g# r    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  c6 ?) a% ?* g% h7 X  Z4 n
* Y2 ~2 s- f; G9 S4 h( r
    mcasp->regs->DITCTL     = 0x00000000; // Not used  t% |5 z! o( ]& x6 j+ o: [
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 ?! f8 g: Q9 r) v/ Q. E, r6 J    mcasp->regs->AMUTE      = 0x00000000; // Not used/ [6 S' F( H" L
2 F" _' C: Y- H) p3 G7 Y+ O* W; N
/* Starting sections of the McASP*/1 L. M6 `& n) E) Z9 q, Y9 a
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 U& i4 l0 E! I# ~( G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ {# v# D) ^- H8 q( W* h! N
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + ~) u! ]& P, ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; f2 m8 @7 \1 q4 {- R

. ^# v  ?6 J) ^2 h1 C    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 _5 {) Z% x. u/ C" U  u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; k; O5 Y' Z3 j    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 ^# D6 k- U: f) z8 o, X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 _/ O1 e" y% B1 K) U8 `! t6 u4 q# A* A5 ^
    mcasp->regs->XSTAT = 0x0000ffff;
3 ]. L- o; {; n: G% g; C    mcasp->regs->RSTAT = 0x0000ffff; + s- W/ G3 N" z3 p6 J9 U
: v  t* C0 n" a) H1 \/ a0 X' {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* l8 A& X. r& _0 ^+ t/ E' |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& Z% L8 f9 g! \- m1 a8 d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! J# p' Y6 q/ D% ^/ u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) e, [) d0 p  e  [$ p+ z

( s8 x: D: l( b3 c  p    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ u2 b6 g4 w2 v1 o# P    mcasp->regs->XBUF5 = 0;
, l9 J( I0 b9 d8 u    mcasp->regs->RBUF0 = 0;3 k6 r" Q$ }. p- w2 l
* l0 S( \% K* u7 I( a8 b* g
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , w& f& k( _2 L* F3 x0 M! Z- _8 M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. F! A+ B2 Y. d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + z3 ^2 z) ?' ]9 [$ A$ Z7 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, p% B. C7 k# y- g' z

2 p6 k. w# [' S, B+ o1 m( s% M    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & Z5 [3 h3 N+ I+ J) n2 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 ?3 u. Z% H$ P* b7 k2 A    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& \4 B7 r- T  A2 e2 o) l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& w+ i+ _- a6 n8 V/ i6 ]
6 |4 [  T! x: I* V+ q8 a! v9 ?0 a" y& P
    CSR = 0x0000;4 d. o# _$ G. S) u( E2 M5 x
    INTC_INTMUX1 = 0x3d;1 y) G& Y- J; L  V/ I
    ISTP = (unsigned int)vectors;
% I7 B; J9 z. ~! J    ICR = 0xFFF0;  ! S% {% e1 s. J0 }! O& D4 l
    IER |= 0x12;  0 v% {+ a" v" M4 ~* X% q
    CSR |= 0x01;  . o) V- J1 D; x: H8 Z) k
- \5 H! g/ ?! K9 E6 R0 I

5 p. n& W. E. s  b: o) l! u. i! @: C8 n
还有就是两个输入输出函数:! Y3 ?0 c5 m" e! A1 }
void output_sample(Int32 out_data)
( t% {/ r& ]) `5 I" R9 ]4 }{" s1 I, T* c  x
  AIC31_data.uint = out_data;    O; p  T$ K# {4 {) A
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
  E" J* w$ W2 w; v. k}
/ `& p9 g* }1 s6 ?2 E5 U
! ~% o1 A9 I' d) G& l8 c6 m. TInt32 input_sample(void)
% E& q9 m1 _4 a* {! Z{  
% f% q7 U* _/ Q* t6 \( K' y1 P- ]; N; `  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& J+ K6 w- v+ d# v9 o+ W0 `  return (AIC31_data.uint);0 L) D9 \# r) b' n1 J
}  L" E6 k$ \' i

, y3 ~) {8 [8 V9 s  @
分享到:  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-29 12:40 , Processed in 0.038563 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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