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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& g7 O5 _5 X& ?2 y# z2 k8 B) q
main文件:
  x" x4 q3 g, D6 Iinterrupt void interrupt4(void)  ' j' h6 g, }6 i
{
# @* a$ X: Z# _& ]7 A" {  `% q. A  Uint32 sample;
) J: V" G9 g# g
$ _. }; e5 }2 C, G( I9 M4 O  sample = input_sample(); // read L + R samples from ADC' \7 K4 r7 a$ x7 N( S
  output_sample(sample);   // write L + R samples to DAC
/ v- C6 N! K7 U! M* n5 Q3 J  return;& `2 u6 g# X; F. C" I4 w
}+ N  P+ O3 S- z8 U& v
2 g0 Y) D, v9 {2 b. f1 F- T) i
int main( void )' D, h& M( j* ^
{
* O* Q: c% I9 Z: f  B! r: b3 T. k; n% N! t4 U5 P- }
    /* Initialize BSL */
; }% U- Y! ~4 X5 f5 e6 L1 m    EVMC6747_init( );
4 t% d3 H* c: R) w- q        /* Call evmc6747_intr function */$ B- a, k/ j4 ]- B( u+ T7 P
    aic3106_init( );
! h$ d* Y2 C0 i/ w* V        while(1);
9 ~3 Y) b! J( o& ~6 ~  E6 B/ I" L}/ J: g! ?7 z6 k* ], q; w
$ K( E9 |. q8 _, B7 u

  R' o, f5 K# Q' ~8 iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- R( B6 c1 Z; F$ j1 K7 h/* Initialize MCASP1 */& V% `- W8 Z, R! X# Y- J
    mcasp = &MCASP_MODULE_1;
/ i* Y& X; v& G2 G% e: B$ n+ ~    mcasp->regs->GBLCTL  = 0;       // Reset
! O: O) \7 l6 H    mcasp->regs->RGBLCTL = 0;       // Reset RX
# c0 M8 ^5 B( z6 b* T. W; d    mcasp->regs->XGBLCTL = 0;       // Reset TX7 \. ~0 E9 H8 H/ h0 l! M: Z% Z8 C
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 C% {: h# G4 t3 Q- ?   // configure McASP0 receive registers4 Z3 v  n/ V% P; N5 k: [
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% M6 L3 r6 o" a4 P6 k2 w
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( X/ ~6 H: O! N5 g* P. z6 z; q6 m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- L6 j) Y2 {2 l* _    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' W7 B: Z: J: W7 I* O' y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ b  F4 e! \0 R$ Z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; p5 I5 N4 Z" ]1 h9 e0 F$ Q$ r    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 H  a' Y& W, l) Y8 i% w( \' ^9 P    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: D& g: Y7 F1 Q3 ?6 }$ Y1 a

6 ~* R, e) y& f( q5 u" r3 P& D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 V* w, `( h* e! ?- Z. }: n
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" u+ ^* ~( \% @8 T2 o; x
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: k  Q: P2 D. o    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 X  f5 O5 }% }  z  \6 y7 t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" V0 c0 G( i* b, `    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ b3 [' ^" V) e- C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 q3 g& k2 N9 v9 d
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! ^" A: w/ t  Z8 N- R) \) L1 |: P9 x
7 t$ Y- X) t5 }' B4 N2 s    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( \! |* C7 N$ y; ~4 R3 G! H- V! F    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# [( @3 a+ x  ^3 R2 C    mcasp->regs->PFUNC      = 0;          // All MCASPs
; h6 K( X- G9 }, J. K+ C    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 n0 v  K' a& U8 w
) C; ?+ ]8 {4 ^7 p4 R8 e1 m( m1 W    mcasp->regs->DITCTL     = 0x00000000; // Not used
' U7 e+ C0 c! Q0 P( D0 m' m    mcasp->regs->DLBCTL     = 0x00000000; // Not used; H$ o- Q) Q, K2 L, j
    mcasp->regs->AMUTE      = 0x00000000; // Not used' a& V* A( c% @* P6 X
. q) j+ z( I$ F
/* Starting sections of the McASP*/4 H: k2 s1 z8 k  D. L0 H' }2 _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * v8 a9 ?; T% h8 n9 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ u# [$ A0 i( D    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % T. S1 w0 R$ B1 y0 U0 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; t- }7 i* `: A  e* X# O9 {7 @" K! x, x! e
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! E) j& a) s1 |" {6 P! l0 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* [3 O3 Y& w! _( t/ I
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " k9 q& \1 b4 F' L8 H/ i" r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 j3 ~" e/ v% I3 d/ l6 r& H
1 W$ m0 P1 I' t% G
    mcasp->regs->XSTAT = 0x0000ffff; / ^  a# C+ _! G- R
    mcasp->regs->RSTAT = 0x0000ffff; # B  D: t% S( X8 Y* S
  A" V9 Q# u6 K0 j2 o2 M
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 n; ~1 w, s  }. p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; d2 @/ J# v+ T" x4 V3 J* `& A
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. [/ `! X/ z: h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" E7 @: G( r) \5 Q

/ A, A7 y3 c( S2 y    /* Write a 0, so that no underrun occurs after releasing the state machine */. B- t6 f9 o+ }  N! S# u- g* t% n
    mcasp->regs->XBUF5 = 0;7 u1 v. Y, I4 l8 l; _5 o& }
    mcasp->regs->RBUF0 = 0;4 H) f3 `! S) I
) A; f+ q* y9 H' |" E, P! ^1 j
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / O6 w9 \1 `) F: H" G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' o& A: \5 @9 X8 E3 S
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 s7 ]3 k  ?% T! W1 j! S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. U) Y5 i8 g- p) g' ]' ~! N/ ]' x/ @4 k5 g  v8 Q$ E+ c- b
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 z% f  |) a9 j: I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 I$ i4 }0 m/ r/ ~5 J& f& Z2 A, D    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 w9 c. K$ P, e* U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 M. W$ E' M: S/ d

! o# Y: y5 k% @3 ]* b    CSR = 0x0000;
! @* M' F9 c" [- ?/ d    INTC_INTMUX1 = 0x3d;4 j" d6 G2 n8 a, g! F  D% ?; @
    ISTP = (unsigned int)vectors;
" f4 {5 C% ^- R# x& H- l& A0 T1 M    ICR = 0xFFF0;  
  Y+ F1 U; K" E5 h    IER |= 0x12;  $ W( o! W/ B' k+ _2 Q( m
    CSR |= 0x01;  
0 u1 ?8 W+ k2 V- Q8 H, Y
* Z4 _" z! b  N9 {: K/ n& |6 E# q6 ^5 R* v  J1 u
7 J% x. d4 K2 e$ o: b0 \
还有就是两个输入输出函数:
  v1 v7 o9 ~0 Wvoid output_sample(Int32 out_data)
, b5 V: Q! Y) ^( k2 _- I{+ e- R  R4 X: V0 E
  AIC31_data.uint = out_data;  
" @% B, j$ ^) {9 C. T% d) ?  MCASP1_XBUF5_32BIT = AIC31_data.uint;) }( q( B# s8 h; e& n  W
}$ _3 u+ k! \& M) _
& I  ^" S$ i7 X, \, G
Int32 input_sample(void); Q, ?7 `; N7 L
{  
# Y* b  ~9 X* e  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 ~! k# q- ~4 S6 w
  return (AIC31_data.uint);; V, o2 J1 S4 w* [7 v5 h* G
}+ B. g0 [; l& U3 i4 y9 O

3 Q: k' i. m7 x7 H& W
分享到:  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-1-16 03:51 , Processed in 0.041009 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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