|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' V7 E% S* k' imain文件:$ }: V# `; F0 N3 e7 W
interrupt void interrupt4(void)
/ W2 N5 G9 f/ E( q{% m [$ S( N4 z8 s; s: I! y2 Y, W
Uint32 sample;$ @* y8 Z! u8 L* S5 [5 {6 S( x( G
5 W2 x1 S: c c. O/ m1 P% z
sample = input_sample(); // read L + R samples from ADC
$ x8 V* [# ~' s: V( v/ F output_sample(sample); // write L + R samples to DAC 9 T, D) t2 c T; W3 ~1 h
return;8 R- |2 c- C' z U3 f- w
}
@6 _% y# H8 _3 p2 `% ]: p1 w6 k$ {1 [' s! `+ Z- R& J+ X$ f2 R
int main( void )
; u, U5 v' {; l{
9 [( [( J1 P1 [3 S3 F6 v: w
5 w6 A5 M$ H) _2 I R. O! J /* Initialize BSL */
9 u; v8 B( \( i; ^0 O/ h EVMC6747_init( );, Q5 }1 T" c) _
/* Call evmc6747_intr function */
! ^* }3 ^( {2 a7 X aic3106_init( );+ @, D% y9 ]) h8 i0 S, \
while(1);4 J1 K, g( W& Q* U) b
}
: ]' K- p; c3 S) \/ ]2 j$ {8 c3 h6 U* D) P) j/ X/ W( S) e
* ^2 N' a( Q; S2 W8 c- y4 p
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# i) m7 }! L* i& j
/* Initialize MCASP1 */
, ?1 @0 U/ y: z mcasp = &MCASP_MODULE_1;
8 S( E" C' V1 f3 C; l/ k mcasp->regs->GBLCTL = 0; // Reset( d# r4 `& V9 V
mcasp->regs->RGBLCTL = 0; // Reset RX
( y: V5 C# e6 j G mcasp->regs->XGBLCTL = 0; // Reset TX
+ Y, n- M* c C; r6 l& B mcasp->regs->PWRDEMU = 1; // Free-running
! Q' |3 ]( {- S2 k6 C7 [- J% | // configure McASP0 receive registers
+ u9 L/ R. n- n; u2 r+ {6 t mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: v- l% L& j' \5 l( J( U
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 l9 `" `' r6 v/ `8 @( j; u$ E
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, H" r1 i* Z& | mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 l; Q2 D/ U4 I/ Y% r. I0 H mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, b6 P! K1 h1 y7 {8 I% S% ] mcasp->regs->RTDM = 0x00000003; // Slots 0,1# B' L% U0 x% Y$ M( c
mcasp->regs->RINTCTL = 0x00000000; // Not used
* R# k4 u! W0 m9 H mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ f5 R0 ^. h* O4 X, G; J6 y; q& j
# h6 C' j" {8 |/ `) O/ m6 t mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. S3 M$ ~; H) j0 T mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& S3 S6 @4 U6 L9 a+ @
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word Y# H y7 o5 t4 H2 |0 i
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 J$ K* j2 L T0 N mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( Q; {( D: d: F0 R+ h5 t
mcasp->regs->XTDM = 0x00000003; // Slots 0,13 u4 k" w5 q' d% v7 P) i8 ?
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% ]$ S, I% G) p& ~
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 E& R) t" w5 o7 {+ Z7 N. A% Z; _1 E. \3 S; X$ X
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN& q! l5 G: g, z( O2 V- \# B
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; ~ H# ?. v1 h* X- A
mcasp->regs->PFUNC = 0; // All MCASPs
5 ]; g- F z: P! O mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ S# O* ` f& ^
( ?0 g8 r/ w6 r/ V" m* B+ k
mcasp->regs->DITCTL = 0x00000000; // Not used3 N# b3 j% U0 x1 r
mcasp->regs->DLBCTL = 0x00000000; // Not used3 g3 g" r7 `4 f$ J$ s$ A
mcasp->regs->AMUTE = 0x00000000; // Not used
4 z8 S0 a9 P6 o* _2 k# C2 R/ J V6 F/ \5 V# j9 I9 W9 Z* T! a
/* Starting sections of the McASP*/
4 x; v& q# K; ?6 s4 j9 \+ T mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* c! U5 a$ R' [$ m: O { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 ?) L. I- _& H2 ^; o2 q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 N" Z9 Q- _) \, f- L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. t2 H' {. o+ r7 X
) V- w& b- Q, I; J5 o, c' l0 T mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; |9 Q. l: A9 F; U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 o2 p, w2 f" Y( I5 p _% G
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + A D; k' W' z8 m* A0 v4 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* I5 g; r* l5 B
1 {. \, L- t0 W0 p7 i mcasp->regs->XSTAT = 0x0000ffff;
9 v" G; T! M# T0 g' V- H" u; x mcasp->regs->RSTAT = 0x0000ffff; ! U4 p" ~: I7 b# a: L4 [
1 \2 N' [) U r: z9 N# { mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" s5 x( T# b/ ?8 p, x) k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ N6 s `- d( m/ h mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; w$ j f& v8 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 ?2 T$ e- D0 c; _8 Q
! ^! N' m- Z; o6 i; [( a4 C4 F ^
/* Write a 0, so that no underrun occurs after releasing the state machine */' B. v1 e6 P( }, ]! u' e
mcasp->regs->XBUF5 = 0;9 O& H& |6 q% k1 ^8 _6 m; z7 K O
mcasp->regs->RBUF0 = 0;# I, w, f, w% R/ P: K" M
* A. O* ]- |, @5 o) D# U1 f) H$ ^& t mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" |0 E1 D: M3 p+ w/ e( _. U/ l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 Q( e' ?9 X( Q7 H1 [
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; k) O$ E; s; _: \. `3 d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 {) t( `# B- n9 r
+ q' b; U$ f; e2 a7 l mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 [) ?6 j+ b& d3 l+ o M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, i1 `0 B. ?) }5 k! g
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 T! a a% k% j% I! \6 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% i( U* L8 g; X* K- w: H) p
: a1 x6 M, ?8 P. R' `
CSR = 0x0000;' ]2 n8 e$ S0 q E
INTC_INTMUX1 = 0x3d;( k, q' v8 d; Q0 `
ISTP = (unsigned int)vectors;( v7 Q9 m% @+ n
ICR = 0xFFF0;
5 a6 W, X& j( y IER |= 0x12; " B: ?0 D; m: A* X
CSR |= 0x01; $ Y( w: I* I# c) P5 j
7 \* G P4 k5 Q- m0 L6 ]% X; t+ v! \7 r' O6 Y! U% U: [: q
3 {" R6 k4 o- \+ j! n7 x还有就是两个输入输出函数:, d5 U l! e b: x
void output_sample(Int32 out_data)
* u" J. l- q6 Y0 O8 o7 c4 f& n{! A1 V4 \ N! y' C. T7 q& P
AIC31_data.uint = out_data; * \- u' ]! q, q. ~% s$ a
MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ Q7 u. i1 H, x& @6 t$ R! X}. ]3 Z. [) y# A
# S/ b* ?) m7 x# xInt32 input_sample(void)
+ f: @+ T, T6 u" f& x# u{ 9 P0 W( D8 t5 Q( A% s0 S( N1 I9 o
AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 u8 ?) i/ v' u8 U1 C return (AIC31_data.uint);( p6 z6 ]7 ]) P4 t. v" `
}
" x! X" p4 Z6 U6 h/ F0 N: q/ D( F
2 M4 T0 F0 p ?* _ |
|