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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) N9 h! u  G' P8 U( zmain文件:
/ p8 j7 V$ Y$ N7 Z# z  ~interrupt void interrupt4(void)  
5 t. l- `) A9 m{) N$ f; f3 G: T! c
  Uint32 sample;
. G2 S. ^4 H' p2 y* e$ O* l4 q0 p/ p2 a
  sample = input_sample(); // read L + R samples from ADC
8 @% I2 P: y4 A- g9 V) W4 v. Z  K  output_sample(sample);   // write L + R samples to DAC 6 y/ e0 x6 I+ [  Z
  return;9 o& I9 C1 Y2 z; ?" t" S
}
$ [" p0 s3 }. h) B) N& Y( G% T
* Z" I8 R( M& p. w( sint main( void ), }+ K( j, |& `) m% i3 {
{
+ w2 {" W# N$ P! \* r5 c7 @  Q  s0 M8 v
    /* Initialize BSL */
$ ]! _! ]+ k2 \7 S4 j" ~0 c    EVMC6747_init( );. [  x/ f, [  v
        /* Call evmc6747_intr function */
. p3 K+ C( R2 \    aic3106_init( );
9 Y( N" r8 d* A4 c! ]+ L9 {  T        while(1);7 Y) u5 n/ p( A: p+ U
}  J! g9 k) Q7 T0 N" k5 a$ h# }9 w0 G' ^
/ s' m( A- c' h5 u
# d2 k, u3 y6 O+ ^+ j( w% `9 r) |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ l' c7 G5 q+ ^& n0 \  i1 _7 _* p
/* Initialize MCASP1 */
* f: A& ^: W6 ~; f$ d/ q    mcasp = &MCASP_MODULE_1;
7 h+ |# X( l2 T" `5 m+ D0 ^    mcasp->regs->GBLCTL  = 0;       // Reset
& S3 Q- Z! z' X: b! f) g5 c+ N& J+ G    mcasp->regs->RGBLCTL = 0;       // Reset RX; O3 }, r- {. G$ o0 G; x  o. o, E5 R( w
    mcasp->regs->XGBLCTL = 0;       // Reset TX( c; a* [/ ^. Y. m$ _$ n/ c4 |
    mcasp->regs->PWRDEMU = 1;       // Free-running3 S; a& m8 h/ h0 y8 o+ Y; Z. O
   // configure McASP0 receive registers' J* a" x" g, M1 _: R3 c( Y9 m0 X
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: N' x1 w' j9 m3 u, ^    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ t+ H( z1 K; M
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ @/ E! |' N# |3 E6 k# o" k    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 j0 a6 N8 B3 y# s* h3 Y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 t1 X8 P$ w! d2 q3 W
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 H  w" b' F" \0 f& c; s    mcasp->regs->RINTCTL    = 0x00000000; // Not used
% A3 d+ E1 L" C) G    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! r: x3 L. F7 ^# [2 _1 l, f: r

, ~' N. F) j0 H. N1 @+ f    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 E+ |. k9 G  G2 A' ^# b! I
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ y) s2 z8 H& t    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ A% J) F; r3 ^1 c* p3 |! x    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; Q" R# U" H: p" {' a  H0 u
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" A8 q. }4 O( t7 A' y# B  a, \- [    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
  M& V; N0 Y6 e- T    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 A. @! U' \! Q6 K
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* E3 n4 _" Q( @" i! Z

4 y+ c  O$ l$ e7 d    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 [& G6 B, e$ o9 u7 c  K. I    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" {, i8 ~+ b% n1 c; v    mcasp->regs->PFUNC      = 0;          // All MCASPs6 z/ l$ p4 }9 V  D
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& ]' J9 J2 C% c2 O/ b
4 ~5 Y3 N- }& q/ v
    mcasp->regs->DITCTL     = 0x00000000; // Not used4 V3 O- y5 ?' {! R- ?1 @2 P: x/ @
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ J2 F" {7 \" y* F    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ g. i' q% L% c9 h" q" |7 r0 g2 {. {+ I$ a; i6 K4 `
/* Starting sections of the McASP*/& e2 b& b% ~2 D4 |
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 ^" q; k9 G6 {  S* l5 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# z: v* j7 d" d$ i( l    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 y4 z& \9 _* ?$ _, t- ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: [5 p7 y  P) ?& P: v9 K- z
$ c* c& O; y$ r* v  l    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ \8 j" |: y) |8 l' v6 g: |; X2 V7 E4 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ f, I+ g. {9 U    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & y' p6 B  D% }/ U# _2 {( f; F; w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- a% r2 _- w- X) \
* B- G* x3 _4 A
    mcasp->regs->XSTAT = 0x0000ffff;
2 G, U. Z1 F; i) v( o    mcasp->regs->RSTAT = 0x0000ffff; 7 N1 a" G' K- |+ n

5 Q7 i8 G% Z+ I6 c* G7 O; l    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. |1 A+ V3 G4 B( v" f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: L  V( a6 K& N8 u( C2 Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 k! P6 d1 P1 D9 Z& d; V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 C/ [/ B  J4 v5 c$ j0 `  q3 ^. J) e% }* Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */1 g' r8 Z' u' ]6 Y2 l8 o
    mcasp->regs->XBUF5 = 0;
/ p0 t6 _# a) d( \! ?- w# @0 C7 z8 z# ^! L    mcasp->regs->RBUF0 = 0;' }# p% s2 o9 z$ L; e. c+ Z& i
5 I& S! I1 X6 N8 G6 Y2 }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 w- q0 P  s6 z% f# g; V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 v% ^5 u9 n1 B8 F" X* H    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 f, T: A/ y( s; d8 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# e$ L' n7 T+ _9 ?# L& X

% n% M3 Z# s5 n' T, ~    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ r. |9 i: ?( E- x) ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ e( Y6 @. o4 A' m% C+ k
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 _/ n4 G+ u+ e" c- K9 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" W$ P5 }' V7 X: R
. D2 @$ H( R2 M* `% U/ ?# i    CSR = 0x0000;
" ~9 n- i8 m' c    INTC_INTMUX1 = 0x3d;) V0 c1 P+ u1 N! S" a
    ISTP = (unsigned int)vectors;  n% |) J4 w. [# h2 F
    ICR = 0xFFF0;  
1 S) Z$ k$ l+ r    IER |= 0x12;  
0 C% m) |5 G1 n" R: Z; \- r    CSR |= 0x01;  
" s" E8 @9 ~6 X- g9 Q. P$ d( h9 s* |
9 ]9 I) a; |- o+ ^* a
# Q* L) H% [) G8 \9 b' x- f
还有就是两个输入输出函数:
4 B( X& A: L! N2 e- `, G0 P5 yvoid output_sample(Int32 out_data)
* \3 [3 o) y" |{! l) b0 m: o$ A
  AIC31_data.uint = out_data;  
, l+ ?- L' H# _  MCASP1_XBUF5_32BIT = AIC31_data.uint;; N0 y$ u* N) D" v$ u4 q
}
7 }' }$ x6 K: e! P( j; a2 c
8 p9 z) `: Y$ ]$ i3 ?; eInt32 input_sample(void)
- \! Y. ^- Q% W# F% q" B$ [+ C{  
. G) |1 k% E% D" s  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 V9 N$ n5 ?0 n$ }  r% c  return (AIC31_data.uint);; c2 m" L+ i2 x# s1 t3 C/ H' {9 f
}$ O; w& s  M( t1 ?! e7 B

' w3 F+ ^3 `! W7 q6 c6 W) h& c8 U
分享到:  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-12-9 11:25 , Processed in 0.039765 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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