|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 I0 N2 ]7 x, c
main文件:5 [; R% l/ E5 E! m. W- |+ r8 z
interrupt void interrupt4(void) 3 Q+ k# h0 ~( p6 Z0 p" d! F5 ~
{& O9 C* D* N n4 ~% q2 k7 S
Uint32 sample;' H2 M/ ?) Q* K/ c
5 ^$ B1 N; c. D0 j sample = input_sample(); // read L + R samples from ADC
$ O k5 l$ V* W% s output_sample(sample); // write L + R samples to DAC
; ~7 a1 c k( v" g: x return;
7 n) K7 q( N b# u" \}* Z' M; U7 @: |" Y+ ^
! u/ N8 N( Y. j# x0 c w
int main( void )
* B( W" |5 ~: f: l! G{8 C" c" y" {( j, C# }" L
& z5 M8 Z6 n1 h% N2 j9 M( A
/* Initialize BSL */6 Z+ l7 x- g, o7 T, n. N6 |
EVMC6747_init( );
2 x; O7 D; t. `& D B+ T/ h /* Call evmc6747_intr function */: l& ]/ A2 H9 ~$ n' u" I
aic3106_init( );
/ e) B0 t, F7 d/ v7 Q: [( U while(1);
: S/ f. t3 v: O1 w: Q}
9 B, A7 U+ U! q' S( z. P7 ]$ o; D' ?! ^
( F+ R) y" S4 s9 T. r9 oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
b# I7 a* T+ ^( S9 d N/* Initialize MCASP1 */
' N+ M4 ^! e1 j: y: T mcasp = &MCASP_MODULE_1;
* R/ }+ N; g; A mcasp->regs->GBLCTL = 0; // Reset( [: c% E0 n: g5 v
mcasp->regs->RGBLCTL = 0; // Reset RX
; r4 D3 I9 `# ]/ R9 ]* \$ r mcasp->regs->XGBLCTL = 0; // Reset TX" {9 n" Y2 }. Q; o. @2 s
mcasp->regs->PWRDEMU = 1; // Free-running: e$ V* H0 Q2 n& @5 R( r$ {. y# P/ _" O
// configure McASP0 receive registers
1 ?2 y' Z5 R' K* l* ~: q mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" G c& [) a+ o% k$ i6 e" {
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 W& b" `+ \! Q- a mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' M% G0 x/ E i: Q3 \
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- x* `9 \# c- y7 I# j7 b% C) s mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ ]9 w& D# R" m; L6 r: ^8 p7 K mcasp->regs->RTDM = 0x00000003; // Slots 0,1* @7 ?& X; k, [7 g
mcasp->regs->RINTCTL = 0x00000000; // Not used6 E9 c# ~# _+ G6 W- T9 S
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ X8 ^) ^. r; a, V5 b! c" ]) v4 ~$ b, |, h1 |( V$ J/ N# F W
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, w" v& P) w! B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! \* a/ l0 i" R" |5 q* x
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 V. j: y9 D+ z mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# \/ q1 Y. @- a% g# _0 A
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
3 j. L! h8 Y i9 K( M mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 |/ m* s5 @! R. s) e/ O mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
p* |0 W- A+ @% g& b5 j mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 h) t* @: s1 }1 ~2 i/ b* L) W: }4 v F7 s
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
2 e8 h% W% i* Z8 m8 P9 c! m mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
1 M' r% t0 ^9 y/ k' j mcasp->regs->PFUNC = 0; // All MCASPs
# `) I5 _" s7 w mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, z+ t3 H1 P# _ p& T7 q
0 m- \7 A6 v& q" q9 z2 g8 O ] mcasp->regs->DITCTL = 0x00000000; // Not used
' d$ h) G. {& z6 {; H+ e mcasp->regs->DLBCTL = 0x00000000; // Not used
+ o7 w/ ]0 O* f mcasp->regs->AMUTE = 0x00000000; // Not used; Z& p7 L/ M1 X7 J, w
( Y. x; Z' I7 M+ c- @9 ?; v* u1 A
/* Starting sections of the McASP*/
6 |+ A7 C5 V& D' o& R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ m Z6 o; y/ b7 }' R. Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; ^: [6 l) j. G) U* w
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; M+ H& U7 k0 `( `/ p* b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 r8 d% d, j2 k! G( f
, ?+ \0 w5 K- X& I- j
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 Q. J/ {2 D6 k2 \0 i, |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ ^; a/ t- X, ^2 l- a mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; o) |* L" M5 N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 e# n+ h0 |8 ? \8 c' a" g
2 M$ s9 H. Q0 ^7 ~5 p( @ mcasp->regs->XSTAT = 0x0000ffff; & }4 [% F# n5 z# k3 a+ Y
mcasp->regs->RSTAT = 0x0000ffff;
' n7 Y' @, B7 M' d( j7 L V! N% Y+ v) |# W4 ?6 P
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, M: f- f4 {. K# I/ M9 \5 R; F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. l& }4 ~: Y7 ] mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: Z* ^5 u+ N3 B! I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ m! b6 d( r4 ~+ y, \; T5 p
E2 A5 I! J+ v4 R /* Write a 0, so that no underrun occurs after releasing the state machine */3 a- L& o6 g5 |% j" Z4 D) ^; M* L$ P
mcasp->regs->XBUF5 = 0;. n6 \3 x) M9 |- K+ S: V. D
mcasp->regs->RBUF0 = 0;
# b' A# ] n% C+ Y. }3 i' u
) ]7 }- a, z$ L/ I# j1 ^5 f& [% H0 L mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% f' O/ C- p7 [* w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' U7 |' L% Z. j% i. Z6 X9 I
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 |& d4 F- M6 R2 z( W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 e! h+ ?6 J3 `* d+ R
4 }; Q6 w% ~" n5 H+ s
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) v* Z5 L$ {* @" w, F2 r+ b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' M9 D/ w' b' I% J5 E$ \
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 L9 }1 d! Q% ^& ?( D) |8 o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
p+ V8 z8 r% X/ Z% S: Y* I
' v; Z# E3 p+ Q2 c7 I+ v CSR = 0x0000;
" W. e7 j1 E7 n8 V' h INTC_INTMUX1 = 0x3d;
7 [! A8 y- s/ I1 h! [ ISTP = (unsigned int)vectors;* j# l& h, w5 Y" t
ICR = 0xFFF0; 9 B. S# z' W6 q: s
IER |= 0x12;
: n6 N% L F' ?3 |" L" x CSR |= 0x01;
& K8 W5 `9 x! [( `7 ^% T4 X/ V9 m( d% z- c6 e5 h
2 ]2 k1 Q2 d: G. Q& ]- R, a! u& V1 c: H: z. Q: j" o4 t- z3 P+ C! N
还有就是两个输入输出函数:$ R, R- [; x# b8 b5 @
void output_sample(Int32 out_data)! H$ p+ d$ d y6 J
{# X$ C0 i& d( }- @$ u
AIC31_data.uint = out_data;
, E8 H5 ~! n$ y& m# I+ b6 t MCASP1_XBUF5_32BIT = AIC31_data.uint;- H, A3 c3 |& m% y7 U
}5 E2 |- {: R6 \9 c3 n
- Q( E$ V h! ]2 u: |/ DInt32 input_sample(void)
+ v6 K( A* H6 @2 v6 E1 k1 k{
: G3 u, f' f. e# b0 j6 _ a: s# ] AIC31_data.uint = MCASP1_RBUF0_32BIT;4 ]( J$ v& V2 Z4 l2 {1 W% L% n
return (AIC31_data.uint);
! w5 J- l/ Y9 h}
/ K; w' V* Y0 }5 [4 t$ P2 _ ^ x: t' k/ E. Q
|
|