|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; v, S6 d, I) L$ l- @7 Kmain文件:
( C8 p- D" ?8 D7 a2 n- J/ ninterrupt void interrupt4(void) I4 d3 r- Z' O) H3 d
{
/ t2 X! Y ?5 V8 ]/ u6 h4 U4 e8 A Uint32 sample;
3 u, b) ?& V w# Q4 X3 |& c; {
+ ?+ K+ O, ^3 `- h( A0 e4 Y+ y! Y) V sample = input_sample(); // read L + R samples from ADC X. j1 l# o9 T
output_sample(sample); // write L + R samples to DAC
) n, e' { u; w+ T8 ], L9 l return;. I4 c( ?, u0 g. I
}
, L+ S8 K3 M( I( k V3 ]4 [9 g8 b) o' R
int main( void )
1 Y, g" d+ p' `9 Z{
7 r" F( J8 }) ]& p6 u3 A) |# x' K4 ?$ x
/* Initialize BSL */
9 l6 c* d- _2 j EVMC6747_init( );
, ^3 b; F: ~8 j /* Call evmc6747_intr function */
4 m; o* x$ T; o aic3106_init( );: m( W( j) ]: C
while(1);
& Z7 l4 E3 x* V}; Z: l; }. v2 h w( ~
' @5 q+ Q/ u8 t/ O! z1 |5 j
" B$ M8 l+ T6 l h2 [
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 ?; ?- e$ M2 h/ Q+ }
/* Initialize MCASP1 */
, o# ~- D$ W" k0 t$ G mcasp = &MCASP_MODULE_1;& q" ]- B5 @* V; A) b
mcasp->regs->GBLCTL = 0; // Reset
, e' O3 G5 e( `( e6 {6 V' A mcasp->regs->RGBLCTL = 0; // Reset RX+ T4 {& d! o6 _8 a. d+ H
mcasp->regs->XGBLCTL = 0; // Reset TX- }6 Z4 }: t% r4 x5 j$ p
mcasp->regs->PWRDEMU = 1; // Free-running
, {- k: b* X7 a& _" `% Y // configure McASP0 receive registers% n1 d. \" r' d( d
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 s0 W/ A7 B6 ]1 x: v3 m5 q6 l mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, f3 B8 z! T, n+ C& q, {" m% p8 Q% G
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word, C) ^8 Z+ a* Z: ]; r9 [
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 T7 K# A; D z Y8 [* z9 W6 o7 P mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% V, W, f1 O& y' F. V4 D) ] mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* c* [5 y1 a3 W! U+ Y mcasp->regs->RINTCTL = 0x00000000; // Not used
2 H: r6 [7 Q4 {& j mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ Q! y! c [7 w. Z& @
& w( e2 T! u8 |& R- ~ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used( [4 W5 U4 v# s7 o j0 T5 m
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& u1 P7 l- x7 z8 O7 A( y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 h* R; X* R# k' R. b5 p3 W
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: y, W9 p. Z K( N1 Z$ ]9 ^ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ L J" ]: X. i mcasp->regs->XTDM = 0x00000003; // Slots 0,1
; `0 l/ K' M; P+ \% U: y4 ~5 M mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; ^* c( q' b4 ~' H6 e
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* d1 n$ T: s( z$ {4 l
2 j! D: F3 P- s/ z- y9 e( O mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ U' {7 |# Q5 P7 @
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 [% S$ a4 p y3 G& ~7 C! e mcasp->regs->PFUNC = 0; // All MCASPs% \# x' y1 X: s! q- A
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& V; O/ F' n* @; \, W2 A) Y+ m
0 K& m+ Y M- x) R7 U8 i3 T
mcasp->regs->DITCTL = 0x00000000; // Not used. w G6 l/ i% ~7 `) n- w5 `3 n
mcasp->regs->DLBCTL = 0x00000000; // Not used
) d3 O( w2 H4 I! @$ g; F: M! W1 e. s mcasp->regs->AMUTE = 0x00000000; // Not used
+ W+ B$ E Z) @7 G1 f( }
0 z6 j3 @/ p. W: h' Z% D/* Starting sections of the McASP*/( S4 u9 q4 t) r: k( z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* C, P/ _ h3 x, S* h% R! P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 {# k$ p' b3 D! @# c P$ z+ q% a mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; j: o* j- U* s' J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 F: v7 a! `$ g; |5 o; U. c! V% n
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" N( ?9 ]0 S" a# E; T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, W$ `3 d2 }$ ?3 O- G8 ~' q& R mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, L V4 b w' A: ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 j, @& J7 U% s& Y8 M; G+ j9 B
) I& c5 z' A/ N* |; i: K1 h" D mcasp->regs->XSTAT = 0x0000ffff;
A: A. @" r$ Y8 F" [ mcasp->regs->RSTAT = 0x0000ffff; 4 Q0 w% j( h( l" W" E% Y9 K
- L. J/ E$ T* p8 k' w! J1 a P) A mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( d X3 I0 F+ x9 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 M) y8 }1 c% U* S5 v9 \# j# T
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * Q4 ?1 ]2 F9 ]7 `1 R$ G+ f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 q: g( R/ ^# ? `3 K9 V+ S# Y
0 ~" g' O+ L% L- c# C6 q" i /* Write a 0, so that no underrun occurs after releasing the state machine */7 V# F0 ?: h( {5 n) z A
mcasp->regs->XBUF5 = 0;: A3 [5 c4 d) l3 Y( c
mcasp->regs->RBUF0 = 0;6 ?+ n7 h& k* A" t8 b* E* @) q
4 R; q3 c. `$ Z$ }4 X& d1 t
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 J9 C+ a6 N+ k2 u6 z/ m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 s% B" Y1 p( m% V: C3 `) ^2 Z+ T
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ s3 }; Z" U* F% h D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 G! }3 i, E( T$ p/ {
7 ~& T4 g3 l( i2 S" B6 g4 a mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ s8 S( B9 A- f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" I) _* y' I6 q; m( X& F* { r1 ?3 V
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) Y- a4 G% X3 z- E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 r0 e$ U5 |; Y& H- R: I0 `7 v+ k. S3 A9 V
CSR = 0x0000;
H0 ~% o# Y. Y$ l INTC_INTMUX1 = 0x3d;6 G# g# `5 u; O- U5 O; E
ISTP = (unsigned int)vectors;
6 r U2 x: K( v0 d* e) P6 ]. t ICR = 0xFFF0;
" T5 _, k& \5 k: c- B* y4 r IER |= 0x12;
( i9 b/ U/ X/ F) K9 { CSR |= 0x01; 7 W) {) Q1 u7 _- R
; P; O6 H" d. D: a, D
3 g$ L& J1 U% s+ b8 o0 P" V F$ A- U3 w, ^) x
还有就是两个输入输出函数:) I) D0 N4 m& r; u) B: e) L
void output_sample(Int32 out_data)4 |: S. }, P6 g/ X+ ]
{3 a% \$ a: s9 M$ v( n
AIC31_data.uint = out_data;
( k7 n+ u5 P" u: a" S0 H6 _ MCASP1_XBUF5_32BIT = AIC31_data.uint;+ y3 Y" |& Q7 v; i* q
}$ @0 n2 ^9 _, K+ G
7 ] v+ b1 P+ L; o$ P/ b. \ IInt32 input_sample(void)2 `( s% L Q$ z% r
{ 5 v K6 g' k' T. ^/ {
AIC31_data.uint = MCASP1_RBUF0_32BIT;4 y5 A" y$ Q4 m& ?& {5 J8 [
return (AIC31_data.uint);
0 j- F2 I, q# d+ H4 P ~* c& W: h}2 G; K/ P. \" k7 ~9 s3 `2 L: v9 r
& b2 u L) i- h8 {' D! E6 o |
|