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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- P8 @- E; I9 e; H: x% I! Lmain文件:, d- r! `7 M8 g" f
interrupt void interrupt4(void)  
8 G, J. v/ p8 v{
1 ^# u% z/ \9 B, `' `  Uint32 sample;
6 T' I* n5 z7 x) o. Y, ~* V3 w' C, T- m7 P
  sample = input_sample(); // read L + R samples from ADC
# [, A* X7 ^) _- s: K  output_sample(sample);   // write L + R samples to DAC
6 S* W  K, K* M8 D, Q5 X% r  return;; T+ @6 O( y9 N: m, l  k$ j
}
% D! ^7 k  `# a( A
8 ?! ?3 X  x* R+ X& E0 Iint main( void )
: F( l- m& @+ w4 p5 W0 V{
  S" V3 b! o! t- C3 E+ q( c
. }4 e% X/ J* z8 e. r/ e8 j    /* Initialize BSL */: y, T1 S7 e  B/ q; t8 u  h
    EVMC6747_init( );& y* S) D* |6 f
        /* Call evmc6747_intr function */
- b, K* }1 A4 G2 n    aic3106_init( );  y; w7 C, C5 d- L4 a
        while(1);
( K% `/ o$ ~: q- L}) i9 X9 m& e, t. X1 c$ X/ w6 Q

+ n1 \8 B9 h9 E0 y7 T' Q- a4 C
4 R' }0 ~' l# Z0 b9 x8 S+ Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ z; e) U! ?( x/* Initialize MCASP1 */
2 m8 B$ O) P( F2 Q( p    mcasp = &MCASP_MODULE_1;
0 K8 N4 R- F; l6 l1 R    mcasp->regs->GBLCTL  = 0;       // Reset
/ Q% C, e* N4 k- v    mcasp->regs->RGBLCTL = 0;       // Reset RX9 c5 K+ P" Z" u
    mcasp->regs->XGBLCTL = 0;       // Reset TX& e, M  ]# G/ f0 p3 W
    mcasp->regs->PWRDEMU = 1;       // Free-running6 h0 w9 Q$ o5 c& i/ _
   // configure McASP0 receive registers6 ~+ a/ C( J/ I$ U' m
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
& l" v7 ^2 J. b2 h    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 f6 N+ G/ E: P4 I% H    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- V+ s/ e2 U7 x/ m+ {2 p
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 k' h( M1 g; r$ W: H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% q8 m1 B  Y3 q6 v
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; n4 N4 s! x+ s' x# }    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. I8 l0 r4 x+ \" \2 {    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" J. p& V: e+ R) w5 ]  B

9 ^4 w6 _/ D: O$ e% z/ S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 L' |& I* b! c8 ?( G- T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( u( J6 W; q7 d1 O3 i' {* \. |    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 Y% ]0 Q6 }* S$ l
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ F) I. q4 Z3 r    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ a8 b4 }7 b: y* k6 v    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) ~/ ]0 E: d' g. w) n# w    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) ?( Y/ N+ x- {4 j, L8 Q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ N0 N) q* U! f+ u3 B8 B) t% \$ J8 V+ v8 w9 n# l+ H9 t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" Z& \7 b+ G* }: E! m" ]: j    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. t* P* R" j) l6 B5 g- \3 T. Q5 @' Z    mcasp->regs->PFUNC      = 0;          // All MCASPs6 A3 l  |' u, @, V
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& V, ~5 k1 V# D$ T8 f( _

3 A5 |! [3 R3 g6 n) f3 F    mcasp->regs->DITCTL     = 0x00000000; // Not used/ A6 x& @/ H3 ~8 w. K
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' v# Z$ y" m$ p. b" u6 o' n    mcasp->regs->AMUTE      = 0x00000000; // Not used- B. b$ T4 F! g
- P* I" S' {) X  @) n' g, P
/* Starting sections of the McASP*/
" ~- B6 H5 Q" W( y8 u    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( Z5 d! l: b+ U% n* j5 t) I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! Q# P2 j; z" }7 J5 p2 T    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 F' Z5 ^* _; _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; a0 E& \+ q) `! ?" A4 k

1 e! o# x6 w6 S. n( K% I    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) h: P; Y2 t  S# X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( F* F% W. _$ v* m6 {    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 b# J( h* g- o$ v& R% ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 R% i% L3 r4 n% p! t" C

! r5 C7 q" u: n% _    mcasp->regs->XSTAT = 0x0000ffff;
' f/ a) g( K# q; H( C  ?    mcasp->regs->RSTAT = 0x0000ffff; 3 f7 u8 s! r$ O/ o: i
/ B% Q& |% }9 e! L& w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& Y: ~5 ^' Q+ a9 K' }% _5 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* f) @( d5 B3 M2 @$ o& {* ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . u# e7 T! S. p5 I6 ~( g& q$ e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ U1 E2 t1 q; u

7 |+ J% |" h% X5 V& I2 @! a    /* Write a 0, so that no underrun occurs after releasing the state machine */4 z, Y/ @, ~4 L
    mcasp->regs->XBUF5 = 0;1 g* Q" ~" C* D- |1 s" w
    mcasp->regs->RBUF0 = 0;6 W: u0 m  Q6 l" h2 r" N
8 i: J. p$ ?; }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   c$ ]3 T9 D+ u3 m& q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: [  N( J. C0 a# P5 x    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 H3 o. I3 S- v3 y4 B2 P1 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  N) C% G. {# }, w% h4 _9 B* X- ?2 M# J* A+ M9 r6 \& b
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   w2 u0 `; m5 w1 r3 a$ h/ M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: h5 w. W# K$ Y$ n, d- X$ \! ~    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ r" {7 `: a! b# O: x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# w8 D% f  I; \7 A

0 K) t5 l6 b$ D# O) K6 c    CSR = 0x0000;9 h5 t: [, X/ ~; Q: W1 S+ \
    INTC_INTMUX1 = 0x3d;
' h* |4 m+ D9 F7 Z; q7 d    ISTP = (unsigned int)vectors;" }& [# u+ v( V% L
    ICR = 0xFFF0;  : D' k8 z. E' G* i. l9 i: q
    IER |= 0x12;  
( P5 p0 R* A( Y/ G/ l$ t5 C    CSR |= 0x01;  # `4 }6 n& ^4 _4 Q9 z6 T8 `( {

; h0 Y0 W/ h( P2 Y0 H' Y/ Q& W/ `5 B! F9 \9 D" ~4 S

7 R! ?" Z; g6 x1 Z还有就是两个输入输出函数:/ P# P2 Y& i* z$ o% n
void output_sample(Int32 out_data)
+ ^/ P  S5 ~2 _8 m/ o+ F: Z{
2 e' ?& k5 J# ^! B7 ]  AIC31_data.uint = out_data;  4 j( d3 Z# J# V; B8 t
  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ d6 F9 J6 e; V0 B& z
}
4 b% y& Z" V/ C2 E0 J9 V3 E
' k3 I# o9 L$ S" G5 |* ~Int32 input_sample(void)
9 P! ~; p- p, R, y{  6 t$ r& i: d+ L$ m
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 O' R+ D2 M, w" W: K" }+ h0 U/ f0 z8 c
  return (AIC31_data.uint);
& j" q; F$ d, G8 H' l* L}2 M7 R' {* S5 H* k

/ @. M# h/ O' r8 g) }
分享到:  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-11 19:50 , Processed in 0.089633 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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