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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ r- z; x! v: a6 U' y
main文件:- k- m5 l% x0 b4 M2 s
interrupt void interrupt4(void)  
8 M$ L6 M" ?! O{" i1 N* [& X: _2 b
  Uint32 sample;
+ x( O: ~; `! ]3 M$ _- _! q( A/ S& D) r
$ D- k0 s4 _. A" |; R  sample = input_sample(); // read L + R samples from ADC
' ?4 O  U6 J4 ]5 h$ K' \9 P  output_sample(sample);   // write L + R samples to DAC ' n7 B2 h* B% `# X, V0 C
  return;) ^- {9 {' s6 h+ d, u. N
}
( T9 l& y. s! I/ s/ V- C; Y
$ V, i, ^1 d( Q2 h9 U2 V1 c1 yint main( void )1 s. R' `$ ~- W6 B
{* `* W1 o$ P! a9 s7 B5 O
9 d6 V5 ^! c: N3 P& _# Y8 R: t
    /* Initialize BSL */
8 R/ W8 g% m% M" i# G    EVMC6747_init( );4 N+ z" E2 T! \% ^. ]
        /* Call evmc6747_intr function */
( ^$ I8 b1 e( _$ S- k    aic3106_init( );4 u5 p* v8 Z7 e0 g
        while(1);
+ f/ ~! F, D1 F+ k: P}: G/ b. `* t# t2 M' v% B

7 C; K8 G" ~, C3 J8 `& f- _2 y, a4 j0 b/ V' h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 k& D$ T) f; Q2 C# L, V# L/* Initialize MCASP1 */
( B& |' m+ r) [) g    mcasp = &MCASP_MODULE_1;0 T1 q3 |1 ~. J0 [- q6 J* k
    mcasp->regs->GBLCTL  = 0;       // Reset( {" {; w% n  O4 h# V$ b
    mcasp->regs->RGBLCTL = 0;       // Reset RX" Q, `8 U1 S" H: B+ W
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# z# H$ M0 h7 F/ ~& }8 }    mcasp->regs->PWRDEMU = 1;       // Free-running
6 d" p/ Q9 t) ^0 U) D; A" z2 L! p   // configure McASP0 receive registers. h7 }" g& h- R* c3 T4 G
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 E* m. C8 R% d* {0 J
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* K) v0 y8 w) }6 v  Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ M9 z3 H7 w2 K/ |    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  a0 g) |, M$ \7 Q6 A9 x
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, @% R/ ]! ]/ p    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' n5 |% H, r& Z/ J
    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 d$ k2 q% L4 k
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( p) ?! F/ M: o$ m, S
8 n/ \; `7 {0 [  Q5 f    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used' M/ {, b' {" _% u% C2 T' y
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# _5 A; |; B" m- K( t
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ |5 E/ i9 W/ w/ {" g/ ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) Y- W3 c4 T& C( d' U    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; ~; }# g) Y3 L2 A. x1 `- p
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 z! V7 p* t& y- g
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: C: d6 {; Z$ @( n    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- w7 G  E2 m0 l# t+ b2 k5 z, J/ {" X. ~
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ u. h. ^/ b& n5 p) ?% g7 ~6 f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 L: k0 a2 U) W% u    mcasp->regs->PFUNC      = 0;          // All MCASPs- \* B4 }1 ?5 R8 L0 Z' `
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 ]6 ?) e9 |6 X8 o% g

+ W, F2 m* q5 x# r    mcasp->regs->DITCTL     = 0x00000000; // Not used1 t9 w. @- V# z7 X3 _1 d3 V  h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used, P  @/ B5 ^& r5 R2 u
    mcasp->regs->AMUTE      = 0x00000000; // Not used! _9 `' N  r: k* J8 v9 e

1 Y) }4 @2 S7 v8 z* `0 Y/* Starting sections of the McASP*/3 r; h# z' A# M; R0 |6 w. o9 P' x
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 f7 ?8 |- j0 u4 k+ m  d- y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
* k7 P& z. |# }4 ^9 }5 t' T    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; N) I, S! p, e0 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- J  A# }9 ~6 q/ A/ o3 Q3 v3 {( u! j; ?& R  i
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' V* y% W0 N2 Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- X! [1 u' d+ a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. u8 m7 x& u+ \! p5 X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" a3 K  B$ w2 }, {9 ]  D1 K% G
- A& D: F+ M/ p" j3 R( l0 g6 F    mcasp->regs->XSTAT = 0x0000ffff;
- E, J; _7 k2 B    mcasp->regs->RSTAT = 0x0000ffff; ' a4 p1 b( ~9 [  E8 h  o, X" O

8 O% s, \2 t2 k+ Z1 Q! w0 `    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) Y: z1 j# E. x' }1 d8 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" R1 w. O/ g2 a8 m9 K" s9 N    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : P1 @9 Y( G+ L% U- _: G8 l0 L9 A6 q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 v- a. R) E' u. Q" h# x+ h: R* Z0 U0 H8 a) z, y
    /* Write a 0, so that no underrun occurs after releasing the state machine */+ [" R4 Q) i& E2 v) W3 W
    mcasp->regs->XBUF5 = 0;$ C! @$ k. w# K% J1 c, _1 g0 i
    mcasp->regs->RBUF0 = 0;' H. \0 Y& T* l/ g* T3 i& r! h
  w2 x3 z/ ^. }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) U: K. p0 f: q$ f' O2 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 ?. _5 c4 a8 ]+ {' u2 C, M+ P    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ V' e% C& s( ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: L& R( Z  w( X$ G! m+ p
5 ^7 f0 t; k/ ?" W$ {2 ]( h( Q* z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) H- X8 {8 |5 S" I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 o+ b0 F! r  \% {    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% a" o0 G1 M! j! C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# x4 c3 P0 m6 q% A0 L# j: N7 G5 ^8 v
    CSR = 0x0000;
0 y) X" X. Q9 e4 E. G    INTC_INTMUX1 = 0x3d;+ Z2 |' ]9 ?' f- b' l3 f
    ISTP = (unsigned int)vectors;8 W. f* g% I" z& P, G
    ICR = 0xFFF0;  3 y" e7 R1 G! z) C8 g" I  f
    IER |= 0x12;  
4 i) K4 U1 O! K- z: b    CSR |= 0x01;  
* i1 c9 s% y1 N. D! z' C
$ a* c" x" H0 ^' N  G- R4 X/ r4 S( u! F
; p4 C; d; c8 i- f
还有就是两个输入输出函数:9 {9 P. e1 x- _
void output_sample(Int32 out_data)$ q0 U+ C% U/ j$ n
{
4 s  I) P6 L) ^/ ?  AIC31_data.uint = out_data;  
  n6 G8 j! P, n/ ]$ C: P& K: `. g  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ ^/ N5 V' Z  M0 N" \' A}
$ R# k3 s# e1 f; ~
% v6 u8 X/ ^7 y$ g: V% B3 T; fInt32 input_sample(void)$ \0 _4 ?% @) b2 n5 Y4 b* n
{  4 s  L% N' l6 u  ?, ~
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 z$ V, }) K5 G  return (AIC31_data.uint);% l8 x' A0 i8 n) K* L
}
4 ]- P3 s3 k: B. b. R; h* p4 k7 ~# Y5 V
分享到:  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-26 21:41 , Processed in 0.038732 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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