|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, @# [* }! [( B$ @main文件:
+ ^9 l. O2 r$ hinterrupt void interrupt4(void)
+ [4 g3 i; Z+ A: W5 j{+ I# t9 F' e5 I2 F4 ~ t
Uint32 sample;: c7 c; ]4 a' b5 Y* V" ]
L; H4 x# x/ P3 m4 q5 @6 i
sample = input_sample(); // read L + R samples from ADC
: z3 l I5 k8 I0 U* J/ y/ r. x output_sample(sample); // write L + R samples to DAC 5 j# l: ~ C" W8 ^2 a, A, z9 y
return;
+ k7 I! r" q* q$ V% ^+ m6 R}
& T& N# N7 ~$ g6 r1 U
) \% y5 ~1 G* Y6 O6 Cint main( void )1 j. @. j* {% T+ X8 c
{
! Q) g( |, k) ~2 K: i! t. |3 A* B& x2 N
/* Initialize BSL */+ {. ?- s- n& N8 Z$ M/ {; X1 ~) |
EVMC6747_init( );
7 y' J/ m X$ e( t S /* Call evmc6747_intr function */ R6 M6 Y& c% } S# I* }7 N
aic3106_init( );
7 r3 F' X# X1 k% C: Z% a while(1);" L: x1 f: N& p2 N( ?
}. N, J: v! B! _- L
' b$ @0 N1 T8 ?6 l: Y% X( Z3 c! M/ T' `2 a% K9 a9 `% R4 D2 k
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% g S) E, {5 _3 s/ k
/* Initialize MCASP1 */ V# M& l, A" P( k7 J; N8 P: S, V
mcasp = &MCASP_MODULE_1;
( ?: z& X' [, E+ R' Z0 r mcasp->regs->GBLCTL = 0; // Reset f9 w4 L$ C* s' u3 i2 o/ s' i
mcasp->regs->RGBLCTL = 0; // Reset RX
; M0 U) `' g3 a- `5 K, X P! I- V mcasp->regs->XGBLCTL = 0; // Reset TX
R) X6 y3 u/ ^5 j mcasp->regs->PWRDEMU = 1; // Free-running$ n% l- K' ^; u+ @* V
// configure McASP0 receive registers
' q& x# k. T2 v& h mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 ]) E2 d, P T9 ~1 m( ? mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- U* M* r K( W! Q6 z" m mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word& f- V( }5 K0 `) ^8 H! O
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ d4 o7 o; M" U1 P: x5 d9 l
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) n# t& s9 w1 F( j+ ^
mcasp->regs->RTDM = 0x00000003; // Slots 0,1 \+ @6 G$ Z% P" n2 z0 k& O
mcasp->regs->RINTCTL = 0x00000000; // Not used
O# v, J6 K; Z+ d! [& C& B. ?/ i mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 L& O- {! G( D8 I# {7 F+ A2 Q- T/ K* |
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used* F8 H& [. S, ^5 F
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 Y$ n# s, d- X t+ D- `+ c4 r
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 Y5 J+ Y* D- M4 S/ _- ^% G
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, U, M/ z, W: i* g \, s& t mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) k4 I5 S4 t: c* L8 T3 K \ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 l% s" \* J+ E K2 c. h. ?( [ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ P& ?6 i& X e- K1 D mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, b5 _' ^/ t( n+ p/ M
" T! L( @* T! f0 r
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 F* Y- x2 \7 V- k* y; E( r. R2 {( j/ B mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 v" f* H) h- n- M5 S mcasp->regs->PFUNC = 0; // All MCASPs
/ J& A& q" P7 u, F' }$ z/ h mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" W' t2 z$ V3 \# V
* V }7 u2 T2 \2 h4 N mcasp->regs->DITCTL = 0x00000000; // Not used. v' Z$ ?/ n7 O% ^& C
mcasp->regs->DLBCTL = 0x00000000; // Not used5 E, W. {6 v$ Q2 X; B1 Y
mcasp->regs->AMUTE = 0x00000000; // Not used
" K. v! J4 I3 P+ J, g l( A# |3 k+ y: X5 W7 [1 e" q
/* Starting sections of the McASP*/ }6 \( n7 k- B3 }+ ^
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- {3 n+ u( b# }+ d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ u, ^4 V$ G, g. \5 w# ~ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' {0 p. X( ~' @* i/ l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( q6 V/ Z) d2 L# z7 C8 b4 y
1 n7 f! j# j$ g) P6 X1 r) B mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 u* u; G" g- n5 o3 \* q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 {- j7 n5 c: d2 m+ Z mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& K2 l- }% u. H5 I. J: B% \7 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ g4 N, _. G, f! |0 M2 a' W
- d* X. H I# y+ ]! s' M. `; K
mcasp->regs->XSTAT = 0x0000ffff; . v; P Q/ V Z* y/ t5 s2 g
mcasp->regs->RSTAT = 0x0000ffff; " q8 h3 I1 ^4 j0 k8 }* d
$ R6 N+ f. c8 W) L mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; E, T6 V6 q' U, g6 U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 G$ |2 e& b7 k ^8 A- L$ X mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( i" \, w, t% A4 |4 i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 V; p) \: P7 K- Q$ F$ f
" ]6 k' P, `, @' s! ]2 F) a4 ` /* Write a 0, so that no underrun occurs after releasing the state machine */
" l1 M' N) u* B/ a. ~ mcasp->regs->XBUF5 = 0;
; y- S( q, [* k6 N6 Y mcasp->regs->RBUF0 = 0;
# x/ u: j7 q% `- ` J; g
/ T% M* t$ W4 ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- ^- P8 k) j9 d8 h G4 R" h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 B3 J! s1 z% R8 W% x% u6 W6 p
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 z! e1 L- O' B7 |# a4 N* e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& e L, U+ z4 N' j& f) z1 z, c- Z, h& n/ K
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 }8 r$ |, |+ ~: t s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, Y I/ I4 \9 [1 j+ H
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% J3 G% }4 p. T; @+ J) l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" [9 y( E) u9 u$ z9 E$ m, n
U4 G1 s. F# o3 M. E8 E CSR = 0x0000;
+ i" k5 y- W2 o( |3 n, Z4 u' U* [$ S INTC_INTMUX1 = 0x3d;
" F) `+ Z! F! L7 B, u ]! [! p ISTP = (unsigned int)vectors;
2 k1 Q" t, i6 s8 J) {9 v ICR = 0xFFF0; : L6 y6 {4 e9 @. ^) G! |: R9 a
IER |= 0x12; ' Y8 }0 S7 ]8 ]/ b
CSR |= 0x01; . m a% n3 u" e% h9 s6 o
; C. v: k; x- i; k) ^
9 m& S* d7 W+ s, \' I- Y7 w1 z
6 E, o- k# |0 m2 m0 Z! ~还有就是两个输入输出函数:
! \& Z; T2 H, i% A% wvoid output_sample(Int32 out_data)
, g- P5 ^- o$ z: n5 v{( S# v2 e- z! Z( v2 |
AIC31_data.uint = out_data; , @# B b; n6 p
MCASP1_XBUF5_32BIT = AIC31_data.uint;
: O, P0 g$ S, s9 ]: j: C4 A}7 ^, W2 G0 d8 q, l4 k
4 D' p# T0 F1 j( z6 I1 D! o/ d
Int32 input_sample(void)
0 m6 `. r- Q: b$ }* p{
0 s' {) k; X- t: h3 I AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 t# D3 g3 I' L# j4 x0 A5 U return (AIC31_data.uint);0 |1 G) J0 f' T7 o
}
0 l+ Z, ]2 |1 T! @+ i/ [! Y
4 {1 s$ R+ O9 B) y$ T* V8 G |
|