|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 y- O) l: H5 u6 M' v5 }, p) S
main文件:
& n9 v! b c vinterrupt void interrupt4(void)
2 e. ?* x& w3 H2 `& j{; {3 A2 `0 h. \0 g0 s9 I, H0 q6 ]
Uint32 sample;- p: ~0 d. X' Y& m* {$ E4 V( v6 t
+ V. }) S6 F' B( B+ b sample = input_sample(); // read L + R samples from ADC7 N5 I2 g! i8 m# X* f9 y
output_sample(sample); // write L + R samples to DAC
1 S* W, o' l1 j. P* C- c return;5 {! \' a: m+ U/ {* {
}7 v# C4 G9 Z; c% g
$ s# C n+ W+ W9 N! B) D' f$ ?: [int main( void )
2 ]" r# T$ t5 t& A" |' c/ R+ c{
; _9 `, G9 ?: v6 ^
% L2 l" j4 G+ Z( G* }: ~ /* Initialize BSL */& i9 q2 B' s$ i4 _4 w) }0 j
EVMC6747_init( );
! d) g; |9 d' |& r. i /* Call evmc6747_intr function */. |, `2 a7 e/ m
aic3106_init( );
& m3 x& u3 j/ i8 b1 | while(1);
7 O1 x Y n# C' y: }& Y}
S6 P. j: i+ K* T, R7 d' P5 G9 ]: A- G `+ I7 h
; D8 t6 {8 ]$ R+ c# h/ L8 Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 P0 ?5 W8 r: Y8 X. w
/* Initialize MCASP1 */! U" l6 i! S$ C9 b6 T/ Q- m1 W
mcasp = &MCASP_MODULE_1;
0 ?3 q1 P* F. _# P3 ^ mcasp->regs->GBLCTL = 0; // Reset
9 M7 p" e% U) U* } mcasp->regs->RGBLCTL = 0; // Reset RX' h" F. w0 A! H7 b7 [0 h
mcasp->regs->XGBLCTL = 0; // Reset TX
5 Z# ?2 M9 }& z/ w0 ^: t$ Z mcasp->regs->PWRDEMU = 1; // Free-running1 |( p+ f/ I+ I$ p _' H: q% S
// configure McASP0 receive registers @" q2 W3 N/ D: T
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
+ N+ }" L% a4 B! U5 W mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" G2 V% f* b. M9 H3 _
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, {+ v7 @+ ^1 j6 |. Z: C. A, `& V mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' _9 A7 Z, N7 K& H mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ e3 n' M. W. E' B! z! C mcasp->regs->RTDM = 0x00000003; // Slots 0,1) @9 g k. \% O% U6 w
mcasp->regs->RINTCTL = 0x00000000; // Not used
& s5 Q( {9 e( Q8 X mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ D5 d; L" j2 f3 u( W0 D* L3 O
$ e4 c, @: i4 o# R( A* `8 \; |. [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& b( a1 F, |& d8 e- C' v E mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& v% z9 i/ e7 r, K
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% v; \% g" w1 `( q8 C/ u
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& g& g3 J \1 P2 U" ^0 R/ Y3 Y J mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK7 U$ w+ L9 \9 T& o2 ~5 N
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' e3 ^6 @ F) N' p9 B mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! k2 H1 M, x* {& g n1 I# ~ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 b" I7 [) j4 h
! L9 z5 [% J# b! @ t% |9 d6 A mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 c8 C; p$ g( u6 G% h$ {: z0 D mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
9 c% F" O/ F* ^ mcasp->regs->PFUNC = 0; // All MCASPs
+ T; t n6 [' E; ?: C mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, A/ R/ B3 Q7 Q; d; L( s+ K
& F# Z3 t2 m' j& g/ a; u2 [ mcasp->regs->DITCTL = 0x00000000; // Not used' r1 x) U* \% z8 l& p) U
mcasp->regs->DLBCTL = 0x00000000; // Not used
: E* @8 p/ @6 \% U mcasp->regs->AMUTE = 0x00000000; // Not used
8 I I4 V3 q6 L+ \' \5 p: M
8 z& v y5 Q7 A7 F" G( `/* Starting sections of the McASP*/" @5 V, S; |7 @+ N/ X
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; Y& @4 [3 ~* c2 s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" ]. Z9 p0 Y0 L* Z$ ^ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 K! ?; Z& x( |4 C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ H% K0 D; \& {& {: {8 d
, H; |$ u. U0 m1 J- b& Z. ~. b mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ L- C3 {# V' a$ d3 d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# _0 c# W3 W% Q! P* T; m4 F' ` mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 V& m' i( W/ U/ A. _* c5 G9 o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ ^/ U2 @# j9 v r/ w b( b) q) Y+ O& X/ N6 V* u0 e
mcasp->regs->XSTAT = 0x0000ffff; 4 l0 |8 I& S8 |; Z7 w' D( T% W. a* r
mcasp->regs->RSTAT = 0x0000ffff;
/ S0 }% V" V7 b; M* T
' \& L) m2 [/ B( c: e mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 S$ O. W1 \) {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 u8 X6 a8 `. e; S! }' } mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + w& w! m( V6 z9 Y. q; Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 c( I: D6 f! O2 y* H) ?+ @$ k
/ n& ~ x$ E+ `: `3 n /* Write a 0, so that no underrun occurs after releasing the state machine */) _/ ~' d# x" f, G( ]' b
mcasp->regs->XBUF5 = 0;
$ i; j# w6 ?8 p0 h+ ?: j mcasp->regs->RBUF0 = 0; i; C: O$ P4 G& R
5 o8 O' Q& N% s% ^- H mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 _# M/ g# x" G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& V K |. d5 ^8 }; m
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : b( c6 U6 H$ g. f: w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, E# i* ~/ O" o
' t" R, E; Q" p. O( j9 c0 T, I8 T mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; p" S' G! V+ p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) J$ E5 Y0 E- \& o+ F1 b G9 W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 { e( Q* \9 B+ d% } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' w, Q. \2 u# S7 [
' Q2 y7 G$ r3 l+ W3 | G' `
CSR = 0x0000;/ Y% o" v ]9 ^8 V/ R! j
INTC_INTMUX1 = 0x3d; j* h7 n0 K! z% r4 r# {0 w
ISTP = (unsigned int)vectors;
0 v; s6 ^1 a5 t. U ICR = 0xFFF0; ' ^: [+ x, Z' G* E! c5 x
IER |= 0x12; 9 G0 [1 c- x) D5 m- X8 F9 z
CSR |= 0x01; t7 _5 l0 }* G: c( A4 p
- {$ i, c" \' ?0 D
: c/ T) B: ~) H1 R( Y; ^
" @- P2 o2 L7 W; m# i, ^: z9 ]还有就是两个输入输出函数:
! A. c2 |2 L& E% ovoid output_sample(Int32 out_data)
k. E% \' a0 c9 G, B{
6 Q3 i) v+ n, @# @: D0 v( I" g AIC31_data.uint = out_data;
7 d8 j: F- n; H" @' N MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 G* a& B z2 I' D$ L3 J1 {}" H7 ~, J4 V" F; n
; P7 f C9 J4 a a3 p `- I7 r
Int32 input_sample(void)4 k) {4 u' n/ p7 y* T
{
" M8 G/ u. `8 R, l5 K" Q5 u! l AIC31_data.uint = MCASP1_RBUF0_32BIT; ` U! |3 o5 L3 D9 r
return (AIC31_data.uint);
8 M: X) q3 `' T5 \}4 f; L7 }( `; ~, ?; @2 C- |" v* D
9 B; ~% P/ r0 \+ ^& F5 l
|
|