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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; K. D1 E0 ^. c0 T
main文件:
! M4 U+ [& p3 f8 c7 E1 @interrupt void interrupt4(void)  
. ~) s4 D6 Z8 _, q, C) l) ?) `{
8 |& g* R4 D: G  `- [* k  Uint32 sample;
3 ~. e6 L3 V- p- e6 F/ ?( X1 w+ p# b: L; S( z
  sample = input_sample(); // read L + R samples from ADC
5 u. U5 Z; G: n4 L3 J( V  ]% a# j  output_sample(sample);   // write L + R samples to DAC / K; Q# i' V& m8 X  _+ H
  return;
1 O; ^% x. m4 y$ U) C7 v}
; d& i( ]6 n9 o3 k# {$ @
4 _3 `& l  k! v6 Cint main( void ). T/ Z& J2 l$ }. T: ^: N3 V" ~- G
{! z, `# Y3 c( f9 E7 j0 ^: ?6 i

$ I% c, Q8 }: U: R2 o: I3 a( L    /* Initialize BSL */
: T  V# F& g  q1 Z9 A& B# U7 y0 j    EVMC6747_init( );
" e4 w% B8 _# a  O. M' M1 ^* X& _        /* Call evmc6747_intr function */5 _* d9 G2 ]* W5 c# d
    aic3106_init( );$ @  @! U* z" k) X
        while(1);9 v$ _7 ^& b6 n2 L. h' ^) b1 k& [
}
  W: L  |  a& x, O: G1 Z+ \3 c. X% Z5 u' I$ Q
) U7 i+ J$ m3 R( v1 Z1 o- W  h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& H# L" F$ j. A
/* Initialize MCASP1 */4 }# a" V' ^2 U
    mcasp = &MCASP_MODULE_1;
' _: |7 {# O9 u# C* y    mcasp->regs->GBLCTL  = 0;       // Reset
7 v% Y& W0 C# {+ E+ {) ^5 e    mcasp->regs->RGBLCTL = 0;       // Reset RX; G8 t2 z2 p. u! S
    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 x% }  E# z6 g    mcasp->regs->PWRDEMU = 1;       // Free-running9 v! r$ p4 g) {% \# B& B
   // configure McASP0 receive registers
9 H) @, ~1 N' B7 m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used+ c8 p" p% t4 x7 f( {% \
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. I) L3 C2 e: C( {; h& a" o0 d. X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 u+ N2 E" _& K& C. ^0 ^4 k    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( l& ]; e) \: f2 x
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' B( w7 X( `7 D; I$ O4 H    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 x+ x. H. N1 A  `) t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 ~7 ?: W; G' |+ w; h2 ~% G    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 c9 u; s/ N1 m0 m
4 h( @& l/ C% y- g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used& p* M) h2 q& ~/ D
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. M% L& ^/ l8 z" D    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 `1 ^9 A% ~7 a( S* z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; p  _% Y7 j% x  ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: u6 w* Q& T2 A- b2 H% W) h& B
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 Z8 G2 v7 l0 y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit- N- s& K- }" u4 a6 t9 m
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: p) ?* U& a- c- U# n) S0 v
/ K9 q4 b8 l0 U0 o. m) \  Z* f" r    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN5 L( S4 i. R6 u& U! o6 f4 K
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
  S# J. w3 z( z7 ], ?0 x& f6 |    mcasp->regs->PFUNC      = 0;          // All MCASPs
& O3 [! y. R7 t0 u    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  p9 n" k1 V: A3 P" T
6 r* \- h' D, T  g5 t    mcasp->regs->DITCTL     = 0x00000000; // Not used
. J1 ^6 Q- }3 c" g    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 ?0 k) o6 p- I
    mcasp->regs->AMUTE      = 0x00000000; // Not used
