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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! [0 T/ G5 \3 F! b+ r
main文件:" A1 `* G1 X/ p! \2 q: }+ @
interrupt void interrupt4(void)  
. v  q! ]4 R' v- L- g6 V  J- V4 r{4 z2 f+ Z: h- y7 m% W
  Uint32 sample;0 {- n* p; Z( k* _
, z8 Y' G, I7 u: u, R" f
  sample = input_sample(); // read L + R samples from ADC
$ C0 g' U) c7 c2 u5 J  output_sample(sample);   // write L + R samples to DAC
2 f' Z  }3 F7 d1 D3 Q  F/ l# ]  return;
( J  }. u; N1 m8 ?7 m0 v}
) G6 z7 J# G. x$ q& c% O- N6 [9 @) T9 Z
int main( void )
1 H/ o0 d6 Q; K$ S{+ Z/ d1 h* L; }" L
" [3 z$ E" ^) \- R0 h* ~
    /* Initialize BSL */& l) K5 t0 x6 H/ b
    EVMC6747_init( );  }; O" n5 o( h7 G4 f2 F( Q
        /* Call evmc6747_intr function */
+ Z+ Q: @3 ?% Z  P( s    aic3106_init( );
/ Y8 g2 J9 b1 K2 i$ M        while(1);
1 s5 T. k5 g& Q- h5 V}
1 q. F( c: v3 a+ K! c. m) H
& i* |% V" k  W# h5 z6 \9 k4 f
& \6 w4 E  S9 x4 B. K/ v; B" K* Yaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" N% b1 U+ N4 o3 u5 W  r1 q/* Initialize MCASP1 */  R$ Q$ @: l& b
    mcasp = &MCASP_MODULE_1;7 u* @/ K7 I& K' ^  }6 a- s1 _
    mcasp->regs->GBLCTL  = 0;       // Reset
# k% K. _3 P. e    mcasp->regs->RGBLCTL = 0;       // Reset RX8 o6 I, F0 X3 a, f: U# F
    mcasp->regs->XGBLCTL = 0;       // Reset TX
- j$ i4 A0 Y  M' N% L    mcasp->regs->PWRDEMU = 1;       // Free-running
# F1 ?, r5 U; q5 ~# s% t. t. @2 e   // configure McASP0 receive registers( J, Q( i- y" K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 r0 ?! g# m0 [- U4 S. W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 \. x, t) P6 _" m( X
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& e4 z: n( F* m9 ~& `) W
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)2 }  v0 X, O% ^9 D: R
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! X  F; a) f8 X, U8 e, y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,17 d* ~0 q. G  ^+ J% e1 \0 j
    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 E1 {  [  e0 Q* @" ~
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' d1 ~2 _6 k% i* F' @

% c  s7 t$ z( t% Y' Y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! L+ R- k% X  e3 R8 A
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 y- z6 |1 T, m* f0 `
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* |; a, V2 s% N: |. o# ^+ Q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 |- l% \& I6 l- b& {" v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 M9 l9 K4 W7 B5 ^+ a/ F
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 A9 Q2 {" U& w5 d$ _1 k    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; s6 m( \8 k3 ]  c1 K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ [5 K- a9 u! r( y  j

/ n0 Z% z$ @# r    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: w, K5 D4 b$ H$ l3 Z' Y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' R2 r$ i7 O9 P3 Q7 U! @6 _) r7 T( j    mcasp->regs->PFUNC      = 0;          // All MCASPs0 H# p+ d$ b: u* S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( s  k5 K" e+ ]8 j

% n) S1 o; C% K2 i, N3 }    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 i! S2 X' U; M: \+ D' {" a    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( h) l0 ~& }0 h8 o6 W" R1 Q    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 P" O) b# a. D) L9 Y9 Z% e! t) N0 ]* U! ?) L: M: @
/* Starting sections of the McASP*/+ Z% B' a) V) X4 e+ d: I1 F; ^
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: r) O8 n- x% W' h0 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 b- ~/ D6 N, ~, ]1 t/ O8 Y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 ^- N( p% C5 [: }3 a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 d4 x' r3 @% L: B9 q0 R
+ V. U8 ?+ n0 ?( K0 ^+ s  \    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; J+ n3 i$ L9 C# |6 J! [2 b( R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( C4 r1 l% _# h) O/ V& \    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 a7 @: \8 \3 D" Q1 k% H$ I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! R8 W" K9 X4 p& d; v6 z

- I8 u% M: X3 h0 M( x: h! ^- i    mcasp->regs->XSTAT = 0x0000ffff; % e* F# p3 V" A9 S
    mcasp->regs->RSTAT = 0x0000ffff;
( k+ c6 C" ^9 `
8 y' H4 M5 L- X9 ^$ w    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 Y- A: ^6 j% k6 x0 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 B$ m% W' m- n( n, ^4 L- h/ g
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 d; @+ |7 \/ f7 ]+ i0 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# A3 x3 H/ E) \. s) B! J

0 H. ~9 A: P5 j" Z+ ~6 o    /* Write a 0, so that no underrun occurs after releasing the state machine */
. E5 L. r2 ]& G& q( p    mcasp->regs->XBUF5 = 0;
* ]/ G( B" ~/ s9 {& H) |+ w    mcasp->regs->RBUF0 = 0;
, H2 S8 F2 y- p  h7 m7 a& ^, x, h
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ r, K% M2 H' e6 U. a: p9 y! @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* \: }1 E1 @% A) l7 O6 Q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / v4 f& ~0 a! k5 i" r8 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ X0 S8 Y6 l3 Z7 g7 u* U2 I: Y  m% K: \, u# B; }; R% S9 n; Q/ t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) U% S: l7 C, K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( Q6 v: v2 y* A8 w  m
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & X: L& l! @9 j1 N' E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 v  A2 u9 d4 J0 i' x* _/ k% \% d9 P
. }, V7 l! k' p) c4 t
    CSR = 0x0000;7 H- x7 P' x! _( t4 n8 g" _" M
    INTC_INTMUX1 = 0x3d;
4 H1 _' H) h# _, U5 ^    ISTP = (unsigned int)vectors;/ K; q. O/ b* G& N5 [
    ICR = 0xFFF0;  
' ~3 p* G: \/ o# u6 T    IER |= 0x12;  
4 D6 E, C' i4 {* e8 l' \5 A+ @    CSR |= 0x01;  6 A. g$ c7 }% w# m

! Y, w( j5 D& E( x& s& \' M+ M* n
6 e1 |. C9 M& t" @, r
9 r, e, C. `: J$ B还有就是两个输入输出函数:
8 a2 \  S& h$ C# d2 Rvoid output_sample(Int32 out_data)
( B# @; }* `. B5 c{; s1 p% W+ w+ s" `: X! o) t# M4 u" f
  AIC31_data.uint = out_data;  & d: t, Z: j! x, |( k4 f0 C. N
  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 C& j$ n# v* D3 W
}
/ _! U4 l. t0 o" m) v  H( [4 Y" c5 Y4 |7 \" ?9 m! @9 F2 Q
Int32 input_sample(void)% b9 j% F, [  }7 u# t# L
{    e. K; L( e( l/ z2 e( R" R/ H
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 A# c3 p/ g* p1 [" [2 {' i/ Y  return (AIC31_data.uint);! v1 `3 P4 _- c; C. [" |/ g7 R! l6 {
}
. V0 ]1 b' m. |- I( d! T5 w2 S! M: g$ h0 Z$ W6 e/ A
分享到:  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-3-6 05:15 , Processed in 0.041814 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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