|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ Q) F3 ~- M0 H! G7 Q/ B& N2 [) s
main文件:' X1 v) L4 l% n/ t$ M r8 H/ a
interrupt void interrupt4(void)
7 n1 d" r2 s! H9 d" d% H0 X{. z$ L& I8 I+ z+ w4 I# B# Z8 Y `
Uint32 sample;
9 x7 t9 [0 b" M0 @4 F& K& K9 u* {; U; v% S
sample = input_sample(); // read L + R samples from ADC: `4 L) `! g" i. \" M
output_sample(sample); // write L + R samples to DAC ; i+ Q" L# T& K* Q, Z* N/ W5 k- F
return;0 \/ M4 L i& i0 C0 [. S
}
* J$ ?& R8 G. |! c' {! ]# n' L" q% a! d
int main( void )
, j1 a0 k% u# g, a2 C. q$ h7 i{, k& t% ? t/ B- O m l4 F
: A5 t+ W5 S( N' f* i1 u /* Initialize BSL */- B4 f8 n2 M& }+ `% [ t
EVMC6747_init( );
" y2 f2 [0 g7 x /* Call evmc6747_intr function */0 d8 b" d9 l" m
aic3106_init( );
/ J3 l* b% X5 l2 `+ R' l! n& P while(1);
( U' C. c& C# [% {0 \% G}0 E, U0 n! d# Z, e6 m
" h9 v3 v8 H# Q9 x. o3 H( m( p7 j" B+ U- S+ b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ N, a7 w2 ?3 i/* Initialize MCASP1 */* R y6 `; { ?9 u2 Z
mcasp = &MCASP_MODULE_1;
" R* I( g1 \$ J1 H' B. G mcasp->regs->GBLCTL = 0; // Reset
* D( P$ h4 Q/ {: Y5 Q7 b: k mcasp->regs->RGBLCTL = 0; // Reset RX: J% [. ^3 h6 {6 W- r6 a- f) ~
mcasp->regs->XGBLCTL = 0; // Reset TX
2 B5 H0 j7 R- Z9 ^3 [ mcasp->regs->PWRDEMU = 1; // Free-running
8 j0 v8 y) W% V+ f // configure McASP0 receive registers& f1 g; `4 o: W6 l3 H
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
! h# z! G4 Z1 v5 k- L6 P mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) n/ L- A1 M# n+ d
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* {) Z3 I9 _- z8 O4 @& e
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 c' E4 c1 c# M7 z, G: i4 ]' n
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" E4 d& [' Q5 y* t* e) U' f
mcasp->regs->RTDM = 0x00000003; // Slots 0,16 L3 _# Q: p5 P; G# R
mcasp->regs->RINTCTL = 0x00000000; // Not used! m6 c( F& ]' ~, B: Q% W, a: w
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) y* b5 \. g+ U7 ]9 }8 X
2 y# O' s0 b0 m9 u1 u5 i3 p+ o mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 H- A+ U4 `8 U z$ D
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 H8 d# E8 v3 \% _& O
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# H, Y# z$ T% K ?7 ^9 R
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ m4 O/ s2 E, q: H
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
! W! B. s9 u( d* c! r3 ~ mcasp->regs->XTDM = 0x00000003; // Slots 0,13 t0 j2 E, A3 c4 E
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 ~0 n5 X2 M* t mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 r! [; C9 [' B3 h5 M% O5 N
$ O. o7 S+ C0 a) n% }2 N mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) J' k+ W8 _* N
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 d) K# ^2 n. K
mcasp->regs->PFUNC = 0; // All MCASPs3 `) ~, Y/ F& ^! h( X1 p
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 Z. q5 Z: D; r- m& P0 [ i9 S
+ d( s W6 r8 S1 ]! ?5 a) f mcasp->regs->DITCTL = 0x00000000; // Not used
& C" b, M: f1 d* d' W mcasp->regs->DLBCTL = 0x00000000; // Not used
! T! m9 _4 C/ ~9 x1 U5 @3 \ mcasp->regs->AMUTE = 0x00000000; // Not used1 B" }3 \8 q: ~+ b) x& M# X
0 F* y# I* t/ F- \4 _* E6 F/* Starting sections of the McASP*/
% [2 b! N5 j& d/ p" o mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" L% T; Y, J+ \/ k! K! w/ @' h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ t8 @$ w; {; _! E; i& i; w
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 s5 a' u: [8 J" i7 {* L& c5 ^& l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# b2 L+ k- P' K g: j* T2 k, r9 `8 m/ h" L+ n1 W0 c2 o& W. j9 P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! y3 y# p5 X$ n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 X. g( K: b. S9 y8 g# u+ b; v+ B mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 _: K$ k( r) _ i- P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- T4 o+ A4 c3 s* A s$ D
% D2 h0 k( Q! G mcasp->regs->XSTAT = 0x0000ffff; ; q3 Q" U# j% r4 ?0 B S; G- o
mcasp->regs->RSTAT = 0x0000ffff;
1 m9 B, M% R. P: d0 j
1 P) I9 D- D. F; I mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' @/ q6 C) `( F& u) U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) `. p: A5 q+ [# `" f/ ~
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 m9 K6 h8 R8 [" p1 J+ g- O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 ?' `& n/ x! q& X
9 G6 U8 y: `) V5 `8 ]
/* Write a 0, so that no underrun occurs after releasing the state machine */
% p: ?1 Y. r( o4 X. X O mcasp->regs->XBUF5 = 0;( r0 h5 n* x7 m: g; y* x# f
mcasp->regs->RBUF0 = 0;
1 @& [5 }" L2 }7 Y5 u9 U1 W, R& _8 z' q) q& j; X
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + V2 `' _! o4 m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, Z+ q/ D" Z! p6 q) E mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# ^% H0 s) m# l$ ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 j5 r- a. ?3 [2 y, P' Q0 `6 B
# B2 T7 t- ~" R8 O9 b0 \. j mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 ?8 F+ N' L) `5 ~* R; `$ {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( \9 i& H6 ?6 F mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 N$ M5 }5 ]; i' O1 y& O {" A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 l! G- J5 _" G7 l3 I
$ k8 N1 ? b ^+ [" `* g CSR = 0x0000;
! \9 v. O: m1 I9 ^1 e7 V; E INTC_INTMUX1 = 0x3d;
8 D" T, y; I/ D5 R) G9 s( J8 ~ ISTP = (unsigned int)vectors;
0 ~0 C- `+ d8 c# r6 O ICR = 0xFFF0; & U! L" g* t) ?2 @( O* p5 b; W, X; V
IER |= 0x12; 0 @8 K+ y" k* Y' T3 V# J
CSR |= 0x01; ( ~( d5 I& z. ?: U
9 s, N, x1 H! N
' U9 G( ]8 k/ I: j
/ t! W+ n0 G6 L4 J# ]3 [- E0 e还有就是两个输入输出函数:3 r( S5 m( q A- E
void output_sample(Int32 out_data)
E9 ]" i5 [0 V7 O/ O* G1 e6 e{
7 {0 T' W+ r/ X8 j7 `" l AIC31_data.uint = out_data;
* P$ G5 c/ l' x" _% @* o( ]3 m MCASP1_XBUF5_32BIT = AIC31_data.uint;- J& ^; t3 t9 @7 j
}/ a8 y. r5 o6 S. `
, ~, T& } I; ^% Z W$ F) R/ c; n2 ]
Int32 input_sample(void)
% i: B7 D$ g* v* d{ & T0 C% b( V- y1 A+ ^! j" |
AIC31_data.uint = MCASP1_RBUF0_32BIT;- a3 N' A+ ^; k+ O- C+ R6 u
return (AIC31_data.uint);
g9 D+ }( ]5 U. w9 q, T8 i}# z& \, W# T- L5 [* h, k7 V
6 C/ _! W! S! [
|
|