( m4 J; ~) U2 b$ W6 Q+ V' H: i. T( ]4 g4 P
/* Starting sections of the McASP*/
8 Z& v1 H2 M5 j/ Z% |    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- a( D7 I. m* k& q. c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 Z+ M0 |6 U1 S
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * \6 s3 n6 G! e( R) ?$ Z0 q- z8 k( s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 r: B& T" e3 K! O& p2 T/ J" ~( A
6 P) z. ^' Z2 K+ |    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% m, O1 b  C: B0 [3 l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  M: A7 k  V& f! V: O
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % O- _+ A$ m0 x$ C5 b% Y2 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% P: {9 i- ^! j8 s8 B" D
5 R7 _, b" Q% G& _. @. Z$ b
    mcasp->regs->XSTAT = 0x0000ffff; 3 l. O' e: ?6 r# @+ ~8 Q" j) d2 ^" Q
    mcasp->regs->RSTAT = 0x0000ffff;
0 s% a# f) J! ?& [% _
: ]3 @2 y) L1 i# f3 ?9 \: k" B    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) I0 \, b5 W+ `9 _8 r7 c9 S6 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 O0 I" w9 ^4 o& N6 A5 x' g4 ^    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' X5 x; s' b0 R' o4 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( p/ g$ `3 H. e6 ]6 |: n4 m
7 {9 I  O& m: a
    /* Write a 0, so that no underrun occurs after releasing the state machine */+ |5 i) m4 k: ?
    mcasp->regs->XBUF5 = 0;5 U) c+ N. }8 J8 A# j) v$ K! m
    mcasp->regs->RBUF0 = 0;
: ?# y4 P% P# |4 d
3 O7 L! l9 I! V# d    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * x6 s9 }& M' p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- C4 D6 ^6 ]3 d    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : z0 K- g$ M" Q4 t2 H9 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& e# B& S' T6 z3 `2 Q1 K' `& k$ A
9 m7 F! G# ?" l* N
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- R: M6 J$ m, ]3 H! U2 i1 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ i8 t5 M' W' M: I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* Y7 F0 D1 T7 h& E; [$ y1 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 F  H8 B. D7 A& o' ~$ r
) w2 W8 W! j4 s    CSR = 0x0000;
2 D& B6 R4 I: h8 C# E- O    INTC_INTMUX1 = 0x3d;/ J$ d3 e4 `% z1 T
    ISTP = (unsigned int)vectors;
' s# s8 `5 S8 D6 d, D4 T) s/ r    ICR = 0xFFF0;  3 F4 n% Z8 k/ R  d2 S
    IER |= 0x12;  
+ G# I  q7 o( \0 [    CSR |= 0x01;  
& f2 r; Y$ N# [  ^& _, l1 q; z, x  W5 V2 b9 P, z
4 C& K1 \* m( A4 d$ v6 q
1 {5 ]0 ^/ n2 D, T
还有就是两个输入输出函数:- q/ P1 Y9 T. E  g% T9 [
void output_sample(Int32 out_data)5 ~/ W, h1 d# V- o1 ~( X
{% D, x: L5 {$ o0 R  }9 ]  L
  AIC31_data.uint = out_data;  * D" n2 t! a* ^! Q; D
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# v6 J& Y- r  g3 _6 b
}
3 b+ j% Z0 \+ P0 [6 ^- G
) J3 z- U3 X( J6 E: A6 Q8 E+ c# NInt32 input_sample(void)# I8 `0 F1 O; ^
{  
5 x3 r) t% N3 ^6 k/ W% x6 H( m8 `  AIC31_data.uint = MCASP1_RBUF0_32BIT;; j9 z& {/ ?9 z3 e; c
  return (AIC31_data.uint);" @) z0 s: b( c4 \9 R$ k# x
}4 p3 \1 P. O" h6 E7 S. n) R" H3 F
2 o. n, a7 @- d/ p- C# \, P* o1 T
分享到:  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-19 08:24 , Processed in 0.038104 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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