|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ t/ t# E6 {. J1 A+ k( K6 m
main文件:! }3 ~/ M4 E2 `% n
interrupt void interrupt4(void)
/ D/ G E2 W6 w- |) j$ w8 J{- h+ W' a3 e8 U! X! L
Uint32 sample;! K' p& r& G# c- P8 F2 Z" a5 j
8 E, B5 F3 Q' n* \- @* L: K sample = input_sample(); // read L + R samples from ADC
0 i( }' @7 u) S, ]- P5 H output_sample(sample); // write L + R samples to DAC 9 N+ }3 q, c/ c( u$ R2 u' D
return;
* Y; T! X' Q8 H& v! a}; J( c$ y" s( m/ A
3 M* H4 C7 t4 O% F
int main( void ); X) L$ F; T* Z+ R; g. f
{
- k( Q [' I# V6 n4 Q- H. T. k. f& k: d
/* Initialize BSL */2 p+ h7 z7 a8 I9 {: A) L
EVMC6747_init( );# y! v9 r- n! v4 r! Q. }- k& D; ^2 ]7 T
/* Call evmc6747_intr function */( V8 [2 b7 @* [( \2 U' x
aic3106_init( );' Z, H ^ Y1 ?+ x
while(1);" Z1 [$ ~& L: ]
}
% X* ]$ O9 z9 H/ o, I% ], |6 c) _4 X' Y- y0 h1 v- G
. J- ~" ^9 j+ f% C" W8 Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 U Z5 \1 Y, T: {
/* Initialize MCASP1 */
( b/ F4 S; k1 v) k mcasp = &MCASP_MODULE_1;- U) x$ p' O, W3 O0 |8 M, T. a
mcasp->regs->GBLCTL = 0; // Reset
' X8 w$ X# L% W mcasp->regs->RGBLCTL = 0; // Reset RX) k+ D8 x0 y' [% k$ E# Q$ u) _
mcasp->regs->XGBLCTL = 0; // Reset TX
; F3 Z. ]0 g2 m' s: I- ^ mcasp->regs->PWRDEMU = 1; // Free-running
7 {' J3 }% [: }1 e- |2 e // configure McASP0 receive registers
% [; }( W' W7 P9 D. j+ d( q mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 G$ X; f* H2 \+ z+ Y3 @7 s mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 s3 A$ n+ F% l0 m mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. Q) E) F' Y! x mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): q% O, y0 h7 U8 R3 p: p) I
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ n( ~; R8 X7 O& ]4 p0 I
mcasp->regs->RTDM = 0x00000003; // Slots 0,1( v4 X1 V8 [& q% i
mcasp->regs->RINTCTL = 0x00000000; // Not used- z; d) U) g4 A
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 q- Z0 D( s& K3 k0 W7 U2 U: m
7 W5 U1 h$ z l* v8 Q1 j0 M# X/ L mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ ~, C/ k! Q9 H7 S- L
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- N2 [2 E q# `# b% v
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 G! z9 h5 j; F1 V, }/ O; z
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
~! u, A" M) W; u! s0 q% G, @1 | mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, a- q/ a3 G8 p- Q- L
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
* U% m4 {6 t. B, h mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
2 r0 Y# j% [, P! m0 k mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" x+ {) \! V, ]0 L( Z8 K; U% v0 y0 |. d9 U
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 |* }4 ^ `; B) K4 K# P" R6 F
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT0 k3 G4 a1 d! s0 u" R! a' T7 Z
mcasp->regs->PFUNC = 0; // All MCASPs
3 B! g; e. j" \) { mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" a9 Q- y6 L* ~
0 T0 S& n) Y" \% B
mcasp->regs->DITCTL = 0x00000000; // Not used
; p q$ |, V: o! Z' Q, Z: Y mcasp->regs->DLBCTL = 0x00000000; // Not used
0 B+ M5 x. _, b/ o( k mcasp->regs->AMUTE = 0x00000000; // Not used/ x6 j7 f' R* n5 Z% h7 O- @4 o& e6 V
1 J/ \1 q; f: }1 U# w
/* Starting sections of the McASP*/
) ^7 Z! P- a) Z5 u1 e- b3 z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' a* D/ b: @+ b' h' d4 n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); / M! t0 F$ |% H' l3 e
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' \9 I' G' i$ n6 m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, _3 t" N7 F3 Q7 \* u4 {( S' ~8 |: G- E/ k5 N8 ]$ j
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ D, n9 o/ M( [* w' E! h5 E8 W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 E4 h( c$ @0 r' S5 g" W1 g8 \8 v
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& W, Q0 O: I& I: ^! x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ w7 S* X X5 y
_/ i3 g( | S) Q& y mcasp->regs->XSTAT = 0x0000ffff;
/ o3 H9 S% a R) g: F( V) B mcasp->regs->RSTAT = 0x0000ffff; 7 J0 M) [. J& D. Z
- ]% F8 q* C: m+ |6 j' T4 J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 X/ U% m- @4 X4 b" @& ?- v# V! U; x* O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 Z5 s' a3 K7 a2 l I mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 J1 D; o. ?% V/ {. V( \3 D; X$ k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: W" W) O, F0 O6 E) i4 v
% [9 G$ q% L, K /* Write a 0, so that no underrun occurs after releasing the state machine */ X6 t. \. s6 Q, m7 ?
mcasp->regs->XBUF5 = 0;
1 M! A J" ? h mcasp->regs->RBUF0 = 0;
" M. w- `+ Q. Y' x! X. a
0 o/ Y. w/ g# \ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 O7 W7 p- X6 Y }# {' ~( k( P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# n5 V$ R3 p v6 w# A mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 _) e6 @2 _. c) @1 Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) S" \$ ^9 X4 w4 x
/ k/ ~3 @) d$ e- _ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" f5 {0 ?% I% b! R1 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, b6 W% W3 b8 ^+ o* U, H2 S5 p
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & U: X0 `) w k3 ?) K/ p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 F7 K& u/ F" S+ A
; \0 B& V5 B& t CSR = 0x0000;# x# ]" ?5 j1 N8 U. J. Q
INTC_INTMUX1 = 0x3d;: @/ K' U |/ @! M) y
ISTP = (unsigned int)vectors;
* i, J$ [8 N3 _; M- f1 v ICR = 0xFFF0; . G8 Q' g: {* ^# p" W+ C. f5 K
IER |= 0x12; $ b) X9 y3 y) r! x2 e9 R8 t
CSR |= 0x01; , q% _0 V& E" o& z& D. I9 G; x3 |
' T; `: k3 Z% i+ L2 t$ t" A
9 n9 m$ I0 ?2 O: x( V* M
1 d) Y( F/ y2 m& N" m' j$ w还有就是两个输入输出函数:
# u) A! r! V! D9 w- y" B \void output_sample(Int32 out_data)- l9 u, v% l4 q' Z/ k+ g7 ^: j
{
' t- ? B! i: E# m AIC31_data.uint = out_data;
0 U5 N( N0 O% R, B7 [" Z; x MCASP1_XBUF5_32BIT = AIC31_data.uint;& {( N+ d$ R, Q, j1 f
}# f" ~1 @4 ~, z1 G1 r" L" k; K+ Y
0 d* k* m. d% j" T/ G0 d+ D7 }7 ?Int32 input_sample(void)
' z. w9 K6 ?( e+ P2 m{ ; m. F; T: o! ?+ D5 i4 u3 h/ R6 ^
AIC31_data.uint = MCASP1_RBUF0_32BIT;
- D' B% d) K# L5 Y return (AIC31_data.uint);! k" M% i P! B' f4 w: M2 d
}
, Z/ I6 }8 z& ~5 S) ? _! `, H+ h. r
|
|