|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: J D# ?2 e6 }$ X- \1 a
main文件:: j1 _6 g- q; B% {" ~: S" X' q! T+ d; e
interrupt void interrupt4(void) 5 ]6 ?3 z0 T1 ^
{
9 M) t: s+ O, O: o5 j8 @ Uint32 sample;5 I0 d2 k) y* d4 C; l/ `# q* j
& W; ~. t+ B$ r
sample = input_sample(); // read L + R samples from ADC
+ H7 C7 |2 D* E0 ^* | output_sample(sample); // write L + R samples to DAC
7 L! p, u( g) i) B return;' ^$ D) }: _& w( E- @3 _6 H
}1 `' k R) b& j0 l
, f. b* V& X, z5 L4 S' ?6 xint main( void )7 h# ^! e, `* e. S* ~
{. X' P h, F7 E* m" W
" |% G8 o) y0 }! _9 G& O5 t /* Initialize BSL */
; N; a! F' x; B* U9 {9 u EVMC6747_init( );
/ B& M. t3 y( k/ Z/ {2 i2 o /* Call evmc6747_intr function */, h2 C% J" \' V( Y, g1 w
aic3106_init( );& _6 U, F9 o! N( p) T) ?& s* I
while(1);
I9 ]) g) t( B O}" R' \# P2 W- R2 k" m/ X
4 q7 I/ M% R4 a( o) M( k
4 c C3 D4 h) N2 q9 N1 K. `
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ `! X' {) d0 h3 z
/* Initialize MCASP1 */% F% L2 {) L" c: h+ O
mcasp = &MCASP_MODULE_1;
6 \6 j* {" y; \) Y, m8 N mcasp->regs->GBLCTL = 0; // Reset
1 W3 _( ]. P! k- k* U% s mcasp->regs->RGBLCTL = 0; // Reset RX
7 ?1 E9 p, Z& {. q: W1 x mcasp->regs->XGBLCTL = 0; // Reset TX1 M& |8 T; v+ B
mcasp->regs->PWRDEMU = 1; // Free-running% {9 e0 R+ x( E
// configure McASP0 receive registers6 P" c+ f! |! U& Q# u/ A
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 j+ L$ S- L2 a K, i1 T) f
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 i0 p( J9 V3 i) b; j) u" ] mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 C. E8 o% n( y3 n. I( n; c
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" [9 e) B2 Z" a3 N' g& } mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ I/ k2 ]% I8 I3 Q mcasp->regs->RTDM = 0x00000003; // Slots 0,17 T4 S8 d5 T+ E n
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 z# U/ V2 d- Q5 w mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! O# D7 | Y* h# S% H8 v/ B3 q
+ v. l; D# L( |5 Q" z9 W) G mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# k% E! j* {! G, E, s mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, ^3 R/ B H2 t7 P, y6 l
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! H9 d6 _; M7 { mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 s5 p! T) A$ L/ _ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
3 h6 K% P) I8 P' u6 H/ C mcasp->regs->XTDM = 0x00000003; // Slots 0,1) b9 E$ A; ^! @2 F0 L) p4 u
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
5 H3 v& S3 G, l/ x8 c) {4 D8 g mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. j% O* d% v* e3 r* w- }
- w: G# V/ R+ v) r: _+ w# h1 a& ? mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN3 o ^- \% v, u" D9 l
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT, B0 k+ W, D6 R! ]7 [0 Z2 B1 V
mcasp->regs->PFUNC = 0; // All MCASPs. ?& [0 L) t n' A3 ]
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 L1 z# h& E, l( A' u% v
/ L: e# Y$ V# y4 s e mcasp->regs->DITCTL = 0x00000000; // Not used+ i/ S' | I6 g. A
mcasp->regs->DLBCTL = 0x00000000; // Not used
: X, E. R4 F6 J L. T4 M2 }4 l mcasp->regs->AMUTE = 0x00000000; // Not used
( m3 B0 ?0 W, z: i
4 I) ]( w Q( n# w5 X6 s/* Starting sections of the McASP*/
0 w, @' S$ ~7 O3 p0 i mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 B5 C' i+ r/ {$ \* X, z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" U1 R* V+ q& o" _3 G' ` mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 z7 ~ j0 j6 w4 f4 y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ ^5 H. [1 p4 v( _ U0 v
4 |% z- @- O9 L0 l# U8 R
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# ]- e, b) M/ _: v) \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" ]; H) c' a" T1 C k) U$ h6 t mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 r9 l: M a2 i9 B& A5 Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, A( _- t8 ]: C# B& h
- a" r6 P5 f7 ^% v0 v mcasp->regs->XSTAT = 0x0000ffff; - K$ o% P( n/ a/ a+ {
mcasp->regs->RSTAT = 0x0000ffff; 5 P4 m4 X9 N+ D% u
0 T2 A3 z% D3 l, V; {% `& K6 s# f
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' j# ?- e' j+ B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# M) M( [5 c/ k mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! V& B% n0 {4 W0 c' H; |+ v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 F( x1 {) q( J ~- B
* @% @1 D' W7 v* [+ W3 r /* Write a 0, so that no underrun occurs after releasing the state machine */
' n* O3 O- ~% Y) p mcasp->regs->XBUF5 = 0;
3 j# i2 S& P* F! i1 b Q mcasp->regs->RBUF0 = 0;
( O3 n4 _$ }! {/ t* J: L
8 U: A h4 N- {5 X5 F3 X: G mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( T* J# B$ Z' E: ?1 g3 v. L! y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 _. c. G8 J% J4 x mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 k2 b# y! L1 V0 u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, u. B) V; |0 d. W- i& T7 ?" V5 H. N* K9 p; |7 a+ ^
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 G3 q6 A9 D" ^! g& K' P6 w: ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 ^$ ]% |: r/ U' l/ j- s mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * n6 t9 O% k" s/ o. ]) q. X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 |& s: i H$ w7 i# l( V
4 G5 Z; m s2 Z6 X8 @, B8 ]" H3 l
CSR = 0x0000;
! r( F+ A6 `# d, m2 i7 Z* q* |0 } INTC_INTMUX1 = 0x3d;
$ `1 ]* j/ y4 u* e ISTP = (unsigned int)vectors;2 @+ g8 e" ?' K; R& L5 [
ICR = 0xFFF0; 8 }% T1 |/ k) J3 o
IER |= 0x12; ( C' b0 U# i4 i$ \! z
CSR |= 0x01; * `/ D6 D% W1 U
( s: n8 l" c1 @- X! @
: D5 j. R1 e. t: x" ]& ]
# `7 K+ t7 h7 ^1 O) q+ H+ a
还有就是两个输入输出函数: X5 ^0 v4 `) S
void output_sample(Int32 out_data)1 T! b3 o8 f: M0 M& r" B
{
5 u2 R4 j% `* }3 H5 Q AIC31_data.uint = out_data; : a2 O, d3 I9 @- E( o; R
MCASP1_XBUF5_32BIT = AIC31_data.uint;# c% i. T1 ]) m# ]" P; d9 P$ d! E
}
# y. Y6 d/ A# i0 s2 F' R
9 V3 m; R8 z& O" ]. C! G5 ~, zInt32 input_sample(void)3 F9 a7 y9 \; y& b- p
{
! n9 k g6 `/ o8 P5 H AIC31_data.uint = MCASP1_RBUF0_32BIT;
- |1 P; n0 C1 `1 i4 U" F return (AIC31_data.uint);
% R5 r& s; C* i4 }1 ]+ K/ S% ^}
+ g" B S9 @7 S! P: R9 E/ M% r, ?/ O' _" z% e. `: ~
|
|