|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 e' P. `$ }* |( [+ ~7 K
main文件:
7 K# Y2 a) G# {interrupt void interrupt4(void)
( ?5 L( R) ^; u" O{& T; W) ^2 j) f; T; l
Uint32 sample; } K4 c% p( D: Y; R
9 S4 C9 X. J: ?3 A! Q sample = input_sample(); // read L + R samples from ADC/ _+ V7 }; A# R: B9 e/ k
output_sample(sample); // write L + R samples to DAC
' ^! i) j# e' j6 Z return;5 I. ?2 I6 x2 L! M( I
}: ?. Q M5 `- L
3 E2 t6 @9 r. L( [/ I7 w
int main( void )
' O |6 ~: c. n% J{) l- L+ L. K% a4 M& _+ H; @
: c8 K+ P' `/ D) J- ^# Q& m& _ e5 Z /* Initialize BSL */
& y S6 Z$ L! Y3 _9 ? EVMC6747_init( );
* {( t& ]' c4 m" `" `0 K: J /* Call evmc6747_intr function */: W. \! T9 m% [- j9 p# L
aic3106_init( );
6 v& p/ K; h0 i: O) a' T4 `; } while(1);; p e; A4 s- k8 R. T
}9 C" l$ z3 h1 U( I6 A6 N
\7 z3 H3 J' i# g; I8 ]. t# B. ^8 E) W7 F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" e) y9 j3 v! m! ~; l3 ?0 N
/* Initialize MCASP1 */4 ~" R) l8 b# z- z9 A
mcasp = &MCASP_MODULE_1;1 b: M" E& i* z' T0 ]
mcasp->regs->GBLCTL = 0; // Reset9 Q2 x; w8 d7 u9 s6 O4 _! d; ]
mcasp->regs->RGBLCTL = 0; // Reset RX
' r0 H$ n d/ ]2 D3 e5 W2 b% O mcasp->regs->XGBLCTL = 0; // Reset TX
. T7 U5 ^, S; Y* c8 X! h mcasp->regs->PWRDEMU = 1; // Free-running
6 S: `7 F5 P) ~ // configure McASP0 receive registers8 }7 G& r. ?: ~: F
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
& e0 `/ R r9 `: X mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
{$ d0 c4 ^- ]1 t8 n: o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 i: x- J% W) _ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 K \% E" x7 v2 Y) C- r% z3 t
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 S4 k( ?9 a& l, h mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ R' T* {1 p; a mcasp->regs->RINTCTL = 0x00000000; // Not used; E1 Q2 J3 o9 G$ C' H, I2 k
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% `( S$ t" y( g) H9 v8 F$ ~. A: o+ o3 n/ {- F0 z U
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 Q/ Q& s+ _( g3 q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" l2 P B7 l- ?) s( ~% a8 K7 @
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 O" v4 k4 }$ G3 d
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 X0 G6 d3 J( I/ N( s
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; Z) ]) m4 X4 {; G; }0 X$ M
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 ~+ N- s+ K, Z& R# U mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit' Q: X/ R( u* Q
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. e9 q8 `/ N/ H- C+ i
- y+ e1 a/ u' S
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN D5 F* ^8 q. L+ J0 I
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT+ O4 ]- F0 `' u0 F7 p5 T( V) f+ [
mcasp->regs->PFUNC = 0; // All MCASPs
& q+ p9 Z! v& {# Q+ t7 F. ]: \ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# J0 k: [: V, j" s" f
+ H& W, r# H- x( n/ R2 g' S4 u mcasp->regs->DITCTL = 0x00000000; // Not used
( |1 G- d* u% T; W mcasp->regs->DLBCTL = 0x00000000; // Not used) t$ O* j5 s9 h. T) x' N
mcasp->regs->AMUTE = 0x00000000; // Not used: i" U- [2 ^5 @' e5 Y0 _
0 f6 Z7 @, [8 O; V. n4 E6 e
/* Starting sections of the McASP*/
2 F! I- i E: q) I7 Y% S. { mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! l" k0 C0 E$ Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" \& K) {: N+ A5 ]$ L: O1 F mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % t3 ~) Q& c) Y0 s6 `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. r1 x( D7 x7 ]6 X! a$ [. D2 a- P9 Y6 [/ _/ a5 A
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 t Z0 J1 \. r( R B1 N0 X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# Y: e( S' s$ K6 z* |) p mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" }' S; z, z/ a9 R4 L* X4 J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' i+ U" T* Z% }
" i" G9 W7 F1 s8 D. D mcasp->regs->XSTAT = 0x0000ffff; : A: f2 Q, F. j: b# t9 X
mcasp->regs->RSTAT = 0x0000ffff;
( n4 m. X/ t, E; o2 k. K7 z! i8 q1 A. Y2 b
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 X. n& \ N( ?. m0 ^9 O4 [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 v# b, `/ \+ U' {- S mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 k u0 B1 [ R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 `! L$ e" m! {2 V
7 h: C9 g# n7 B! l, o2 ~5 q! } /* Write a 0, so that no underrun occurs after releasing the state machine */9 A& c) M+ Y6 j' m2 k( Y+ A
mcasp->regs->XBUF5 = 0;
) G) R# e3 @" f8 j3 N, d" \, w mcasp->regs->RBUF0 = 0;6 d( Y+ D- w3 M2 N
3 m1 b8 R3 z3 |/ u1 V% y
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! Z* D. T7 J! g0 H0 A' L# d5 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; f) S& F( ~+ T8 d+ F+ {7 [ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 ?# k% j( z g( y9 G% N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 z# w& r* y& D* s( E- g6 K' w0 ]+ k( K' v# d
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 E4 b7 q* j* N; d: M" w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% J! \' b) y) L8 C, `* k, g; u o2 h1 K
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# `, \6 ?& ~" z) H- g% K7 h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 m6 d) ? }% k6 T
3 Z5 o! N3 p K( Z4 K/ b3 B' }4 ?8 ] CSR = 0x0000;% x/ K0 ~6 ?+ Q) K9 v2 A. K
INTC_INTMUX1 = 0x3d;6 _. {( F' S$ j2 L; u) t
ISTP = (unsigned int)vectors;
* x- k6 S6 s0 D- n& r( R8 L ICR = 0xFFF0;
- T% B* [+ R0 g) N; W& F IER |= 0x12;
+ s# j3 ^0 s. q: }+ e4 R4 R; K CSR |= 0x01; ; O, H" _9 Y9 v
, O: [2 `# H7 ^4 W1 q
- F7 x+ W, }- B. P p; y+ q1 e; p
+ o+ S O, w: U还有就是两个输入输出函数:2 @* y# O$ l% b7 i
void output_sample(Int32 out_data)* G) X* s- M( Y! {
{+ j! b. d2 ?6 r# S
AIC31_data.uint = out_data; 2 c1 i& t6 x% ~, N/ |; `
MCASP1_XBUF5_32BIT = AIC31_data.uint;
[, p. j% d8 h$ \. ?) q$ y}: t- a& l) y- T& I' {1 S7 y5 e! G
, [% G& X$ x% R0 t% ~, d- {
Int32 input_sample(void)" Q2 E. M! Y4 S6 ~
{ 8 s: ?+ t/ U& v: [- {
AIC31_data.uint = MCASP1_RBUF0_32BIT;: `/ U1 H' p; C
return (AIC31_data.uint);
: x2 E. [# q3 l5 ~" i, ]" z}* y+ Q0 L4 g! S% F3 d9 z. {
+ B( Z/ f) F7 P! }- k( X
|
|