|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" L5 ^4 A+ t8 ]) z& J
main文件:
" j8 |0 c+ y" y1 Ainterrupt void interrupt4(void)
$ t1 r8 ^2 i! M4 g1 u0 k7 p{
( `8 l0 Z) Q0 {2 N' C Uint32 sample;
0 f2 l$ E: n6 H# I: ]2 q6 h% R3 s: h
sample = input_sample(); // read L + R samples from ADC
6 N6 t: c5 L4 p+ q+ M0 j output_sample(sample); // write L + R samples to DAC
6 b- A! H# w3 H, V* N* n: ?7 ]: Y return;
8 S7 ~& N7 p- a0 u& G}4 k% g1 k+ W- ]0 M6 h
3 z( c/ Q8 H: {int main( void )
2 w1 \8 l2 e) m: E7 [{
O' E8 ^% }6 S8 |- F' A
- S' y: @' q/ g1 h7 B7 I0 n /* Initialize BSL */- m7 { s! G' a4 x4 c1 V
EVMC6747_init( );
4 f4 X7 j. X( X9 j- D% t /* Call evmc6747_intr function */
8 d9 b, f" n/ h; W3 u0 c aic3106_init( );
B6 g# n+ W, `4 L while(1);
: E4 {0 n8 R' N0 S}! h& Z2 S6 d7 i/ V
& S8 K+ E6 B5 }) j/ z5 L" ?0 I( ~" `: W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% l; a' @: t( q3 k+ @- z/* Initialize MCASP1 */( C4 Y9 j# O5 w' j# X; A; `. Z
mcasp = &MCASP_MODULE_1; s/ t% S+ e$ d8 Z6 i. E
mcasp->regs->GBLCTL = 0; // Reset- t* v' `$ L5 j: q U
mcasp->regs->RGBLCTL = 0; // Reset RX
[( C8 T( ?) t5 a% ~ mcasp->regs->XGBLCTL = 0; // Reset TX; @; h- a& k1 [: f
mcasp->regs->PWRDEMU = 1; // Free-running
5 U+ U# u6 m0 L# |; u5 h // configure McASP0 receive registers- F. Q4 D+ H: l7 E9 J. x1 w
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) G) S9 Y3 ~, W0 W
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ M$ N. T/ m/ G, }1 R4 t" b
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ Q" Y0 c2 E2 R* T7 q! c, |
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& c7 e" v# ^+ n8 [6 m0 x: D! |' @ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
1 \/ J( A; q6 K" S mcasp->regs->RTDM = 0x00000003; // Slots 0,1
% n5 t% g( ?; S mcasp->regs->RINTCTL = 0x00000000; // Not used: L/ [0 U8 V" p4 T' l
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, l1 q U0 Z4 ~) z' T
4 X4 v6 p6 @4 q* o1 H. }
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 T; _& j' J5 T* p8 z v9 X mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: H* N8 T8 I6 s& N
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& A6 f% y' \9 u mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
[+ C8 q* h- q: l7 d; ~ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ \, D4 F1 N: c) w7 p mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) o& `) f% L2 T6 s% c! ^$ @1 {- S mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit g3 m. O! j6 v/ q' Z
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 M/ H3 L2 E6 C; i; Q( |3 B4 a+ T" x7 e& _; u4 U
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 e5 z: w" e, A' \ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- W! e6 p( a- r) M2 k
mcasp->regs->PFUNC = 0; // All MCASPs4 _" ~) h$ J5 d9 x a
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 a0 b- G8 R+ _4 P7 m
) V: q" B' R2 I9 D% u; P mcasp->regs->DITCTL = 0x00000000; // Not used
+ N2 K7 a) O! T6 W% B2 U4 k' ` mcasp->regs->DLBCTL = 0x00000000; // Not used
6 X+ H: O& ?- f+ d [ mcasp->regs->AMUTE = 0x00000000; // Not used. H, D9 i6 D; h9 l+ f
% i& J3 ^. j' ?( T. p/* Starting sections of the McASP*/
7 s- c3 G: g- E& R3 W9 o mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 l& `3 q4 ]% G1 M( w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! _; o! W' E# v* X9 v: L mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) d1 c0 }. v9 `5 c! ?, \7 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" i5 V6 f+ r, T
" Z6 h- I" ~1 O1 J: h. C8 u mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; S, [# | u) r5 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 @8 S e1 m8 {6 r mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 A' I9 g1 P4 y. D( ~. s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 q) ^3 p# c7 g3 ^
2 U8 |& V' [% I- u5 o. S- c9 E
mcasp->regs->XSTAT = 0x0000ffff; $ T% E( k8 d) w4 `4 I a) L! { n
mcasp->regs->RSTAT = 0x0000ffff; 1 I+ S$ [- o7 k5 c7 \% M
- f& g7 o$ f: |) L& T
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& x3 l4 x b7 u8 L# `2 B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ Z& b) m' ]; K* K2 I2 _
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 s; e p8 x$ I1 _& Q/ x+ i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& g0 s' [" ^2 }+ l/ x. T4 U
: P7 i- H- R3 H! F) c3 } /* Write a 0, so that no underrun occurs after releasing the state machine */
$ u8 i/ Y/ Z( R! D3 _# b mcasp->regs->XBUF5 = 0;
" B" \' Q9 M% G mcasp->regs->RBUF0 = 0;2 a1 y7 o4 H7 T1 m
) B' H v/ _$ I mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 t2 p8 F( l1 A! d$ k3 [$ W+ Q1 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 B$ Q: J! Q6 H3 q) V/ [) r' `
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; h0 ?5 @5 e0 R) H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 n$ L# U2 C% l7 g. ?, M
+ F m- y5 P# ^& `, U o
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 o: q, L3 T$ r+ W% r" Z0 x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ \* a8 g' ?4 a mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 T, @" D$ k- ?$ I( ~ S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. X7 E, q/ f1 _: H5 W1 |7 h4 X
' Y2 x- j$ G% T3 z7 N) ]' i
CSR = 0x0000;5 R/ E) X& ], f) Z
INTC_INTMUX1 = 0x3d;
! R5 S9 `4 u V$ r& i ISTP = (unsigned int)vectors;, s' C+ ~ o, o
ICR = 0xFFF0; $ j/ Y' U( _8 J% D' U1 T; A
IER |= 0x12;
" D8 u% i! g0 ? CSR |= 0x01;
2 ?$ l/ C) j7 ? [( N0 u; e3 `8 ~% b1 @; D p- r
% y( Q1 s; t% |" }( Q
8 Z o* N# g7 S5 [/ l1 |& X2 x还有就是两个输入输出函数:4 l$ N4 ]5 Z8 h" D/ w) K
void output_sample(Int32 out_data)
5 p7 T& L7 k# V* I1 E8 I# m{ H0 b N! U% Z l' d: _$ I
AIC31_data.uint = out_data; % e4 Q2 j. T: a, d+ ?
MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 B L) G, I) I2 P: o! {4 y}; W6 V5 k* O g, y l; M
# g: q+ J) {9 \- z7 {Int32 input_sample(void)# S/ ]. A+ O. I$ y
{ 3 Y+ x2 [& z2 ~. W d3 X. T
AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 }: C* Y, \4 A F( O" x, K/ s return (AIC31_data.uint);) V6 C, {; b" h: J# K" [
}
, d) g6 @. [; z" h1 n0 C; q$ a+ w, ]) N# K7 _# D; M) b4 h
|
|