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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 [% N" \' o6 F% C5 x5 Q) O) f: t
main文件:$ _+ K) T! J$ s1 w7 }  s/ I, k8 j
interrupt void interrupt4(void)  
1 A. [0 k- C- [3 `( W{% }; |: E3 ]$ F% b
  Uint32 sample;) ^8 F$ O9 p# c" ?6 S0 C! r+ |. i
1 x" j7 O) g6 @4 ~
  sample = input_sample(); // read L + R samples from ADC
! f3 M/ L7 r8 M6 T8 n) v% X# R  output_sample(sample);   // write L + R samples to DAC 7 ^8 p4 L4 Y3 J7 U6 Y
  return;
9 P$ P3 n$ f3 \# X4 Z: o7 B}8 @. P+ A) a) i6 T1 K% _

$ [2 g/ Y5 D+ `6 M2 P; z4 lint main( void )
" _' f1 j& I; `: Y- j' a{
: _! V6 x% N/ t( M/ k$ X. x+ r* Q! B, n7 w
    /* Initialize BSL */
4 ]$ h, K0 h& z8 F3 P    EVMC6747_init( );6 o- @7 }# _; X$ u' q, Q3 u+ L
        /* Call evmc6747_intr function */
# A. o! s( \) o! K! o5 S    aic3106_init( );
5 U1 N! a2 I2 U) n        while(1);6 }/ `- G; U! y0 W! G# \9 r, ~
}
/ L. M# F% j+ N9 B# @# p2 b/ G8 p* t$ y

5 t* [" L1 \1 _/ f/ y' q4 O. _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: N6 J* \; A  v$ W! ^
/* Initialize MCASP1 */
- j. \; S3 L8 h0 u0 ]- I$ L    mcasp = &MCASP_MODULE_1;' P1 K5 O" w  v7 R% }. s
    mcasp->regs->GBLCTL  = 0;       // Reset
7 M: r+ M" u; i0 ?2 r    mcasp->regs->RGBLCTL = 0;       // Reset RX
( `$ D  C5 ^2 H    mcasp->regs->XGBLCTL = 0;       // Reset TX
- K5 B: m6 z: _$ E7 O7 R2 B    mcasp->regs->PWRDEMU = 1;       // Free-running
! e0 r5 c' I, D. a; h   // configure McASP0 receive registers
0 S  L/ T3 s. d. g    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 ~. \, k3 q8 e, n4 T; K! E6 B9 I    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* `! U& W3 S2 w) ~6 K( `8 b7 P
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. c# O( u" w4 U& N" ~3 H
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& \* t2 {, W, S) y! h8 R2 h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); R5 A) T- \# k# @; n* B0 Q) j  S& g
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 x# C" @5 c% i2 m4 N
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ {9 T: v% z  E: y' P    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; X: Z/ d* |6 T/ b6 `( A# \3 `: X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- J9 O- j( A* x    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& N4 A" z4 t# d' P3 {8 T
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* l- ~# J4 Z6 Z; X! ?: [
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! r& \% o' L4 H% x5 F. j) d" o    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) L! }) o6 J6 Z1 g. ^
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 v" o; H$ _3 ?( S, H2 T    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 y% E9 X, B. [4 V" I
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 U8 S5 l8 ?% I  z' Y
8 T) K( {' S( ~) R8 W, g" g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' r; k( F5 ^8 `/ f; K" @
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 O+ }! P! G$ L) [$ b* V* b. v4 q% Q    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 m( M+ d9 r6 k( \/ ?. w) r# M    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# U0 U9 H' v! H( a( a% J  e
9 H4 }# H% Q  W. M' @' _    mcasp->regs->DITCTL     = 0x00000000; // Not used
# R4 H# q2 Q+ p. e0 v; E    mcasp->regs->DLBCTL     = 0x00000000; // Not used" m% \! B+ r; S, ^2 e/ j* _
    mcasp->regs->AMUTE      = 0x00000000; // Not used* ~! ~( J0 {9 J4 w* j

9 H4 b- \, ?- }4 _( V5 F/* Starting sections of the McASP*/
" u, A6 h: v4 Y: V/ q0 S    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 h; P5 @  d8 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 H5 S# x* p4 b1 y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 W* R" m! K; Z8 R" l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( G4 a) }+ |8 ^. o' g
, c* J# k1 t- U1 B# ?
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 U0 u2 X4 _! l) c1 Z  U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' J) g, [1 m! G
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ V4 i! T* u' u8 X+ |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. g& D$ z9 J$ a

: f* v) K0 Q# f3 R1 ?. F    mcasp->regs->XSTAT = 0x0000ffff;
5 f  f! W% T4 H' @    mcasp->regs->RSTAT = 0x0000ffff; - {' P: j8 s" R0 P
! i6 `' |' z; \
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. K! {) x. @% y7 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 N& I' K9 a# ?& W: \6 Y; Y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 D  I* i7 t6 l3 m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  o+ {" w* j* ^5 J& T& A5 Q, i) T2 O

, Z9 V+ S9 p5 K/ b# e1 d    /* Write a 0, so that no underrun occurs after releasing the state machine */
& L+ [2 y" Q% A3 p+ t9 `    mcasp->regs->XBUF5 = 0;
3 _& j3 a* w) W1 |    mcasp->regs->RBUF0 = 0;9 Q! b' j0 @5 j9 ~/ d. p
4 `% s+ j7 @! j' |- {1 ~7 }  A
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 f0 B4 q) ]3 n' j+ i: D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 ?. f8 e& ~( U9 A# a2 e: ?7 Q% w    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 [! ], G. G- C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) e3 D$ \5 x$ g( U
6 G0 `/ D# Y1 Y+ V: N8 ~6 q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) R6 X+ ~8 ]3 q4 L* ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 Q$ v& L- w5 c7 Y, H4 y% K5 b+ t' R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 d& Z% v7 U$ N$ z& W$ D$ Y" c/ |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 a5 v$ x* d, b
1 A- B& ?1 O" n) S) s7 J) @    CSR = 0x0000;
: Y3 d9 ^8 c; H' N4 A9 d9 \    INTC_INTMUX1 = 0x3d;
) [4 u0 P, k7 ^3 \+ T    ISTP = (unsigned int)vectors;
" Q5 C5 F- [8 _+ t0 I) l! N    ICR = 0xFFF0;  
/ t2 r7 [3 [8 j9 r+ f% @% x5 h    IER |= 0x12;  
) @* O& A* h' W2 \    CSR |= 0x01;  
/ R" T. C; ^  E. _( o
' S6 e) D% M( l- I2 Q/ O0 x' h; m+ j3 R2 |) x9 U( P; g/ y+ a7 F
  Q5 j/ w5 Q# y- p" H1 M
还有就是两个输入输出函数:. X' m$ j- W. N0 J- R1 P; }
void output_sample(Int32 out_data)9 e9 q- N) `  r  X4 ?
{
: S4 R1 ]1 X* v& D4 D6 n8 a- F. M  AIC31_data.uint = out_data;  $ a/ m& n1 u9 v  ^" D4 g+ f
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: X" @' }& p. m) m$ Q}
" @( E6 _" z. e% `
' J9 G9 L, r7 C0 |& GInt32 input_sample(void)6 L- c, P1 z$ Y4 _4 _
{  ; u' n. r5 }  f; Q' v
  AIC31_data.uint = MCASP1_RBUF0_32BIT;& m" q% k7 v/ J/ |% Y
  return (AIC31_data.uint);
  }, h: y5 L. n% X9 A}5 M+ i8 m# v- e
3 K) Q( l- }0 @& Q3 ^& B
分享到:  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-21 21:17 , Processed in 0.038990 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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