|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ a; u/ J8 {4 \8 k
main文件:2 e4 y4 M2 j2 R) n* p* P* h: h
interrupt void interrupt4(void) 3 s, d9 d3 V' N5 s( F
{6 a( w. W ]/ h+ t0 Z
Uint32 sample;
5 v! c0 B1 x3 m6 t" T
8 ^5 P% I& N5 w G8 O4 T/ @0 y" Y. R sample = input_sample(); // read L + R samples from ADC
4 T: A) f3 V; L4 X5 |, Z! Z output_sample(sample); // write L + R samples to DAC ) k; W/ d! H- _
return;' |; p6 ^6 Z7 J7 J( S9 ]" h
}, j4 g( D3 j) A# i( ^: D. H
% s! m; O; g3 x/ r4 s# k
int main( void )) S7 S! F* W0 v8 U: r. G
{0 Q" V: D; D4 {3 m$ I
$ r8 r% h& k( {( b" V /* Initialize BSL */( X- M Z. C/ C" z( {1 v( U
EVMC6747_init( );
0 [: U) z9 P; X6 t /* Call evmc6747_intr function */ A: ?# \7 E O* [/ u2 D" {
aic3106_init( );
6 l- A5 S/ Z/ G3 ~: | while(1);6 Y( b$ p) Z+ O' _- K
}# J8 L; w0 w6 z! O C. S
( I9 }( w4 K* e( W [3 |! W2 l1 P; r* I' r5 H& c9 I. o3 W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 v" d! i7 x3 L
/* Initialize MCASP1 */
- [7 E4 F4 s, I/ D mcasp = &MCASP_MODULE_1;0 B: L5 G C2 i* I& i
mcasp->regs->GBLCTL = 0; // Reset; O) K6 C, j; Y" x* o
mcasp->regs->RGBLCTL = 0; // Reset RX
& p# N' |9 H% `4 F, i0 @, H S mcasp->regs->XGBLCTL = 0; // Reset TX0 g( d0 @8 B8 u1 R7 {( j9 I1 R
mcasp->regs->PWRDEMU = 1; // Free-running4 `4 f2 n$ Z1 `6 j2 e J. W
// configure McASP0 receive registers3 z- _ G+ o7 ~) N* @% @
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used2 L. k9 u1 B; u: {
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 C0 U i2 Z) c0 o
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 n, J* C- N( G5 C. o/ u9 ? mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 n3 r- {% q& j
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, L/ [* c5 [& m mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ ^8 K I) k- h7 E! X
mcasp->regs->RINTCTL = 0x00000000; // Not used# f$ u! Q& R! G; @# I& \1 d
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ y# n3 d2 b3 y1 N
' X+ S5 @ @5 @3 M0 j mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ o8 j$ N$ { [- O( L
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 {- R! E. N5 I K" F3 e
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ `6 M: c$ s( v0 T" H0 |- U! ~
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16 Z$ U% w+ A( C; Q' J2 Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
4 j& R$ U/ y0 s/ }1 w! O* P2 Q mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ {& h$ l4 n! ]; V0 b+ a9 I- x( _& H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit, q# Q- Z# C$ w0 C2 {, M! P
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( M; H# ?! |( `! \* `( @+ _) B) o
9 G4 i: Y( H3 Q, G
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN: {" T- o' u( |/ K1 ]" d9 g
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' _1 X; c) a) C& l! R5 q, h4 r mcasp->regs->PFUNC = 0; // All MCASPs
4 n7 Y+ f" ^- h) Y5 p, `8 ^4 k mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ H) H s2 h' D7 z$ ?3 {/ `
8 l6 P# F' g+ J# l5 X
mcasp->regs->DITCTL = 0x00000000; // Not used4 i: R( C5 Q R1 e# r& j) k2 X6 ?8 x
mcasp->regs->DLBCTL = 0x00000000; // Not used
+ Z1 y: C' O2 v' } p% ? mcasp->regs->AMUTE = 0x00000000; // Not used+ s1 ]5 u. q/ `6 h
& X+ {7 D# X6 B# I* y5 ?/ N/* Starting sections of the McASP*/+ M+ o4 S& |% u7 e- `% `) }6 ^
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 V3 Q# ?/ x/ t5 y: T; K# }) s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 9 u7 g1 c3 u1 h
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; ~7 g; Z( \7 A8 x) h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 `9 j6 y. l- o, d# _) ]. E$ r+ p3 z& l' N4 s) ~- d3 C
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 U! D$ v! @" |+ V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, u0 j& N; v7 y( a4 C i7 [ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# v4 E& N( f2 Y" v q# o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, S3 `9 ~6 p! o4 l8 q/ T: d1 Z8 H2 ?: }( m0 S5 y' \
mcasp->regs->XSTAT = 0x0000ffff;
, E/ Z! A, H& E. p: L mcasp->regs->RSTAT = 0x0000ffff; m9 I$ | U( ]4 l
$ o8 n5 V6 C4 q0 c3 b F
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' S3 n: |* w" H while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; B5 w1 }5 D' M- f8 z
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / x6 H, m, k3 l5 Q8 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 g. _, F# Y0 {
9 g+ e- t# W5 g /* Write a 0, so that no underrun occurs after releasing the state machine */4 m* E* o. Y0 e* g' V2 ~' G
mcasp->regs->XBUF5 = 0;
+ _0 W8 |: v) t+ W. J2 g$ A mcasp->regs->RBUF0 = 0;3 J' I+ C. C1 v" ]" C! v1 }" X% W$ x7 C
+ v, I$ h3 y" v) u mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 w- [0 V& C: f: s) D1 a* F9 w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 @1 X; a2 m+ r mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + g; k9 H- I3 v6 Y$ p) l0 p9 o% M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 J9 b5 C: ]8 {4 e+ C# h' H
) ^0 t& S R5 x
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ Z. Q C7 o( W- \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); v- V$ F/ ]3 f7 _+ w1 G5 o- h! F
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 U v) D& I7 R: B$ t* g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 |& q* i$ I9 y% n
: K! ]+ ^4 a, N. ?+ ?8 K
CSR = 0x0000;" j4 ?9 K$ L" C
INTC_INTMUX1 = 0x3d;2 N+ l4 ~5 ]* K
ISTP = (unsigned int)vectors;
4 D9 U& E# ?1 a3 |4 b1 m ICR = 0xFFF0;
5 `% P: r* {/ c! o' D0 ] IER |= 0x12; 8 i. C6 b' s% F% S% g( E' E8 m8 e
CSR |= 0x01; + `9 H' a! p; q5 n. I, K9 Y) j1 ^
* B/ ]0 U$ i6 z# W* y2 e
# i7 k' Q: [" R' u
7 t# \$ V0 \& B9 i' E还有就是两个输入输出函数:$ x% ~. |3 k5 O2 ]$ M
void output_sample(Int32 out_data)! s" ?8 O5 j% s0 p' ?' X
{
, f3 K& B8 `. u8 n7 z: }2 F AIC31_data.uint = out_data; % }+ @' o: P- B0 k! B
MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 G% B: [ p: t2 A$ o5 n}. v6 {6 i( P/ F. T' U9 U# w
7 J9 R& w; t b$ Y; nInt32 input_sample(void)$ C. a3 }5 S" {3 A6 |
{
+ p, ? ~) v3 y5 u3 A8 }& e6 D8 g AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 ?* Q% k8 K% e* t6 ]: N# z5 ~% p return (AIC31_data.uint);* e6 Z; u# X& l* f, Y! G/ L
}( f D+ z1 o1 F- _' u4 f9 B
& P$ h. Q+ g/ _# x7 h
|
|