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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( @1 M& B4 a- ]* k0 ~- [. z, E
main文件:. p5 c2 ?' @  Q' }8 T
interrupt void interrupt4(void)  
# X  G9 M# [9 O{
: V# t8 V, q+ ?& v  Uint32 sample;
8 Z2 p, t- \: M
- k) ]$ ]# c# d% n/ `4 r7 j+ a  sample = input_sample(); // read L + R samples from ADC
' f1 V5 F+ s# X. M4 \5 _/ J5 ]/ \  output_sample(sample);   // write L + R samples to DAC 8 j; v& c, J& }" D9 {& z; v) M, P4 U
  return;- s/ i. Y: n; s/ m1 s! ~; ]! l
}
% M0 l! @, w4 F0 ^$ u' V; B$ F. P- M% q; m# z% e5 @- D1 ]
int main( void )
5 c9 D- k. @1 ^5 B! _{3 ^, _; x% z  j% o0 D' K" P
& A3 s$ h  C  t
    /* Initialize BSL */* n6 E8 W2 a  V
    EVMC6747_init( );
3 U1 B6 v, w) G9 ^# ?2 ]& r# E; A# W        /* Call evmc6747_intr function */
' z5 M. x1 Y  `% D; R1 I* ~# c8 \    aic3106_init( );: f9 e: N/ R; y/ B5 q6 N; O
        while(1);
& @. r2 j, b- y+ i: X3 j  s}
' d. p8 l" S0 }! T( I$ x0 Q3 ]# w5 _$ g* a3 {& H* H, Z) D
( H' t8 Z6 L1 u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; j" w! @+ ^8 @5 C2 d/* Initialize MCASP1 */
, E& c4 }& F/ ?: J* F, `( [; u    mcasp = &MCASP_MODULE_1;
( ?  I* u! y1 ]    mcasp->regs->GBLCTL  = 0;       // Reset
3 @  O+ M3 C6 `& {    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ e, z  S1 G+ x3 x0 E    mcasp->regs->XGBLCTL = 0;       // Reset TX! X0 D" L6 {3 t0 ?8 e' o
    mcasp->regs->PWRDEMU = 1;       // Free-running) w# L/ x+ z: p5 X& F' y  r( o# M2 V
   // configure McASP0 receive registers2 G9 V% i( c: I( n# j7 S# G9 S
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, p- Q5 X. m$ e, t9 G2 @, C1 i8 A8 z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  W' p& o; L% _- |! N6 e
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 j: Q; `. n2 E1 V$ y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% c% j0 T1 Q- o% `
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 T( F1 C$ f: [- B# B6 F5 l    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% v! F2 t' ]- K) x    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 {: |# \1 V' y$ ]( m* g    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) {5 d1 r, j$ _3 _

$ W+ w/ F% ?$ D$ }% s6 C    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, T* s; L. k: |- x0 i    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 D: [* S4 v0 a9 b    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 H: n  n& C; L  j6 c
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 g( M% F* ^/ E  K    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& }- u2 f1 z, G
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1) a3 [' Z  V8 H8 m0 U: S
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" F2 s, ]3 j' s  {    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* @. C# a6 ^. K8 q1 M/ P: b* v4 z! Q) {2 B: Q/ q) F( O5 Q. V
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ _: W( Z  Q3 I
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' W: R, K0 M( N9 l, a& |
    mcasp->regs->PFUNC      = 0;          // All MCASPs1 ]& F& x4 r! [' @: L9 P
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) o. n, Q7 ~) H) A
8 o' z( R) q) p6 g+ A8 P
    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ _0 C0 g- W, j' x    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 m! a; \/ l5 K9 v7 s, E
    mcasp->regs->AMUTE      = 0x00000000; // Not used3 Q! L* x4 f" w' S; @

. d  O( g# [9 r% Y3 |1 e4 k* d- r4 X/* Starting sections of the McASP*/% B5 t0 b4 ~. p; K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . g. U: ^+ j& c' p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# g( e: E) S1 B- ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& q* ~( e; z0 U; C* }+ h* ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. p7 m* q7 b4 _
- S3 X& c% @/ f8 i0 C& e. V
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   y& E) w- o# h3 Y! R6 R" Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 s3 y, \* c7 ^2 M    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : u5 f% E9 D4 i1 L6 |7 L/ q) ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 F' Z& x2 H# @* g0 h/ I4 @: b2 E  J" q
/ {# \  U, F; z6 x1 w    mcasp->regs->XSTAT = 0x0000ffff;
5 B2 S9 ?5 W6 h4 F    mcasp->regs->RSTAT = 0x0000ffff; ; p+ _6 J! W" F' P

* M7 B' g( @9 O    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* J. E, T# C: U* C7 h+ I: z: ]3 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! c+ x+ {4 U' N8 }7 D6 M- Q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 g" X$ O( C1 T  I0 Y3 I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ r( C- R6 Y8 I; ^
% }' e3 Q' S- [* u
    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 r- D$ h& g& a4 S' S0 w    mcasp->regs->XBUF5 = 0;
; ^6 Z! @! f7 B/ a8 u% ]( n* `    mcasp->regs->RBUF0 = 0;# ~3 e% O  O6 }

- a5 F  b2 R* u6 P" \5 d1 q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) L1 j/ d* r' x, L7 I; j( l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ I1 s# j( h% i! W: X
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 u& v( n9 F- g' S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ f9 [3 G- @6 b$ S% M: e8 M

" `9 j* z  n7 P' h; z2 A0 f! \* }    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! F2 ^# p& R' u2 {3 F3 R' a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 l" o0 ^1 p( h2 U6 c8 U* _* |    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 @( ^' s. u* _' y; l' O. l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 f, n0 t: L. _" `+ I: u4 V- \) ^3 J' ?; Y* {" R- p
    CSR = 0x0000;
6 O+ f6 w) C+ ~2 u$ _( l    INTC_INTMUX1 = 0x3d;, i  H+ @. Z1 u3 ~. U
    ISTP = (unsigned int)vectors;
& J: C& p/ p$ Z, @) y. P! C    ICR = 0xFFF0;  
4 S5 o, ?1 k: _5 |8 @4 J# `    IER |= 0x12;  - Z3 ^9 v0 d6 d4 W' l4 M5 x' n7 P
    CSR |= 0x01;  
3 @0 {% |% }8 D3 `  J9 l# z! f
( a9 ^6 ~: I( r- O! d9 k! b, a4 \7 I0 m

# T5 t# e6 m/ [! p3 _3 z' j; u1 y还有就是两个输入输出函数:- B) C% d8 H! @9 P6 c; Z% |" t/ k
void output_sample(Int32 out_data)! m- z' n; K1 u& |9 A2 y
{  y1 U2 a4 S6 F* S) z* [* Z
  AIC31_data.uint = out_data;  
8 u/ n! `- m0 G5 n0 Y! ^: g  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 q9 r' ^" _  x% I5 g
}0 F7 G4 g4 D; O

$ D9 Q, j% K+ iInt32 input_sample(void)5 |# O. l+ v" A- d) E
{  
" u; z6 L6 f( f  AIC31_data.uint = MCASP1_RBUF0_32BIT;0 E/ M0 V0 Y. v
  return (AIC31_data.uint);/ o) e+ p0 L+ T/ \; M" a
}) E, k  W+ Q0 `  Z

3 F8 ^0 U2 r3 y) W, j  Z/ G+ p
分享到:  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-2-2 04:20 , Processed in 0.040555 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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