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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! d' w1 {+ X. X# r* }5 P$ j: i3 Zmain文件:
+ W) X5 @. Y/ ?3 g) p% xinterrupt void interrupt4(void)  4 y- N6 G- N2 S4 Y2 [
{
8 i( m2 y& n& T4 W2 L  C  Uint32 sample;$ x6 C! Z5 C# g- s1 j# t" g

0 B- {6 {( C2 A8 Q  sample = input_sample(); // read L + R samples from ADC
3 r: ?0 N+ _) v8 e  output_sample(sample);   // write L + R samples to DAC 8 r$ F. o. e8 \
  return;- F6 W# `/ ?) k6 Q7 @
}
* O+ r8 R4 a, I
5 R5 m% o9 C8 h+ K6 X4 _5 cint main( void )
, c" c* U2 o' C6 g{; w, g% L- [4 _6 i# i2 C  H
0 f5 e! S; z" o7 H: M( S( o
    /* Initialize BSL */
! d/ m+ n1 n7 Y! g) [* I* m8 [1 j    EVMC6747_init( );5 K# \" q1 t9 A8 b: l- k  n
        /* Call evmc6747_intr function */0 u- c* V. ]1 F, A2 S' _: x" R9 r
    aic3106_init( );; N  A2 O' S5 |! d, S* j( p
        while(1);
: _+ F. K5 Z0 A& A2 H2 B}
' H6 i* E5 X* O2 F! g' W6 `2 b9 ?1 [3 U7 ?

, K; ?: A' d3 k" k7 raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" v& F, \/ ], P0 K: ?( Y, v
/* Initialize MCASP1 */
1 D9 u6 z+ h% a7 r: X  r    mcasp = &MCASP_MODULE_1;5 W- ^) s# j+ Y1 b( w# ?" Q  Z( N
    mcasp->regs->GBLCTL  = 0;       // Reset9 W% \2 p' `  o/ z$ }
    mcasp->regs->RGBLCTL = 0;       // Reset RX
* l; t9 ]! X; _. Z. |  {3 F    mcasp->regs->XGBLCTL = 0;       // Reset TX0 ?% [* r0 ~; `3 I  M9 @
    mcasp->regs->PWRDEMU = 1;       // Free-running; U1 c4 ?! U1 p6 F
   // configure McASP0 receive registers
( h% z, \+ {& O; i: H    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 g  J0 P2 U, Q; ~( ~) e$ J
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* ]; G' U0 t2 m! H
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" |/ D- G# E, s% Q% X5 Y5 B5 n    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" x) D# {9 m5 @1 I, Z" y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! D! N" a/ k# Z0 H, ~  L% ?
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 D7 ]! S; k4 u& ^2 F
    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 u8 x+ u" N. H8 \
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 g# C$ c! s3 R/ ?9 B, F$ K
: H. r0 n: Z0 n, [. q; n
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" B4 f6 R8 k: v2 Q  m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 R4 p/ t% B1 V. |+ O/ M    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( [1 |0 a9 D, _( Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; L( E5 b& T' @' T; w    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK' h5 T2 z" V  u) {' I/ g/ f. p* P
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
0 D5 l, H2 R; h4 O* H    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 D% \  \2 @/ {* @: S4 Q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" ]( X  l! T+ c1 z. T2 T- [& j6 r* i4 e% N: p: ]# r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN$ q) ]/ \0 }, }$ k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% N; a- l6 B- E0 {8 {7 H
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 n/ n4 a4 j% D4 g' `$ Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# S- V0 M2 c! m0 m! X) ~; S
9 r8 r5 u( ^" S4 {5 w" J  t
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 q4 h) W1 [( x. ^! t+ e6 M
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 h2 j% `, {7 S$ S- c5 p* ]' Q    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 |  n) Q" I0 B0 k# N; V$ y& |! j! o% n9 N) Q4 e
/* Starting sections of the McASP*/3 x5 n% H6 _$ u8 a4 ^3 p
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / Y; [1 p2 q% E& m1 c; A: n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! r# W( e. l1 ]0 i" E: W/ o    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 F! H- A  f0 d0 V8 V6 ]1 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) O* d) f! h7 U
$ J) H5 t! O7 b2 P    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ T: Z) \1 g7 @. a; G# W1 V. v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! W* o/ C/ |% H8 z
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 k- m) }$ y. O' ?: I/ X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 \7 e. s3 u; W1 B" f$ P$ c
: k: Q7 F7 z; [, f    mcasp->regs->XSTAT = 0x0000ffff;
0 N" Q% J: [. e5 q8 ]8 Q# x0 M    mcasp->regs->RSTAT = 0x0000ffff; 8 S+ B$ j! h1 o, A9 B% [8 O8 l

6 o% N5 F) I4 ^9 h6 X4 B8 b. L    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) v$ J3 l: Z. V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 ]: `, G1 G& K: ]$ s    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : S; N* _( l! l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 Q# t  B( ~' O. x$ _3 t+ O' v1 z
8 Y" }8 ]6 {  [' O2 O; ?) h    /* Write a 0, so that no underrun occurs after releasing the state machine */. h8 B3 c( D1 R6 W, v! j0 F. ^' Q0 }
    mcasp->regs->XBUF5 = 0;
. Y5 [: W0 E$ z! p# |    mcasp->regs->RBUF0 = 0;
2 H8 o* x% n" K' \2 z7 P" J  g9 J# K/ P3 _% K3 h4 b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   }4 O: r1 f9 |. m6 n( [/ M# \: H6 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 q, N& R" U  z  d) j8 P
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ |+ t, K  p% `! }- ?. v1 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 I/ ]* {+ @' q/ e$ A+ m

+ ]8 `6 l% X1 R& y) _( [    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ T4 h- v0 {" X) k+ t% T5 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: L! r' g, t& v% S% `( y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' j6 H! O% D; d8 t( o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 q. v1 Y% J2 r- g8 E# ?+ \
2 t& X7 I$ A/ [6 Q- p# H. @1 ~    CSR = 0x0000;4 L; Z. e. s1 C; {2 {' s
    INTC_INTMUX1 = 0x3d;% }! q# M. v# L. Q
    ISTP = (unsigned int)vectors;( a- y3 T" |" _
    ICR = 0xFFF0;  # J( x) h5 ?" C$ Z2 ]! G
    IER |= 0x12;  4 V- @3 ], s5 J+ E) i
    CSR |= 0x01;  : A. T5 U- Q9 i; z5 j/ r
6 b( K' X! r4 [' J% l

. g2 F: A: Q4 s+ P- W
0 t7 B& p2 y' @# x5 T4 `* A+ K还有就是两个输入输出函数:
9 d' a! K  l2 q) _- ~void output_sample(Int32 out_data)0 Y/ B3 g! D0 q
{
( t* d1 j: C+ t9 R: K5 w  w& x  AIC31_data.uint = out_data;  
9 p: y* x9 _( H6 a! m' ]: q" B  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 b: w* s/ }5 V' {; _- X; H- l
}
  w8 q- ?5 r  [% `. \1 a9 q/ p. C8 x- V9 P9 ?" t2 L
Int32 input_sample(void)
, q+ O$ A2 Q1 k+ `! o{  
, M* \  P2 B' v- o$ J  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; b, N; n9 G7 F' F1 B  return (AIC31_data.uint);
* ^2 j8 O2 e( b7 t6 C# H9 e. y}) ~* E, U" y7 H$ Z. }) A0 R* a
) {0 _8 _  I7 |7 J
分享到:  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-11 02:07 , Processed in 0.066169 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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