|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" k! i7 z: J* l/ @1 P5 \- t1 Nmain文件:* }4 `' k6 R7 t& B; C* f/ d
interrupt void interrupt4(void)
B$ w! }8 f# C{6 C( I6 w/ ?+ ]" x2 Q# D
Uint32 sample;
. H+ C1 L9 e0 W
# v/ e9 [ V5 T6 } C sample = input_sample(); // read L + R samples from ADC! o: |6 ]; O# Q# @" m, f
output_sample(sample); // write L + R samples to DAC
9 r' m8 b& ?3 H return;
* q( M* }$ x" ]: C& V}* G1 c. \; ]: G8 [! Y
3 R* l1 s f! o+ F3 {) Z& ]7 rint main( void )8 _4 A+ F( e( r. c/ w; H. u4 `
{
& R5 W- p8 {, }( }: z4 o, W5 X2 g+ f- m$ K' k" a) ]
/* Initialize BSL */; @. J3 Z7 B7 c4 Q
EVMC6747_init( );
2 S# P8 X) _7 F9 d8 F3 _6 S& B /* Call evmc6747_intr function */
6 p6 W: J4 Z0 d3 ^9 t' i- p; v+ [ aic3106_init( );
& ?& R, Z4 J1 V3 `: g while(1);% f# w- L; g* y/ }0 c/ M
}- D4 {, Q2 Y& f8 U: R
9 s7 m4 }9 ?: ] X( g4 {
7 N; D/ ]0 U X2 Yaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 Y7 {1 B' x8 Q4 R, f: M' l* g3 ^6 s/* Initialize MCASP1 */
* l; l& Q3 ?+ n4 u! h6 a% c% | mcasp = &MCASP_MODULE_1;( Z) k5 U* F2 n9 r! `1 z
mcasp->regs->GBLCTL = 0; // Reset
7 l3 d) e [# u6 c9 d% X3 _ l0 b mcasp->regs->RGBLCTL = 0; // Reset RX
+ W3 u# e2 a* D7 n2 ~; i4 [6 ?# e3 @ mcasp->regs->XGBLCTL = 0; // Reset TX) M$ t1 Q: M8 ~! A
mcasp->regs->PWRDEMU = 1; // Free-running
' R `8 A* a( t // configure McASP0 receive registers
2 E8 ?. R6 w8 M8 w mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: N8 c' S0 I6 h- W! C' E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' S3 _& d; g/ I# n( N mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& F/ \. j. i7 W; v; K mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% G! k: ^9 l2 k
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
; Z# ?! E& s! d mcasp->regs->RTDM = 0x00000003; // Slots 0,1! q. b9 m3 I9 f" N& K7 {
mcasp->regs->RINTCTL = 0x00000000; // Not used
$ q$ V$ C2 Y: A2 b mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 E/ `( Y7 F. ^' N: f) p
' P. r5 |: O# p mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 i& D0 {6 n# k% n
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 T9 s6 x* i! U/ c
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) Q' g1 |+ {, D' M5 I7 g
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" R: g- i e; ]/ n1 M) ]8 X E* ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 i8 |& U# e2 j' P
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
& u6 o |1 Z( ` mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ F6 |7 y; M" B; A& R mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ u$ ]- I4 y; j) t. \
% U A [+ V. N, l0 S% T* H3 ~ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
# o2 H" |( j4 k mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 k6 P, P8 l; u) ]0 f mcasp->regs->PFUNC = 0; // All MCASPs i" f: K- |, O/ _4 K
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% Z& I8 Y7 S3 v3 |7 W' D
: l9 D' M" y0 |) {- [. p4 X# q: [9 K mcasp->regs->DITCTL = 0x00000000; // Not used
1 J" [1 r, I5 h, `3 h/ R |+ u mcasp->regs->DLBCTL = 0x00000000; // Not used" [4 \$ y4 V! ]* I! D1 S5 ]4 K
mcasp->regs->AMUTE = 0x00000000; // Not used
% ?2 E& o( N: }! |3 v
( H% B F; R4 h0 O) e6 V/* Starting sections of the McASP*/
$ Q; N' t; @1 @. |6 M. @7 [( B mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) M7 U3 [- ]4 }8 h6 O. e. ~/ P( i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 9 ?8 `2 _" C/ U6 O7 t p
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" X8 ~5 K' P$ l4 K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
c# C6 i5 n0 J# J6 H& n' P& u" N8 L% g5 D% S
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* i' O$ M# y1 N2 w* ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 d; O, l' v, D; Y9 B3 v1 q- W mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 g7 K6 D, i1 I; I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 k3 ~( F5 E; d' j" i! p& I5 Z4 t
" Q' m: g2 [& i
mcasp->regs->XSTAT = 0x0000ffff; 8 Z9 Y& G" U; u
mcasp->regs->RSTAT = 0x0000ffff; + ~9 \" V% W0 N4 J( r& ?
2 r M* ^6 f+ V$ b2 q
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 i% l2 }% g" y! K0 i1 _5 n" x0 P( | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 G$ p6 W! l/ \, \1 ~3 g
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 i0 b% O% Q7 Z* _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! i9 x' \0 R3 h* d1 l( s2 l4 v3 H" s) E% e* q# s: B m( t$ a
/* Write a 0, so that no underrun occurs after releasing the state machine */
@/ S$ B0 l! v) I9 O* G( v* G+ x9 w mcasp->regs->XBUF5 = 0;+ a: o, X# v$ k4 A0 Y% l1 s
mcasp->regs->RBUF0 = 0;: v/ Q0 W8 u: R- m. F
% N& G$ q6 t' X$ B, Z7 _
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ @" _2 u0 A. m7 b+ a' T5 r- N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 R) u* i6 x; s& v# w* Q
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 r8 B5 O# }/ E- Z$ c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& `6 x- @, q/ u9 x' ^5 I
1 e5 {& N4 |1 x4 Z) I+ N; y9 L
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ M% |4 L5 c2 }( V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* h9 ?3 f9 L& z6 L- k% m3 R3 p mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) ~) U( Y9 p3 k6 K1 s; B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! m: O$ j/ u. b, ]" @1 j
8 Y0 {2 |/ m: M* q Q CSR = 0x0000;3 X+ Y/ y0 j/ X2 `& b
INTC_INTMUX1 = 0x3d;& `! h; u/ k/ f: l+ z
ISTP = (unsigned int)vectors;
5 H; o* {; U" j! M" e2 B" L ICR = 0xFFF0; 1 N0 z, F& ^* R# k! k( t% s
IER |= 0x12;
; D5 d4 m0 t3 T6 [5 ^& x5 g CSR |= 0x01;
* k% o5 N3 S4 O% E# V1 l$ ?
# W5 L7 E& S* e- |( U
5 o4 K6 K _) q n( s
1 }0 q8 Y' o( \5 A还有就是两个输入输出函数:
3 }% w0 r9 c* O3 G3 [void output_sample(Int32 out_data)- U* f: n, @. s( M x9 R
{' e \1 _# y' F$ N9 O( [
AIC31_data.uint = out_data;
9 N2 N Y' e C$ u3 a3 S MCASP1_XBUF5_32BIT = AIC31_data.uint;+ ~! i% }% R0 r/ A
}" B" V$ k2 j5 @, f J; _: B' i8 ~
6 S& Q3 Y( U) V8 b5 e* M. MInt32 input_sample(void)
: x& O) X; |% @2 L2 U7 x" z) Q{ # ?5 w8 a# e. e, Y- o
AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ I. ~" A7 o$ R& O) z: I2 {. d2 J; S return (AIC31_data.uint);. D0 J8 @. Q: d; M1 H
}3 Q1 Z- ?, M% K4 w
. ]6 G# ?6 n4 ^3 x/ }' t |
|