|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, n8 z5 A0 ~1 V9 s( B4 {. s/ V
main文件:6 T; u* C' |+ \: O3 L7 X
interrupt void interrupt4(void)
' t' G' i u; Q) i{
! C( n' y2 G8 s Uint32 sample;
- d" ~1 }. m6 e
& c" q8 H9 E! p$ T3 q L sample = input_sample(); // read L + R samples from ADC
9 U& E7 _3 i7 A5 c: Y) o5 o4 l output_sample(sample); // write L + R samples to DAC $ v. D" {- T" l4 W% p- X
return;8 d" y/ V6 W9 f
}6 J V8 E& @# w
9 r2 I. W6 d0 _% N/ l0 n3 ?
int main( void )
+ a- S+ Q/ h! h5 Z0 S{
; Y; u) u0 v* B$ L/ f8 Z. K& Z/ c( ?
/* Initialize BSL */
* Q% d0 L5 L, z, u" m* U9 \4 {+ o, \ EVMC6747_init( );
& B0 `" {& Y' Y; g /* Call evmc6747_intr function */, Q6 R6 ?/ t1 e* Y/ h1 m# c i! P
aic3106_init( );; p: j9 k9 `: R2 W) q% z3 O
while(1); ^. u2 O1 t8 [
}6 _ }* y7 W7 j" B3 g" P
) d( s; E- B+ U$ u2 f9 o! G" P' ?0 ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ Y6 y0 @1 F: [& }4 D
/* Initialize MCASP1 */# _$ b' w5 v$ X9 G' s
mcasp = &MCASP_MODULE_1;
2 t1 |0 q; s9 a% G mcasp->regs->GBLCTL = 0; // Reset
$ W- j" S) ]' ? mcasp->regs->RGBLCTL = 0; // Reset RX+ F( N4 K& J& V- a0 p$ D' d% `6 E
mcasp->regs->XGBLCTL = 0; // Reset TX
9 v0 r s0 L8 u y- s mcasp->regs->PWRDEMU = 1; // Free-running
+ t6 _0 `, Y1 @2 F) Q/ \ // configure McASP0 receive registers
4 C" j$ ]1 l# D7 ]$ B3 j/ V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% [" e( p! b, U8 o( W. l& d mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 G9 u( c! G8 G; H. u, b mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 q8 ^" o( O" z; C1 m9 L mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 z5 \. ?$ L( }
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" A3 v5 \# z- C0 G" I( | mcasp->regs->RTDM = 0x00000003; // Slots 0,1& l( P" p4 _0 P6 ~) E; I
mcasp->regs->RINTCTL = 0x00000000; // Not used
7 L) D: N9 N2 \: d mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 ?& S- Y2 {2 [% }3 Q
/ x7 V7 v" p6 G& g8 {/ C
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
i [/ O3 m8 K6 p, m# ^! |- m; @ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ V: d* c9 {0 E. L& k/ e mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 l% p9 i7 y" Q* y& m, v
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 d. P9 y8 I! S% e mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK5 l% n1 Y% y7 X9 e# _
mcasp->regs->XTDM = 0x00000003; // Slots 0,17 Y8 y6 Z* u7 ?+ y2 T `! Z5 }
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 s* N/ K) G- z/ I mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( t4 Z' r, a* S* o: D9 d# v* m, v. ?
! I0 ?! V: [+ Q" y. Q- N
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN5 b9 U8 k3 ]5 W8 x5 ~
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) b% f- S8 B! _8 L; O( D
mcasp->regs->PFUNC = 0; // All MCASPs
* Y# v/ q! C4 ] u mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' T- w g1 \# A3 k3 M/ D6 F- s* s
, E9 u& d5 H9 b$ B4 b& Z/ Q* o mcasp->regs->DITCTL = 0x00000000; // Not used5 ^. I3 e7 Z$ Y0 v. V2 x" r0 [% E
mcasp->regs->DLBCTL = 0x00000000; // Not used1 W9 o. e% y' ?% ?4 K
mcasp->regs->AMUTE = 0x00000000; // Not used/ x) _" p( E" t& Z7 \1 L$ ]
0 W7 R1 n: z& B/* Starting sections of the McASP*/ g$ c, K1 x4 i
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! f+ f9 A r; m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 1 X0 ^$ t* d3 d0 [5 V# ]- w. R
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) P+ v3 R! c( z# z. b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- x' E3 t( K9 [' n
* b. Q, S1 Y2 r$ c" @
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: q+ m0 J* Q% x+ z6 _0 _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 v* h" i7 E* T4 T" o. L
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 M, ^: P2 _, j! h! @' u; W* q* D" J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& X ?2 }3 n3 Q' x. ]7 H
( p* x0 Y$ k6 S7 i# i0 P2 e8 Z7 B* }
mcasp->regs->XSTAT = 0x0000ffff;
7 w) M9 Y1 ?* V c/ I mcasp->regs->RSTAT = 0x0000ffff; 9 j2 I5 x% R( Q1 a0 f r' k
2 {2 R9 \; X5 V) \; c
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* H8 q, y ~* i- A' G$ L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: q& W3 r: x! `: S, Z" S
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! c* j# h3 B3 \7 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 u2 ]+ p) O; R0 j# @% d9 E
4 b: a9 b% K( g5 R0 J /* Write a 0, so that no underrun occurs after releasing the state machine */$ O" x4 o$ k5 j8 H
mcasp->regs->XBUF5 = 0;
7 d, T, ^+ u6 o3 v/ ]7 F7 L- N! O mcasp->regs->RBUF0 = 0;
5 C/ z8 m x* D) |4 a6 R) {( b3 W& g, O* w* c9 u5 i* n
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) J2 Y6 l1 H% c8 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& z& x: }& r' @. S& t9 U9 u% g9 ` mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " F6 o' k7 Z5 a1 E7 ]. t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" e: D, n' R ~4 e
- c4 e# ~/ `4 I l: L mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; Z' A h4 a3 G M; B; J. M0 v4 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; ~0 p2 g- K/ q3 u% K* @
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' l. I; ]: g1 X" s% `0 B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' U' f- P) q# U6 S& [% ^5 h
( ?8 u' w& x( k5 V7 t: [8 x1 w CSR = 0x0000;
9 a* r8 N5 H: C# G2 R INTC_INTMUX1 = 0x3d;# M" _" i1 R4 e- L ?3 }" j
ISTP = (unsigned int)vectors;
' l0 B7 E/ `5 t1 b' z ICR = 0xFFF0; 1 Z" o2 C$ g/ m1 r0 N
IER |= 0x12; ' n, d! F' x# e
CSR |= 0x01; 8 t5 c/ g+ F& T) U
" h; Z9 w2 h* `# l! [- e2 l# ~9 r8 ]2 M
& `/ {( k' e' R6 O2 t: t1 q' T还有就是两个输入输出函数:! F8 ^4 x! {( z9 K6 q# s0 q
void output_sample(Int32 out_data)
- b# O7 S8 Q" v{
# H* s+ h/ i. ?9 @* G; S* E2 l9 N AIC31_data.uint = out_data; 9 m' y `6 o2 Q: C& Q' K& U
MCASP1_XBUF5_32BIT = AIC31_data.uint;, Z# f0 A2 H- O; G
}
1 n9 s9 j& c' a, B" t+ m/ @8 Z$ f9 S1 q; c ]. X' `7 _$ b
Int32 input_sample(void)
6 e- S$ S3 M4 o1 N4 d' m- h# a{ ! G* E4 @$ Z* S: x- {
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 Q/ p0 R- p+ t: m
return (AIC31_data.uint);8 M: x8 Z: G+ `
}; u& o& V9 q/ n; `. m7 g) x
2 Y7 p# O! _) ^6 C! `( D3 Z6 n
|
|