|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: o3 x7 Q, a3 G6 F, d$ ?5 \; v" L
main文件:) g" M9 H0 U8 J5 X) @
interrupt void interrupt4(void)
" _9 [) F( r' l; S3 K' A{/ Z1 L# T: S7 |0 m
Uint32 sample;! Z0 K0 t+ d2 a: l, Y5 j& d0 M% D
9 X' m- S! g3 \8 d
sample = input_sample(); // read L + R samples from ADC
: Z0 I& @& c3 z8 ], T output_sample(sample); // write L + R samples to DAC ' O! h# R6 g, B4 R* q
return;
4 }/ P+ }- \; D}7 ?& p' w4 ]+ Y1 w2 q2 E
- O. D8 @4 W" u4 G
int main( void )
/ h7 k* S' k& ~. j+ A{
1 { z6 A9 Y S! P( c4 _: g* I
- u8 G. ^0 ~: w+ b$ s& a /* Initialize BSL */
3 W7 B6 H$ I3 N$ g4 A& G, W EVMC6747_init( );
* K8 |+ l2 x$ Z; f /* Call evmc6747_intr function */7 z) x4 o8 ^9 M. \% t4 |/ _4 F! H
aic3106_init( );
) y6 o! t; v4 \! w5 T while(1);1 P9 S9 j% X3 P% u' I
}
9 P, J5 d0 a4 h7 A4 [: i- k' }" d& F! d8 f6 q& n
" x4 O" k3 d. t/ a
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! L6 P2 A4 `1 o' G& i, `! `$ v/* Initialize MCASP1 */
; f. J7 O& Z& m+ x' y1 N mcasp = &MCASP_MODULE_1;
( ]; l3 Z7 t& @. n7 h0 ^ mcasp->regs->GBLCTL = 0; // Reset
: X; B9 y' s" k v8 I/ d. Z mcasp->regs->RGBLCTL = 0; // Reset RX6 ]- f$ \6 v8 ^4 {2 x8 c) C
mcasp->regs->XGBLCTL = 0; // Reset TX3 }9 z- I& ~! i$ ], w7 S- h
mcasp->regs->PWRDEMU = 1; // Free-running; F- q7 w; k* P- Y# e$ N
// configure McASP0 receive registers/ r& \4 H& }# M1 a5 N: s
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
6 n6 {8 f V4 K" m" _; Q) X mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ I# c% l) ]/ k, C mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) J! P% x% \& \' g
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ S, o1 @! R. f mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 n2 V+ `2 Q! S4 b0 W mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ m& q3 ?7 o2 I8 n F mcasp->regs->RINTCTL = 0x00000000; // Not used4 V5 Q: b0 ~, A' B" X
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 e% U2 n) \; W: k
6 }+ L& q6 Q5 q4 B mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% s, B3 m0 f! \6 k7 [3 Y; B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( v* i+ Y$ l+ k/ [7 v mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ e" Z' j# Q; f. a mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 ~5 X' `5 V4 i7 ~8 Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 U" D5 \, Z( F# z4 h1 ~ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( h" X* ]7 f& v mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ F# g! d% |( L1 X, @8 P" J& ` mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ U4 {0 |5 E. o" { Y) }- t
0 y% x5 {( _2 J4 T mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 T3 s! D/ @: z: r; \ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; U1 }5 k: \5 q. Y mcasp->regs->PFUNC = 0; // All MCASPs
3 @' I& Q1 @; ]8 {9 N) p mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 R. z4 @- y4 I- d9 S# J
* `% {. F$ a) E/ C2 N& M6 v4 \ mcasp->regs->DITCTL = 0x00000000; // Not used: T1 V0 ?5 Z: P' W+ C' H
mcasp->regs->DLBCTL = 0x00000000; // Not used
; L6 G2 e: ?; C4 p mcasp->regs->AMUTE = 0x00000000; // Not used
* C- J& k! ^! u2 T
% b/ B% x* z4 T1 C/* Starting sections of the McASP*/9 ]* Z: H; f* Q0 ~
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" m1 l3 Y: s# w% m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 J9 H6 K# j1 N8 M/ Y; s5 I( z/ e& X
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + Z+ S: l5 O1 [9 G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: `4 `* W( {4 u8 {$ f0 c. y* ~$ T u3 q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ s/ x v) y4 g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" L. ]% g! U' g Y# K. r
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 w0 d% B! J1 Q8 u, g; M' W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ T4 Y4 y" h& y) V
- \. o7 T$ R4 X' e mcasp->regs->XSTAT = 0x0000ffff;
1 S J# m" Z; z$ [! J+ Y% K mcasp->regs->RSTAT = 0x0000ffff; , f6 x/ g1 a! U& }: I
% N! s( t' V# ` ] mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) x( x! n" t0 }$ L7 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ L# q) d3 f8 w! ?* i$ {, Q7 b
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 H6 z$ N2 a. {) s H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 U3 k; Y O( |3 L Q
2 T- l* z f4 g2 b2 } /* Write a 0, so that no underrun occurs after releasing the state machine */
* B2 V% p4 _( K mcasp->regs->XBUF5 = 0; E- h1 _2 J* A# K
mcasp->regs->RBUF0 = 0;
9 f3 z& W/ m7 t8 H, q" G; r! O, O
/ P5 }1 n: b2 X5 M4 P) M& e, c mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ G F8 E7 Q$ [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 s+ X |2 k. g
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 T0 p/ K+ S9 b" C' C1 U) y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& }; y9 ^" E: F- K# q3 }
3 a* S8 B* \+ V8 _7 t3 o$ g% v mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: w8 g2 h% I! h7 S" o) S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" ~0 Q' I+ {0 J) p: B( O* P) @; f
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* s+ a$ b( G2 ]3 ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 @/ g4 [% F& X
) u7 S8 r4 A2 e* w' y( h
CSR = 0x0000;) r1 H/ w0 V3 ^# l- G2 z
INTC_INTMUX1 = 0x3d;
- U( h: ^" B+ @3 b( X ISTP = (unsigned int)vectors;+ @, x8 i! v+ l: W4 x7 k
ICR = 0xFFF0; : _; _7 f/ }. S" W) B/ c
IER |= 0x12; / x T- P$ p$ z \# ^6 Q }, s ]
CSR |= 0x01; 0 e( r0 ~3 \3 B
) N& m( ^4 o6 |8 B1 \) n
0 P& M3 C; H* k# W. R! ?( o) d- [) {" ?1 K: R, V
还有就是两个输入输出函数:1 g8 |* n+ Y+ L+ O0 F
void output_sample(Int32 out_data)
) W% x6 l" }. @: A Z0 U2 c{
* v" T! R, K. y AIC31_data.uint = out_data; ) v* V( M( O0 O8 k9 y6 o+ S7 d
MCASP1_XBUF5_32BIT = AIC31_data.uint;
' v9 L: k7 f, A7 i$ ~. u" B}
2 I4 i& E- \! X& p& o. ?7 B' k
! ]& L5 [( |- `; I* A$ ?Int32 input_sample(void)
* [; G( @5 ~ o5 E{
9 ^" _! ^8 l% h* T AIC31_data.uint = MCASP1_RBUF0_32BIT;
& A! [9 N- Y5 }* c return (AIC31_data.uint);
7 @( Y& E# {9 N. z}2 ?! V7 i% P1 ~* D5 {) o
/ l% k6 I1 p+ }: E2 C
|
|