|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 R( a6 p" K' Dmain文件:" n+ `/ e/ @& X5 r" v# k3 [
interrupt void interrupt4(void)
. @- _ \; n% c" w{
+ R/ l; a) g9 q3 F! Z Uint32 sample;: \% I3 e' S {, G1 o+ R9 B
$ L6 X8 }! C' M$ e2 ^" ]
sample = input_sample(); // read L + R samples from ADC
. M6 @; d4 q6 W4 }( W- S output_sample(sample); // write L + R samples to DAC ! E+ F; R! C( {0 M( b( E* d
return;- n8 n4 n; N; b5 O
}; R4 m# t4 j% W" M; E
9 C* i7 Q! ` ]0 E) F( S9 Q+ yint main( void )
) n l6 l1 N/ ~7 t) m{
1 W/ |& _# G ~. D, H9 A Q, x1 d& z5 @) O
/* Initialize BSL */2 w: Y: \& }: I `. o! T d m
EVMC6747_init( );
. m [' ?& t( R /* Call evmc6747_intr function */
1 l6 I! C$ T# V aic3106_init( );; L4 G6 ?4 X1 [- p; R
while(1);
- [0 M$ x8 m1 G/ x3 l}
+ j1 M1 C! o/ k' O
+ ?5 @2 ~( f* C6 h; M& f1 ^
, M* P+ E# k1 c! ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 W2 k) H$ p* |$ N; F* t/* Initialize MCASP1 */
- b- B% j; _$ l: |3 E mcasp = &MCASP_MODULE_1;5 x6 _- S* t! r. S7 s8 c i1 j
mcasp->regs->GBLCTL = 0; // Reset
9 p# A: x$ v" K: I7 c mcasp->regs->RGBLCTL = 0; // Reset RX1 n, N& j& E6 u. G) R5 B
mcasp->regs->XGBLCTL = 0; // Reset TX2 A; H m3 a/ t. g* j7 c% b
mcasp->regs->PWRDEMU = 1; // Free-running
" R7 J/ L, S1 C/ \5 i0 ?* g5 k // configure McASP0 receive registers3 c: L+ z2 O( `: {& h4 v1 H
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used0 @: Z7 Q( S( Q3 L9 o) C
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 @1 o- p, o9 y t/ ?
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; t4 j) A* L% [: R J3 x mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 L' H- ? f* L9 O3 V1 ]( J2 F mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ n& |% f3 \5 [/ ^, Z$ k mcasp->regs->RTDM = 0x00000003; // Slots 0,17 ^1 s0 o+ I3 M: G1 Q5 _" \4 K3 L
mcasp->regs->RINTCTL = 0x00000000; // Not used
& w' p7 a( W0 g4 ~ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ]8 J; |2 L' T$ K& W1 r2 |6 v! X1 c' v2 h
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used" O* K6 _' X' d; P1 g3 A
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 i D( R7 f2 J+ C U mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% j3 u- O/ u# Z- ^ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. D8 c2 U9 T, `8 M/ n6 Q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
9 a& n; g! Y4 l4 ?8 t b mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ a6 r9 _8 g$ i& P0 ~* d) I" Z$ t
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; R) p, \1 T- d8 e& l mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; W- A: k. R+ j4 R
$ j n8 f( n1 A% @6 z k
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 t+ x/ \6 ]3 M( I& V$ }& \4 r+ [
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
& a& J3 [. T/ H mcasp->regs->PFUNC = 0; // All MCASPs
$ d% T# v+ w& [# n3 `' O2 F' z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ o5 Y6 M) {7 B3 \+ B0 k) B$ t+ D& h
6 h; v: t* h. u/ k( O+ I7 n mcasp->regs->DITCTL = 0x00000000; // Not used1 g) H# R; \* [7 o0 r" K& I
mcasp->regs->DLBCTL = 0x00000000; // Not used
( J. E3 |% b/ S/ s$ r' z, w; u/ v( f mcasp->regs->AMUTE = 0x00000000; // Not used7 }, m$ ~( I: D: y" |
/ B8 k7 v/ V9 ^) _
/* Starting sections of the McASP*/
% S1 t2 Z% e$ ^; Q h; e' Y0 D mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - H( s1 H- L) W. {' q8 N r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); - D8 u+ ?% G5 E- D H
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 H7 i3 E( @' w4 R+ @5 C! i: q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( i, V" B6 {7 E; s
* z2 _1 I' q; m& c2 U
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
\2 o9 V) }4 r6 ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ I1 a0 h2 R! ?" }+ h
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( g9 U+ @3 I+ f/ a D. D5 ^& I2 J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# r/ k" e6 b. U, j$ w/ _
7 l/ p, z; z5 Q6 { \4 H
mcasp->regs->XSTAT = 0x0000ffff; 1 w3 v$ x( t" [% b3 L+ C, ]
mcasp->regs->RSTAT = 0x0000ffff; / i# U! i9 q* B1 E: D1 n' i) u
: b7 M" u$ O0 V2 m6 w! n. P mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# u. D' H2 K' a# L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 V6 w* w5 \/ C3 x& r0 Q7 ? mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; \ I' @! r6 { k, e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! T8 G. |0 c: ?8 R! ` T" M) U- G4 y* R" p9 c+ F
/* Write a 0, so that no underrun occurs after releasing the state machine */' ], O% d$ |: } w j U
mcasp->regs->XBUF5 = 0;
' ^6 n! _1 v) O8 m7 E mcasp->regs->RBUF0 = 0;! [2 ~: i% l; r3 h7 i
- ]+ `7 i- O) p: G$ E mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 R: A, K+ o" ^* y! @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 }+ }& | q$ P. f8 \8 f* Y* p( x5 j6 i! } mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! s% k5 r3 v W3 a( E" j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( @9 k- B2 S3 v9 |
6 b9 U* E) l8 M- X( g1 d mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 V. Z: L0 P+ | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 T! O% q& s) |; U, o7 g mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
T+ G8 r& ^" w- o4 @$ C- ~, ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 ]9 d3 A' s# K7 a& [* E
# P& v# |" T7 a6 n' ^ CSR = 0x0000;
9 U1 Y/ Q" b1 p G7 Z9 J2 ~) K E# s7 Q INTC_INTMUX1 = 0x3d;
7 O3 ^3 u0 [/ X1 ~) Z/ e ISTP = (unsigned int)vectors;
; ?$ h9 }# ^! q( }' s ICR = 0xFFF0; : Z& z) K" `7 J; t+ n+ \' P
IER |= 0x12;
3 v1 |8 r; m, x% t( y J% V CSR |= 0x01; - }7 M. `. P" M! b& I* E' @. N0 k
: F' D- M$ t: D- [" V" d. }' T) F0 \' k" p+ D
5 T( o( @! u& g; E2 j
还有就是两个输入输出函数:
R( N: Q9 F& N* Z2 s* \/ wvoid output_sample(Int32 out_data)* T& P4 e9 y& K! W: S
{
, y" j! U4 K, k& H$ M AIC31_data.uint = out_data;
$ B: Z7 v8 u: q7 X( Z. i" c MCASP1_XBUF5_32BIT = AIC31_data.uint;
( f- y4 `9 F+ B9 ~) t, a}
, r# h4 V2 D% o3 H7 M. x, Z8 l7 ?7 L, y9 U6 M* Q8 m& `
Int32 input_sample(void)9 ~: q3 D. y+ n8 Y3 v
{ : l1 w2 V7 F4 w, u0 P8 P! L
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. W0 ?' m3 M4 W3 F# |4 g return (AIC31_data.uint);6 Y" q" K( J1 S3 q
}
2 D+ `$ f7 r9 B0 G% P5 P2 G8 l2 o% } t. n* N
|
|