|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" G4 M& C* r3 K2 \3 |! e; Imain文件:
F8 T j4 V) y# b- l$ zinterrupt void interrupt4(void) + z0 S/ }! y X# q
{
8 V0 x; ?7 B* l/ |# c1 G: T Uint32 sample;
" S* W0 t9 D7 L" o4 F
- q% ~9 n* a; t! ?( t1 L* ~6 ~ sample = input_sample(); // read L + R samples from ADC3 ]8 O$ I3 K! ^
output_sample(sample); // write L + R samples to DAC 9 s, F) F; [# ^
return;- w9 Y, W$ |4 H6 `! G3 F
}
5 S6 r/ k& y# q: e a: o. X: ^
3 t8 i, h8 ~- C1 G: n. P7 f1 x& t% Aint main( void )
! u* W: P/ A8 q' R- C* ]5 }, b{
! P$ n# o4 K, b0 m
$ ?( \+ N; r! k9 n" Q /* Initialize BSL *// p# L7 B0 `5 J! ~$ K. j9 U
EVMC6747_init( );# O% p( L6 Z# [" c" l2 @2 |+ r! d
/* Call evmc6747_intr function */! w' l+ x9 ~% W* [
aic3106_init( );
- E% m4 D. C& ^% \( ]# f while(1);
: S y, F4 U9 e8 Q5 W# s0 R}( C9 B8 g3 o+ o0 d; G( C. @$ a
. e3 f7 C" e" E
8 l- m; @, o2 H, }$ c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ u/ F+ Z. [ s& Z) R7 R b/ G/* Initialize MCASP1 */8 v3 _( _& h8 m
mcasp = &MCASP_MODULE_1;: q% S* g8 \/ \
mcasp->regs->GBLCTL = 0; // Reset
F- B" m: B" E+ m7 y mcasp->regs->RGBLCTL = 0; // Reset RX, f2 W/ S$ A# M+ C3 j6 a# h" a u& R
mcasp->regs->XGBLCTL = 0; // Reset TX: t b# L# H) I5 ~
mcasp->regs->PWRDEMU = 1; // Free-running$ N/ D$ z7 g! z
// configure McASP0 receive registers
* ]" F( _$ d: u# J/ v9 }0 H/ I mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
7 x9 |5 u- K4 U" X1 S- m. @ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 F0 T. X5 b U' q9 D% z( x
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 k: {6 h; `* x mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ @( u9 J+ [- D mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 p$ b$ r: Q) l6 q3 T) E mcasp->regs->RTDM = 0x00000003; // Slots 0,1
3 a4 M9 R" K5 c) U' @ mcasp->regs->RINTCTL = 0x00000000; // Not used
+ o$ n7 l: U& r$ ? x: c mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' `- ], m7 e5 j I, w. G e
% j% K" Y. f% ~! l mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
8 `2 P+ K# m! s9 Y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 b3 O( v/ ?# r$ i8 r
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 ^& N9 y: \! `6 e; c) Y3 T& j mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; s9 _0 [' y( y7 B- @0 f
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- f4 t, r: J4 a
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( E" w* b( i# J3 p( s mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 O, ?1 ]8 m" l mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. S* y8 y; s }- Q* k5 k
9 d) L& x T# e: C/ s; x% O mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. @% u+ ~6 H. F mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 V5 E5 S/ D# G+ W% V, t% l0 T mcasp->regs->PFUNC = 0; // All MCASPs. F3 `- m& z+ X
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* E( \" l- O! E" X- A8 x+ z W% I; b. h
mcasp->regs->DITCTL = 0x00000000; // Not used! U s4 e0 V7 L9 M2 ^5 l N
mcasp->regs->DLBCTL = 0x00000000; // Not used
# f6 S- B% _' x& C" X3 @% c2 x mcasp->regs->AMUTE = 0x00000000; // Not used' S L6 u5 r% ^& x. |1 d
. p. O) {! V1 S0 A* C# X/* Starting sections of the McASP*/
' J6 ~) J/ }6 s/ W$ E9 S5 F4 D) c mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & X$ ^2 ~1 G% }: s3 J0 v% s0 @8 n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 Z$ p7 z# j+ i mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 W& U) P. D1 ^( B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 t: |( r4 t' F+ }
' N, b2 I- p& ^0 O0 @. g7 h. ? mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ O) D# j+ J1 @0 U5 F+ }/ R% o3 i/ K B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 F9 x# M: M7 F$ v mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & B/ x5 j; e2 Q# E! m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 M9 m u, a6 a
0 `* S8 V8 [+ A) W" w" t2 Q mcasp->regs->XSTAT = 0x0000ffff;
5 T" `7 h* Y* v0 n& ]9 W/ A mcasp->regs->RSTAT = 0x0000ffff;
5 i- P2 D) w: d' I5 Y! Z6 W
/ f4 o4 Y% F+ x/ k' z/ J mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) Y8 m7 j7 \- \( P8 c6 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
Y, m8 m9 Q+ I( n1 f I mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 v% p3 S4 Z* d% b0 p" W: N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 N- H) h2 O, p N2 n5 ] m( ]
) X* N/ @, y/ {
/* Write a 0, so that no underrun occurs after releasing the state machine */
* D# r3 F& z- J2 a- W mcasp->regs->XBUF5 = 0;
( }( r' U9 B" O) f! ? mcasp->regs->RBUF0 = 0;3 B6 g1 r. b/ W1 b8 {5 {5 ^. A' q6 Q
5 Z2 Z, M4 S R6 t4 \# V7 K6 j mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , \0 o* S. [2 }0 C" [/ o* u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& k0 [4 s8 I. v4 C. u
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , _/ p" [2 a% X4 ~/ t7 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, c0 q( a' @* G7 g) A( e: ?* z
" z* H' n8 \8 B mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 G' s% \, d# z e) y5 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 A' C e0 G/ E8 T$ D/ O mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 z% ]5 j3 U# i3 g4 P# e9 x7 k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* j4 q. Q% v. v4 g; c7 k3 ]% u. o6 l
CSR = 0x0000;: _" Q# c7 @& l- x5 B0 m
INTC_INTMUX1 = 0x3d;7 M. _7 F% _# o8 ?' l
ISTP = (unsigned int)vectors;
; ?6 @9 z+ w$ [& X5 q4 Q ICR = 0xFFF0; $ ?$ ]# N5 {7 F7 i
IER |= 0x12;
, M; P# v' e1 G8 x, J$ I" ? CSR |= 0x01;
) z& X' T# T3 I# X7 Q
( D+ t/ S. ^. h# v' t2 K
& g/ d8 ~: F$ ^! w1 _2 {
6 C- a. n. I& I9 Y* D还有就是两个输入输出函数:3 A) s O. {! I' D9 r
void output_sample(Int32 out_data)
9 b9 t$ l! ]0 L% t9 }7 m. K{
: k- E1 K, D" Y AIC31_data.uint = out_data;
2 l }$ U; a+ m# n p; } MCASP1_XBUF5_32BIT = AIC31_data.uint;
- d0 L4 b- G" K: M* F- C! L2 F}% p. T7 O& j5 X1 ` W$ G. [" \ n
. e3 }+ Y7 m/ o3 F. z' H( ~
Int32 input_sample(void)" [( C9 n) m5 @* k, @
{
- @6 T3 C' f4 V' o, L! {) }& y AIC31_data.uint = MCASP1_RBUF0_32BIT;9 Y# x$ l3 F8 J4 h
return (AIC31_data.uint);
( }" K g8 a0 ]# W- X; X% U}
% E2 h+ n( p, j+ g" d! f: T9 ~. {" |& g, d) u% i
|
|