|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 a8 v4 Z& ?$ W& p" |main文件:
: F0 d3 |% f3 u# B2 ]interrupt void interrupt4(void) 1 Z' q4 F' i8 ?
{2 b: t0 k/ [5 s9 H' W
Uint32 sample; H }6 `* [9 m- O! W% c
* }+ G$ K# ?7 d
sample = input_sample(); // read L + R samples from ADC7 n/ W6 n% b9 m! H1 W# T
output_sample(sample); // write L + R samples to DAC ' n* D1 {* J5 H3 s5 h& C5 e8 ]2 w* o
return;; l Q9 }9 s% ?4 L) G6 V' |
}; h) W; {7 ]3 v5 D+ n
$ C. x6 K2 d7 K! yint main( void )+ @) U5 a8 P. i3 R! [( y0 X3 d
{. L& J! \9 B: @3 x( a" _
' Q9 ]( ]! q/ N5 e# G' H: r* _+ s /* Initialize BSL */
; ]/ Y7 n9 q3 f- ^( A, x3 E EVMC6747_init( );
& z8 K2 |$ I" l /* Call evmc6747_intr function */
9 f* C0 E) y! B& g aic3106_init( );3 i N( t+ F( j
while(1);
) f- ~( i6 m/ R9 Q) Z$ h7 L+ I}
4 q5 J$ I3 ]! J% t9 Y8 X( N2 n7 X
9 v1 l* b6 J( j: @* h5 M8 U' [
5 ~2 t( W9 p5 }" eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 w. t% E7 {0 @% b
/* Initialize MCASP1 */
. c% }' M& m) I' ^$ n3 Y mcasp = &MCASP_MODULE_1;7 p$ c) S' C9 D. |, t# k6 Y) z+ ]
mcasp->regs->GBLCTL = 0; // Reset; x/ B+ C+ ?! s( ?/ L- x. T: }
mcasp->regs->RGBLCTL = 0; // Reset RX) Q2 _" s0 X) E7 m+ Z
mcasp->regs->XGBLCTL = 0; // Reset TX
% A2 h0 s) j1 p9 _9 w% d+ V @ mcasp->regs->PWRDEMU = 1; // Free-running
4 R! g" @/ F2 [: \, w# \2 A // configure McASP0 receive registers- T# q; k& P# O+ M* ]# V. m& n
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: I$ F9 h$ Z* G$ }9 T) \ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, Z$ r" t/ ?" m, w: u' R
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 q2 ^0 Z' R: ~* Y. o6 f% z/ y9 J mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ w% i7 l3 W' c! M8 p9 i5 d/ a
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 k* e) L8 g( W, ^. j1 p8 ~
mcasp->regs->RTDM = 0x00000003; // Slots 0,1% A& S( T% h/ C& W: K. O) t( }) ]
mcasp->regs->RINTCTL = 0x00000000; // Not used h! [: ?. M+ P" X: d" S
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* x( K' P7 r$ k0 U' z7 X0 }; C/ X7 `0 v) x/ }& M
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
8 r( N( g3 T3 e9 Q! u- [ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 t! j8 }8 u( K; H6 ]2 h
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' g+ }! r+ J5 a! V7 K mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: h) }+ s2 W0 D4 x' Z, ~ S mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK% k; c/ N0 m/ T$ I
mcasp->regs->XTDM = 0x00000003; // Slots 0,16 U& X9 y5 [! Y6 p, p
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit' k6 k% `4 g& O) C
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 j& K$ x) s0 K2 c- ^) B, a6 i0 z/ n# F9 Q5 h
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 O# p ~ F$ d8 p B
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: T3 y8 m* f y$ D5 M& i5 L; F mcasp->regs->PFUNC = 0; // All MCASPs
' U' P* g( @3 f2 D9 W5 A mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' Z' X9 D3 ]) I0 A8 c8 |) K( s6 F/ `4 l: k! Y* a2 _/ y8 A
mcasp->regs->DITCTL = 0x00000000; // Not used
: h! S9 u& i/ r. G. R9 s+ i mcasp->regs->DLBCTL = 0x00000000; // Not used
& {% d; v4 ~2 S f mcasp->regs->AMUTE = 0x00000000; // Not used
9 x3 Q4 B* t6 b. y7 k( x6 N; ?2 _% H! I
/* Starting sections of the McASP*/ v* R% d) X5 d( t
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' j1 @5 o( G! G' o' ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # k9 K, h6 s$ j8 m- a9 @( e" _# k! y
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 a+ }, v1 n& _8 P4 H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" q$ o1 ]- f$ x3 y/ w/ o
* s# R. o3 b5 _6 e8 k5 h" P mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, l8 B* V% N; v0 `0 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 Y& G- L4 ~! {* V7 ?1 i) V mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 Z: e8 I# T; a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! L" I6 C+ S7 L! ?' A
: j( x2 [1 E Q) Q
mcasp->regs->XSTAT = 0x0000ffff; # C; U2 M9 u- f. o
mcasp->regs->RSTAT = 0x0000ffff; - f2 a7 }: B% N
s+ ?6 P5 z2 p0 L
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 u3 ^7 N1 C3 o6 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ \% F; k/ W: q2 P* Z
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 d4 [* A: `- X% j( j0 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 V, L& P3 {/ W$ L! G4 _
7 O+ F% W+ G0 K/ J, x- B5 O" \
/* Write a 0, so that no underrun occurs after releasing the state machine */- e6 ]9 g+ b2 _* j% B6 [3 _2 Q
mcasp->regs->XBUF5 = 0;
- s4 s8 Z* Z4 Q+ O9 P# F8 Y; `: v mcasp->regs->RBUF0 = 0;: G. R; q/ K! q; o+ j
+ X, @/ w7 E4 U' H/ g mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( ?8 S$ P/ g g5 {# }0 j1 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( E8 {1 U# Z: }) R, f
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) f6 A# Q& F. ?, C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' V( {- K# {" y" J1 \- u6 Z
- e9 a8 i2 e* w9 ~. e mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , W: h6 t. }' K) [) n" C2 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' U# y2 u- ~4 T# x mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ B; n3 v' J2 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' o: k2 V/ X$ r7 E- w6 z4 Q
' [: ~; q) e4 [+ T. U CSR = 0x0000;) X. V3 U7 u c& ]8 q4 S; I
INTC_INTMUX1 = 0x3d;, `- t% E8 ~, L8 }, p0 M0 j; x
ISTP = (unsigned int)vectors;" P6 x# B% w* _4 p
ICR = 0xFFF0;
% d4 ]0 j! F! B IER |= 0x12;
$ u. Z P4 w% ]1 M( X CSR |= 0x01; S T L9 W. l9 l; v/ N7 t+ l" A
" h" \, `5 @; K" ~- l$ u8 d
. D- X: [1 `! i3 T; _" Q/ ~% L3 ~
2 [: X; q0 y* @/ J/ f% e& a
还有就是两个输入输出函数:5 x( H' V* A; U! z9 E5 a; V" n' y
void output_sample(Int32 out_data)
( o) T( U, M, C% r{! o( [2 d& W* S0 v: ?9 S5 U
AIC31_data.uint = out_data; 5 e! v M/ ], Q4 `1 N! `' `- u7 Z4 S
MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 V+ h4 z" q |}2 h, c8 @% A, v, z
; A) y5 D5 t2 U$ V! yInt32 input_sample(void)8 e4 V6 M( m# {! l% E; H9 j
{
1 S& r, X# r+ ]& a AIC31_data.uint = MCASP1_RBUF0_32BIT;
- N+ \/ F3 C. h) I return (AIC31_data.uint);
1 Z7 B8 o4 }1 Y. ` B# ?6 f% C}6 e- a1 H6 D' f
% S7 _0 o- I+ M5 I; u+ I [ |
|