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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. x& @6 i; g1 p1 U! i/ pmain文件:
1 k! c/ x, ^$ _( Y# }) vinterrupt void interrupt4(void)  
; k! ]4 J. F$ o- O2 a{
# }  n  T3 q/ F) Z3 `  Uint32 sample;
. d- }, O; h" ?2 R! a5 a
5 r( ~% L+ y* b: }  sample = input_sample(); // read L + R samples from ADC
1 r( W+ |% p5 _5 W+ u  output_sample(sample);   // write L + R samples to DAC
4 j2 L4 C( q* Y% ~! c  return;
6 {2 x  }% K9 K7 m  e0 |}* V  Y& G, F7 U
% k/ }% g( G: \. U" n3 t
int main( void )' x7 s: H' `3 A) n9 N
{
6 s$ H- A9 G5 S* [: [- c
3 @  q% e% y& f. B; t    /* Initialize BSL */
. f) z; F& r. h! t4 M0 _8 S    EVMC6747_init( );
& @* {+ q# {4 U+ z        /* Call evmc6747_intr function */
$ V# q+ ~6 l! R( `' ?8 h    aic3106_init( );5 r0 V  ~5 N' C
        while(1);8 C' r( ?& z5 ~& K
}. f9 r0 z5 N3 j2 R& R! C7 }& p7 N
9 u! m; R& F& Q! Z
+ d& |* F6 e$ J6 N, ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. q9 f1 R. j& V' {( ]1 L8 W# }
/* Initialize MCASP1 */
" i1 {: L; m8 f0 r' V( k' V    mcasp = &MCASP_MODULE_1;
5 R. k" R! x; e. S  b9 T    mcasp->regs->GBLCTL  = 0;       // Reset
" W' h7 L# t8 X/ a+ s    mcasp->regs->RGBLCTL = 0;       // Reset RX6 [! T* C7 u( N6 X% l
    mcasp->regs->XGBLCTL = 0;       // Reset TX
# o2 O9 e* e1 S    mcasp->regs->PWRDEMU = 1;       // Free-running/ S, Q* y) H" D) H, A# m
   // configure McASP0 receive registers! f/ F5 a' C1 m2 @
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
1 U6 b& s6 M' k0 ~; o    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) J- x+ U8 J+ x- X, z; L: Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 K+ _' m9 ?. g1 M. Z4 h: A
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 {" H9 ^5 O1 @    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 C0 W$ Y3 k* T  d* V    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 U: x- b! Z; H; e& j    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) w1 t8 h1 Z+ _7 z1 n7 |8 Y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- f! o. G! L4 s" N* e1 A1 O# s& h
" o0 v0 O3 y# k) `3 E
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. r0 w, D3 Q, n$ m3 i$ H* u2 F    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) l  j; c- D( _( J$ K6 k1 m
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ m- D& `1 o! ?; Q7 t    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, C+ O6 l+ K! ~; \: P" W7 y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
  y' ]5 q7 t: P$ Y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  h& g+ y& N( d- ?, O$ e: l& ?4 S! h8 j
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. u8 O0 J' i  Y' O5 }0 {% ^1 i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 O/ C6 r9 a. P$ o) H+ x
" A4 C& ]* Y- E$ l/ p5 a  y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) z' k" Y4 @$ u5 S* A
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* \1 R% g" Y- P7 ~$ |
    mcasp->regs->PFUNC      = 0;          // All MCASPs
; `0 h0 b# J- a7 ~    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) H/ f- W# }! _4 g0 \( t
2 B3 z/ p# @7 @5 N7 r7 g  A    mcasp->regs->DITCTL     = 0x00000000; // Not used4 V0 h/ P. P: W4 x& R" Q& Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ H! T6 c% m; N6 ]& ~. n" G
    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 b$ Q( r% @+ p: E2 L" a% q( b2 i% Q, r6 A
/* Starting sections of the McASP*/
& F, l4 ?' z& U- O( R0 V! q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 }+ A( g9 y  K% F. v: t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " P7 B+ c0 o( j8 r) M
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 x- N- p' \5 Q" A$ R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 o7 h% k' |' q& ?- D9 {% l2 q3 l8 C; f2 T5 [0 m
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ q0 K: {7 L6 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 h/ o& S' \9 {# w# }; V
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 v+ X3 |8 I6 D, I. ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 V+ i. i! t$ Q" I$ V  f( z+ l+ x# Z$ {9 D9 i5 |
    mcasp->regs->XSTAT = 0x0000ffff; & [. x. v8 P# ^3 h. T& Y. X
    mcasp->regs->RSTAT = 0x0000ffff;
2 _* M8 b: S0 L! z# k7 [; e* h  n; H2 [8 U+ h- o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 R, h* R, P: v5 N4 i2 w4 j' N5 ?" J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ o! k/ H/ d1 m' n    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , _+ E- ^5 L( B: u5 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# {" r. H) i: k" K9 j+ k- P

$ l; Y4 ^2 M1 u* p    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 R1 y- h4 E. z' q! u  V    mcasp->regs->XBUF5 = 0;8 r) ^. S- U: P2 s2 @
    mcasp->regs->RBUF0 = 0;
. q5 Q& G5 o0 @
7 v6 k8 b0 [9 E7 ?    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ' ]& G: B/ y! I  M& M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 M4 f+ ^! Z" B, c# j* B  P& }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 C$ U0 M- L/ F. g- Q9 W8 @" q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# t  @9 {7 X: Y0 \. Z
9 @6 L6 {: p2 ?7 y. |" B- A8 }    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 P% Y4 `# g+ S: m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 ~8 x" f. J* A& _% F    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 ]6 `# {- x$ o: F$ Q" ~. D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' }; Z: T/ M* I# L/ C  Y/ a
% ]/ \, Y, z2 a/ x7 w; b    CSR = 0x0000;- f; l/ U' K  o
    INTC_INTMUX1 = 0x3d;! p1 |6 n4 d5 a( {! b
    ISTP = (unsigned int)vectors;9 t7 e. G: V( g% p
    ICR = 0xFFF0;  8 }1 v5 a* t8 A$ R9 q5 t' C
    IER |= 0x12;  4 f- q; k! f  y+ L3 @& E2 C' j
    CSR |= 0x01;  
! ?6 m" _: N; |2 I6 w5 r0 ]  c( D& s% D+ f

6 |: m% Q. f. V/ v9 G4 z- }. V0 m* C/ H+ f% V- h6 W/ N5 h
还有就是两个输入输出函数:* l( a8 |2 J& w  E* [
void output_sample(Int32 out_data)
6 i/ Y+ l# ?( S9 I4 Z2 a# o$ M{$ b" U) m$ |) A; |; v, h  x0 T
  AIC31_data.uint = out_data;  . Q3 J2 H% B: U4 w
  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 h) N  n* p# o3 d
}; a0 z  b3 S3 g. |
/ _! `, [: A3 K: {6 g% e" l
Int32 input_sample(void)
0 A6 h; N) f* V; b0 j{  2 C3 ?7 Y2 ~- S$ P. R- |2 Z4 W
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& ^1 d8 u! n+ L: V  return (AIC31_data.uint);; o! \6 Z' |; h! v$ j; N! \6 K
}
( ]; Q0 u% u7 q1 H) h
) o) ~( I) H  i
分享到:  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-4-6 14:10 , Processed in 0.048176 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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