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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& V- W/ b+ D$ a! X+ Q
main文件:
2 E* l( a7 Y5 E8 t: t6 U( _interrupt void interrupt4(void)  : Z+ O. K2 _" Q% H' u' `; N0 a
{
1 W& R: E% `- g1 _  Uint32 sample;! V+ o1 e! s9 ]
3 S3 P8 w' A9 I' ^/ @4 L, y7 G* I
  sample = input_sample(); // read L + R samples from ADC
" B5 j- v; z7 l8 W$ s9 d8 `  output_sample(sample);   // write L + R samples to DAC
( }6 ~1 Q6 X7 A3 d, V  return;
0 m8 s/ P' G& E& N% t$ ~}2 O# e. l+ G" Z' t9 G# [5 A
, X2 {+ R' x# J. e* v8 C
int main( void )
% g) A, ^( P5 R0 E( O1 ?* n# p1 P{
+ A2 k( {7 x5 q" ^2 o) g
1 P4 g* r# D6 Z. m    /* Initialize BSL */
* }, Z( h( d. z% }1 g; t- ~) L    EVMC6747_init( );# l& h+ }& T) M) |1 `
        /* Call evmc6747_intr function */
8 [# A8 c. u' [1 N. n# l    aic3106_init( );' x4 e3 y& S$ O8 ?, ~1 R
        while(1);
0 I* Y" x8 s' Z  i& |; M}
1 E# ^$ t$ k4 @4 U" K# |
) s! U7 e  }+ T& Y2 {" q: [: R0 n
3 R5 k7 C, H; Z; gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" H( \" f* m' k5 m7 r7 u6 X( v/* Initialize MCASP1 */
2 W8 u; X7 f, d" x    mcasp = &MCASP_MODULE_1;
5 a0 F# V( P: I    mcasp->regs->GBLCTL  = 0;       // Reset
3 T% b3 h' J0 d* ]0 \9 |' Y    mcasp->regs->RGBLCTL = 0;       // Reset RX
) ?+ ?0 p$ r3 O' L0 I    mcasp->regs->XGBLCTL = 0;       // Reset TX
  w( o# V  D; R    mcasp->regs->PWRDEMU = 1;       // Free-running
# p" R% q3 S6 t% r$ X   // configure McASP0 receive registers1 P; u' k) [( R# D- J* A
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- G$ P! B0 e( ]
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: O3 r' ?5 z; w% z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 m, ^" ], G7 a
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  C& d& S$ \$ y) y5 E. ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 y: V; |( b8 K. P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* L7 e; L8 E6 T' M& Z/ u    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 P; S4 B% A( K" r: _) \: e2 n    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- b: z7 i) t' r2 L  r4 A7 ^3 J: T! u5 R. g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. B% p2 [% F* t    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 q- S4 l: W: g( w    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: e* o7 I4 p. j    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# T: u/ i8 j5 }! ~4 I% s    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! u+ s$ I( Z; r9 x    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 v0 u4 Q. P" o2 D' X; Y7 Y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* y% O4 K5 i! |8 B! R. W1 f    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! R8 `8 e  z$ o+ u/ |. P# `9 t# p8 d& D6 z1 N+ q3 ^
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 _( g7 g$ o7 k    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
( W( L7 w% A2 e& E    mcasp->regs->PFUNC      = 0;          // All MCASPs, l8 j& L( g3 k: `$ p+ @- ]. O
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 D( I+ H9 n% S6 c! f- C8 P5 V0 ^
    mcasp->regs->DITCTL     = 0x00000000; // Not used) g( F+ H% [8 y& N# \
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 W! g  b: v! `- n3 \, Z+ G    mcasp->regs->AMUTE      = 0x00000000; // Not used9 a- g8 K/ [# Y! Z
% h4 n' H' E2 R/ ]5 u: X
/* Starting sections of the McASP*/9 D) e. e+ `  w
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / m4 |# r# T6 b  q* c) \
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) Z6 l0 `9 g/ l2 W$ }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 I" j8 g+ ]0 }, i! E7 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, B+ C# h9 ?( d6 f
. }0 `# P6 e' _4 l/ M
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; L  Z9 B! X2 a  `& Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 c* K( ]0 S: \9 z
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 q8 Y8 b) y* V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) _/ C* K5 t  [+ I; R7 |
9 P1 m1 O% P2 P; Z
    mcasp->regs->XSTAT = 0x0000ffff; 4 V- c& ?' y  p; V
    mcasp->regs->RSTAT = 0x0000ffff; ' @& |% l$ G0 `' q: ]
6 q5 y* q7 n6 ^7 l" O, ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 g# X0 `8 _# J+ ?4 m" N; L, r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 S' R) u5 j% \1 X  x    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % }3 A$ z# |* E0 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& }; @2 X( P# |3 f7 b
0 \8 t! S& c5 n. K! a    /* Write a 0, so that no underrun occurs after releasing the state machine */8 Q7 @" I; [+ n! _3 t
    mcasp->regs->XBUF5 = 0;3 [: T  K+ h: Z) T  H+ I
    mcasp->regs->RBUF0 = 0;& K$ |9 m$ n. l3 Y4 z, W
3 S* ^, m) L3 j, B/ l) k$ F6 d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 |  ?9 r0 _7 f+ h, G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ n) E4 o1 l4 v4 n2 b& _8 V" O    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ |0 }3 T3 G, r9 }; ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 c. C2 H* J5 T! Y
6 x: x- s) ?, N4 R$ K    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & L$ T7 C! M. T0 a, z7 J$ K% R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& Q8 Y% d+ v! k2 P0 h/ A$ J8 C" w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 ^; q3 A9 t# t" ^) D' R. u  l) E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* m' d1 }, }) D! b) a; s) q) F

: p; V6 O( ^7 D( K! Z& \5 C$ R9 P- x    CSR = 0x0000;
8 A" v4 u) r4 j: L" {    INTC_INTMUX1 = 0x3d;
2 Y0 i; v9 j' l) e$ _0 j7 _    ISTP = (unsigned int)vectors;9 J4 ~# Z9 y- _! H$ f
    ICR = 0xFFF0;    }' [! _" C( }9 c
    IER |= 0x12;  
* M/ L4 h& ]# h. F5 b    CSR |= 0x01;  
# I# e2 H. v, K7 h8 B0 p! x! I- C+ e0 K9 s
+ R3 J$ w% T7 d$ a  D0 q

# z- ^- F( N4 {7 B还有就是两个输入输出函数:1 ]# V5 H0 D! ~
void output_sample(Int32 out_data)( \0 P3 j8 L$ v% r7 `
{
7 o) E  B, i2 y  AIC31_data.uint = out_data;  8 `5 S" ?; [& y! m) H0 M0 U
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; z4 B; ]& o* o2 V}
9 T5 k# x2 M2 v& V
* a5 {$ O# W8 R# k, [Int32 input_sample(void)
9 w  c) a. n6 h{  
# n9 E6 w3 X6 G) p! b5 w  AIC31_data.uint = MCASP1_RBUF0_32BIT;' b& b# S5 @+ P2 W1 @6 V' U
  return (AIC31_data.uint);
4 B4 z6 W7 Y- g}% F' l  y( Z$ K$ |3 W

' j$ c* S( i+ _) E: i: H
分享到:  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-16 08:15 , Processed in 0.037612 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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