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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 z' |5 c5 p5 I
main文件:
7 ^0 T5 E8 k. p2 ?: ?interrupt void interrupt4(void)  
" p5 ~) O1 p7 z9 D7 D! Y/ I: P8 b' Q{
: W" k1 U- E; a! R  Uint32 sample;
( ]( ?* ^4 q. R- I+ A
3 \# W$ L! r" D; I5 R  sample = input_sample(); // read L + R samples from ADC
! t5 M5 L' d; Y% r  output_sample(sample);   // write L + R samples to DAC
. \" r7 Q) R. ~  m" q* M0 G& Y  return;
) g, V6 A* M  m1 p/ g' S3 ]}
. ^! B) m* L% \# q: K( L& s$ \! V  @# a' e
int main( void )7 N( D7 R, v" J1 X  S5 \
{6 ?  m9 {+ u( _$ @1 {& O- @
; ^) N: H; p+ A  \+ R  [9 T1 W
    /* Initialize BSL */
: n9 f) q2 J- z; G/ @  P. c    EVMC6747_init( );5 x6 F+ @$ Z; C* r4 l- u
        /* Call evmc6747_intr function */3 x, X2 g* a  I
    aic3106_init( );
7 ^7 z( M: r8 G* P  M        while(1);5 p- A* S  ~4 \; q1 g5 [
}. s$ |+ m9 s, G/ q6 Q; \* J

6 t- T. M" O  E5 U# C4 A: }
' K2 D+ ?& N* @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 c: i% r" p: ^% Y/* Initialize MCASP1 */
* L1 k+ N. S2 B, s" p; U. l    mcasp = &MCASP_MODULE_1;5 Z4 n6 C* ^  E; G* \. y# {" b& G
    mcasp->regs->GBLCTL  = 0;       // Reset
6 W* ?5 a/ E$ K- P    mcasp->regs->RGBLCTL = 0;       // Reset RX
, i) q6 B9 Z& p" I4 W) Y) V    mcasp->regs->XGBLCTL = 0;       // Reset TX
' P$ g) Q" H, J    mcasp->regs->PWRDEMU = 1;       // Free-running
' H1 `) K* P' ~8 K: p; A2 B   // configure McASP0 receive registers
7 Y( Y3 X. U2 O) v8 o- k4 ?$ \    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ t; S& n6 L( F* D% a. |2 E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 J  J; p5 r) z! z, }. a
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 b& d- A- Z0 c5 M6 V$ x( F" a8 g    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 A: x+ n) D! |
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 Q4 ]* I: [+ X: G    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" I$ j( B4 N* Q8 {: |* }4 t5 w    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 m" K  R' O* U    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 D/ t2 K+ B: l2 {" K3 B

! d3 \5 X: Q/ }0 b: g    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# W- K7 d6 e2 l% n0 H1 V0 X4 _% N9 W    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 r+ j( i; j$ R5 O" r6 p6 L    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ }! Q: L) H8 W5 Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; e7 j$ A$ g0 f9 z  }  ?9 k4 e    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 `* o( G; T- F, U
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. N' g0 V2 \0 A, C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& i" n/ q4 n: d+ |9 T
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& n, S5 l8 s2 p
: Z( o1 }) O/ M    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( o, d: h- G. m9 N2 m, x  x5 a
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ G& y. ]* |) o    mcasp->regs->PFUNC      = 0;          // All MCASPs" z# M% ]# B, I! N4 l2 E- Y& g
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 v& z# C6 U1 F& r% }$ c  \# C6 E  ^

  Q/ q9 H  w- p  C    mcasp->regs->DITCTL     = 0x00000000; // Not used) e/ k* H) W& Y. v  ], s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used, i* M( a/ t* _6 {/ N
    mcasp->regs->AMUTE      = 0x00000000; // Not used& o0 ]  h$ P# I+ V4 Z6 O

$ n+ B8 w; M, j% Y; S/* Starting sections of the McASP*/
+ R7 w( r' |% j    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, N( A9 c( y' W5 @+ h% J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 j( S7 s; A. _    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( p! U7 d6 [4 E9 j  o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 ]+ d3 F8 d* h
3 v2 J' ]) D4 E) h* I    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, F* b2 t6 A: W1 Y+ p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 V$ E& y: {2 l. j+ _8 G" o    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 j" u# p* P' _- ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 ~. E& i( B2 u8 `# I
8 \- p  f1 O0 M6 P
    mcasp->regs->XSTAT = 0x0000ffff; 6 i3 K  W) Y+ W7 F- r3 Z. n% v
    mcasp->regs->RSTAT = 0x0000ffff; ! y' {# J) B) d  y% p' o
) d. \0 ?# d* c( M  J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- f4 x/ }3 d, F: [& ]9 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" a  ~! F" l( ~5 i- {4 A5 `, G    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; D. Q. g( y: ^0 p. h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- y+ D0 g8 x7 m+ j9 x

1 C7 s# Q% h4 l) \' U    /* Write a 0, so that no underrun occurs after releasing the state machine */
) q) V- T: G. ?7 k    mcasp->regs->XBUF5 = 0;
$ t1 e5 z2 [9 @; p" D; a    mcasp->regs->RBUF0 = 0;; a# r& i1 q' b8 Q4 h

7 j- A4 a, j% R/ c    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# d( w6 b+ w: K# m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 Z! C3 c1 z' S    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! `, l5 ]% p( \6 e" B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: D. n) O- H1 |9 ?+ `0 e1 k( u7 g! j; @9 e9 i9 K/ k, V% ]
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' U; n( l2 C& P0 H" c5 G: f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' Q9 y! Y; ]' ~5 j2 v! G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 Q. h, _0 M/ _* u1 `" [+ z) E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; h; i! e$ L+ B$ `7 p. J3 c
) x3 e. Z( T0 t: t" K
    CSR = 0x0000;
7 Z3 k3 ~5 l" }    INTC_INTMUX1 = 0x3d;3 ?) J3 z' Y4 d1 z) u$ ~+ z2 k
    ISTP = (unsigned int)vectors;
. D2 w$ P& v  t0 @" _9 u    ICR = 0xFFF0;  . t- X3 w& b7 ^" q
    IER |= 0x12;  2 |7 ~- D+ f! R$ k% D. K
    CSR |= 0x01;  # r) Y  x- L$ m5 G; n4 e

$ Z7 ]; W: e4 H0 y" Q) i9 \7 z
+ R5 [. F( `" A! O1 u8 a; D: R" k7 @
6 R2 x% p  X/ I- K9 G还有就是两个输入输出函数:. q# W, L( x2 E! O
void output_sample(Int32 out_data)& m4 Q* ?; Y  \/ V$ r% P- I
{( |$ @, B4 `3 g' g, Y+ S
  AIC31_data.uint = out_data;  
: E# ^0 c1 R4 A+ D% @  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 q7 T' N- ]! g+ R, w* V# E
}0 ~: }, Z. w) Y: x- K1 \
0 o/ R2 H6 s% }1 i
Int32 input_sample(void)3 G2 o/ X2 w5 `: O) y
{  / M( I% }0 R  c9 _1 N
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ n( {: X+ O. X  return (AIC31_data.uint);
  K) {: B6 Q: j5 I}
6 `8 [6 d! `- c# z6 m" z) ]. q* N* @' f! k' r. i8 @9 e# 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-1-14 19:57 , Processed in 0.040816 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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