|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( q( \' D* s( b4 d* u: B/ Dmain文件:
! z8 V0 {3 f0 U/ ]% K3 |interrupt void interrupt4(void)
2 @6 y! J8 d5 B+ o( P; J{' W+ y M+ }- O
Uint32 sample;
9 M3 d1 _, b. v6 b9 n# e9 e( x6 K& y! l: b" p! g4 t! o
sample = input_sample(); // read L + R samples from ADC
) A5 p" b# |& D7 [4 F+ B output_sample(sample); // write L + R samples to DAC : y; ^& s0 ?6 i0 s4 ?
return;! h5 |3 _# V7 K/ K, T
}/ ]- K. Q5 q, k" |, q! e
5 w8 h- u+ Z# o# ?6 T8 S+ h
int main( void )' W: J; B6 j& ^8 N! y1 g
{
/ y; x% p: V. ~( [* W) E3 ^0 z5 D& Q. p3 m8 J6 {! p
/* Initialize BSL */' s2 j# u1 x1 ]0 j* [+ d7 w; O
EVMC6747_init( );
9 o, T6 `: P! R* T /* Call evmc6747_intr function */. ?: X- [" A1 v6 P2 }
aic3106_init( );
, M6 @- S2 i5 {( M4 p' D while(1);" T+ t. `9 B- {5 k
}( X) g) k% U% h9 I6 _
8 L6 a* ]4 d1 i# I5 m) h: _! v. e) H/ L9 |( p9 c- g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, s* F& v# O, ]: c
/* Initialize MCASP1 */
' p& q$ B; L1 B$ O8 f, k" p mcasp = &MCASP_MODULE_1;+ _' p& z- t5 O! T* z( A
mcasp->regs->GBLCTL = 0; // Reset
; E' i% k1 s) b# e9 [( ], ? mcasp->regs->RGBLCTL = 0; // Reset RX; n# K9 T2 \; ?# k O
mcasp->regs->XGBLCTL = 0; // Reset TX6 u% v( ^4 `" E& ~- ~- k/ D8 A
mcasp->regs->PWRDEMU = 1; // Free-running
* e9 r1 R: [8 v) R& `$ x Z // configure McASP0 receive registers) k; m& |( b) r: ]$ t7 X; v- J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) Y1 }3 \3 }" n
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ \. E+ S5 v* U8 @
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ E% |3 ^8 c1 E0 w( ~" M mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 e1 U$ t% F3 _9 @ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ C% z0 l1 Y7 k
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
: v: A, \2 D* @" [2 } mcasp->regs->RINTCTL = 0x00000000; // Not used
4 @# f; i- c. o7 D mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' a! v' E$ e. r1 V2 S1 i& b$ s+ {: K- \5 X
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- e: i4 o" F! F0 ]+ ^- E4 D
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* p$ E" \' W0 s+ O! x" M mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- O$ T1 ]2 n6 z; P
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ h% \. D5 M4 u4 @5 q2 g: W
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 ~' z% g4 O% e. P* B% g
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( T& @) t" n6 k& Y+ D5 T/ Q mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit/ _4 }1 E+ b+ N' o+ V2 }
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ @8 Q: b& P. I7 G0 g/ b- x: F/ p" }5 f9 V
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 `& p9 c+ i7 `& h/ b mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 m- h; g. L* }- n# m6 O/ @7 x
mcasp->regs->PFUNC = 0; // All MCASPs; [% B4 p3 M6 L3 H1 T0 E2 B1 K7 @
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 u' }/ G0 C5 ?( W8 ]: J" g- s# f
4 K- v5 ~4 o( J; z0 S3 g3 n
mcasp->regs->DITCTL = 0x00000000; // Not used% t/ T7 y% O$ ]1 A. C
mcasp->regs->DLBCTL = 0x00000000; // Not used
% W% q+ j7 ~+ n# G( R# ` mcasp->regs->AMUTE = 0x00000000; // Not used
/ r5 I. Y! Q7 H4 g& v" W, w
( S1 U L* a0 E3 f% }$ W2 U: D/* Starting sections of the McASP*/
4 d1 ~, D) ~) g9 w/ a8 `( x, B& F mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 Q- m/ h' f6 A. @2 J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
+ Y! B9 u: K3 G8 b1 m$ Q/ F) ^7 z mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 x, Y0 e& @ D3 K! w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' e" C& Y, b% ~, @) K+ m
7 K( G8 F; J2 z4 L, P% e
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " z. S [- j! o' d! r) V3 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ s9 ^0 K' E# _' B+ r6 r mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 Y2 c7 i6 A& k* }- T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ Y3 W# |5 n( d; y+ f$ S! }! x2 k% E6 M( k+ Q0 q9 b
mcasp->regs->XSTAT = 0x0000ffff;
2 C; @3 }- O \, M8 `; a mcasp->regs->RSTAT = 0x0000ffff; , J+ J0 O2 M; D& i* E( v( X5 D
8 }5 w# c3 P1 O* }; o mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 z- b0 A' s3 v& R, n" ? q6 t; J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 J3 S( J! L6 f$ T4 l) E mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; d0 \% E5 J5 B- h" o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* z/ B Q2 q5 K; ?
/ |. P, [1 d/ R' G /* Write a 0, so that no underrun occurs after releasing the state machine */2 Y; |1 G9 |# M# a! k
mcasp->regs->XBUF5 = 0;4 w, t! H6 D$ h3 C
mcasp->regs->RBUF0 = 0;
+ U( ?5 F% c! `: Y7 d7 A/ e" B4 k$ D7 t. k: }. x
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* O' B* v: u/ i0 W! i% ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. X1 ]# t2 H( m; J( B0 h( B% M, W mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; n# e2 q9 }' m, p9 [5 n* j# f) K4 g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 R3 y7 q2 }! G9 Y; d
+ N' G7 f, ] ]+ y$ Y. q2 ~/ I
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
l, }; i/ N: M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 n+ m0 e% ^3 b" P
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * B: N* c! C; S4 {3 l* y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 H' K# z4 e$ B' Q: y4 W& l+ y; f6 G- S R9 u2 S8 @ ^/ d( j
CSR = 0x0000;8 H; I8 h7 Z# m; n
INTC_INTMUX1 = 0x3d;+ ?% f' p) w1 D, n d8 v
ISTP = (unsigned int)vectors;
2 E& {3 Z& w% k. a ICR = 0xFFF0;
- n; ]9 E7 F# ]& c! y9 O IER |= 0x12; + k! D3 R5 _5 y0 [5 O
CSR |= 0x01; , w. K, a$ b' f7 G, p- [9 G
9 t4 r) Q/ ~2 N l$ l/ [( p( J
`6 p$ T, L i7 U, a/ G# w/ ?+ l
+ z0 Y/ J9 O+ h2 B$ k6 N还有就是两个输入输出函数:
, ~, @$ D( F- B5 A; [void output_sample(Int32 out_data)4 M9 p% t. X/ ?; a/ [
{
1 O8 J5 D; f2 q% p8 o8 J AIC31_data.uint = out_data;
! U, k/ g* }" ?3 z o) r MCASP1_XBUF5_32BIT = AIC31_data.uint;$ ^! F7 `# K) m2 R' b
}
) c$ g( q, r& `& M0 d) x
6 j0 P; j$ D3 O8 R$ mInt32 input_sample(void)1 w1 r2 \# w) y$ f/ }1 a% P6 [7 y
{
9 N6 C) |7 o" p1 H" d AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ a6 [+ ~; g2 X { return (AIC31_data.uint);. t$ T: p# F: x
}
5 Z9 t) U6 {+ Q c; j7 [4 t! g/ q1 G4 e9 x/ j, A( A
|
|