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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 T+ ?2 T. ^9 \. o; M1 J+ Y4 qmain文件:
( D8 N0 Z2 f1 }# g; q  f7 g% a( Xinterrupt void interrupt4(void)  ! m7 V5 \) y' N5 r
{* \7 P+ e9 V& x. _# R! @1 D; E
  Uint32 sample;
, v* p! ^3 d$ \" {( c$ }
6 @6 V' p+ P7 u6 E* T) D6 o1 [7 _  sample = input_sample(); // read L + R samples from ADC, D% t% {& f& Z- h4 _% r
  output_sample(sample);   // write L + R samples to DAC ( |% g! A8 E8 n1 g
  return;
+ Q. Q9 Y. n  i* c}
* _9 p2 U! R* k/ f: a9 P2 }5 A( N/ f: W1 X3 P
int main( void )" a3 Y, G, [  k
{* c0 R! X+ q$ a2 C

1 j$ E7 u" F4 d7 [8 ^- t- ^    /* Initialize BSL */, i" q' k: j/ N7 \
    EVMC6747_init( );
9 k, S5 }, G! j5 u" ]8 V        /* Call evmc6747_intr function */
- C9 g- I3 E3 _: n6 z5 W2 |    aic3106_init( );
/ _* u: k" X; r9 Q        while(1);7 t6 f# Q; E& V' |8 ^
}; k4 e; Z+ c+ E# K, W# I6 E
* F- o1 u3 u- `2 W) Q; s6 [9 `

; x3 V& N; R0 M4 d& aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 A! A( V1 r% K: b0 ?/* Initialize MCASP1 */
# t' W% Z, V" \    mcasp = &MCASP_MODULE_1;, {8 ~( v! r! s. _* x3 X+ {% d
    mcasp->regs->GBLCTL  = 0;       // Reset; v3 |/ k8 m4 ~& D- \
    mcasp->regs->RGBLCTL = 0;       // Reset RX' d" m( ^  X  m( t+ X
    mcasp->regs->XGBLCTL = 0;       // Reset TX. N5 ?% {8 ]4 t6 S, o$ {. l, G+ T6 y
    mcasp->regs->PWRDEMU = 1;       // Free-running, N" R% G# L( I$ F, D
   // configure McASP0 receive registers
6 R, \# D# p% Y2 J    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 A. z0 A3 I4 X) ~
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 F' c2 d% S! _/ y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" l' m9 Y$ r* [* b    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 o% v2 _) f" u! N7 U% x    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 K* u& F( o% U8 {0 |" [/ W3 i    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' w# S* C2 [2 @% D  p    mcasp->regs->RINTCTL    = 0x00000000; // Not used. m* Z( M. C* r9 k# f
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  a2 g: [3 A( s3 Q- R& L
. I. D; [8 s5 e  T    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  B  b, n  t" m, P* l' R9 q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( e$ @! U5 Y4 X# [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 o) h/ }/ T# ]
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 W0 Y. C+ e! W# ]6 f) F' ~2 N
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ }/ c6 k/ D- b/ w9 w4 U9 K5 q
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% N# }4 f( k6 m' z2 a1 Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: N' P+ W7 m3 t  c9 j' z, l
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" z4 B1 U1 x1 T

( S7 {* \3 _: }    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 ^9 E. l& \( I- U$ s% a
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; F8 w5 T- u/ n8 q% c
    mcasp->regs->PFUNC      = 0;          // All MCASPs6 u* n/ U* J# w; Y( G0 a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 z; r, V7 }3 C% T+ p4 a  G, E3 E, V( p& P# Q
    mcasp->regs->DITCTL     = 0x00000000; // Not used, R3 j- N- E+ R) ^
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ D1 F0 K3 M! |
    mcasp->regs->AMUTE      = 0x00000000; // Not used
# _; b; e! O2 M+ e: a4 E
) q! Z& B5 W/ L( y/* Starting sections of the McASP*/( u% W: N6 m9 U5 |1 C3 S7 M9 B
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 T9 t8 p% j- F9 o% l( w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 |- `) u' T# S- c& z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" s& P/ f+ n5 j1 J$ E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 T! \3 Z# b% g  v8 M* T. o" f) z% q, {' C! y" t1 b* R+ E( B
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' x: S: G6 j  _6 y# g" ]% ?! \$ U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ V! m& U+ P5 R* y$ r: M5 D    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + k# [% p; X2 l1 _+ Q3 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: @  ~! h/ L' f# ~. c% o6 e
1 Z* @- n( ?1 T% a7 U    mcasp->regs->XSTAT = 0x0000ffff;
: W, S& c* a  D: g, O    mcasp->regs->RSTAT = 0x0000ffff; " r% K: K: x5 H: L1 T4 W
0 b! T; C# Z9 ~% ]2 U6 X4 i  A# D
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; L- E8 S5 f5 D  K' b: D. J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 \" z( V6 A& }( s+ j+ x) O
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 w) _5 F$ g3 b$ I' H" Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 \* z( ~. V8 h+ U1 |* d

% `/ J9 s, U4 W- [, ]+ r    /* Write a 0, so that no underrun occurs after releasing the state machine */
  i2 i  Q& l6 P) U+ t    mcasp->regs->XBUF5 = 0;
9 X, ?0 B/ q2 O0 O% L3 e: F    mcasp->regs->RBUF0 = 0;
& a9 W; G: O# y' K, Z8 ]/ E/ D* `* q4 E. ?# x# T' k% S6 k: M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 q2 ]) L  J6 D. A  s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: h7 J" O$ `! N9 t    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, }, [8 B7 ?! A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: `3 l0 l4 ^) O4 c8 p' B. G) L( m- n5 I5 U7 W
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, b7 Y: r3 v" r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ ]& u. i! m0 f$ }- H7 P1 N& b    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 K5 ~# b1 s9 K/ h7 ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 K5 k5 a& Y; [6 [7 {) E$ F
( C" L" q2 U7 l- R1 e    CSR = 0x0000;
! d& f, h3 x' G! k1 t8 {    INTC_INTMUX1 = 0x3d;
' o8 p9 d. b% z4 D6 r- o" ^    ISTP = (unsigned int)vectors;  _+ M" O- D; G, v  A* L
    ICR = 0xFFF0;  
$ V% _$ r& ?$ V5 l3 e6 X    IER |= 0x12;  
9 a# S5 i2 Q4 V- |6 ]5 s    CSR |= 0x01;  6 f% I- h5 @$ c0 j( t
: K1 g8 b# c( o6 s! E# E1 ~! |
9 R- Y5 {+ K4 `+ Y

3 l+ A1 U# h* E8 m, M还有就是两个输入输出函数:6 F4 p' e3 [* Z( S  g* j* Q
void output_sample(Int32 out_data). `  l" [+ O0 p/ \6 ^
{
5 r, p6 F5 I3 w2 @  AIC31_data.uint = out_data;  
7 ?& v+ g: D' c) F  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 f+ [1 ^* u% ?& X
}
. l* ]  M2 E7 Y$ e3 p, z: |) V3 T) _* i
Int32 input_sample(void)2 e$ H, U9 z) ]% W
{  
& s8 M! D: ^2 Q+ G2 [% U  N7 G  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ i: c: o! B" u( R4 E& j4 N8 ]" u  s  return (AIC31_data.uint);& X% f; O" b$ ~/ z- s
}5 |( d+ J5 w# s$ q2 i4 V
  k* S; B3 P$ T8 F4 T: Y9 O
分享到:  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-11 05:26 , Processed in 0.054690 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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