|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 C8 V( S5 A" V
main文件:
5 Q- `$ G) r/ i- r: [/ r. A sinterrupt void interrupt4(void) G5 M7 M: o4 _
{, r) _2 [. r4 {8 x
Uint32 sample;
/ r/ u. v) `4 a& X6 q. v1 U% }/ f1 ?+ s4 J) h' L4 j D" A
sample = input_sample(); // read L + R samples from ADC
6 S4 O; t Y/ J& |2 u6 E3 K output_sample(sample); // write L + R samples to DAC % L4 U \) A- D+ ]/ m
return; }0 p' @& B& T4 b
}
% {: R) s. C! A( B7 v2 f7 |' Z9 s! O& i) r
int main( void )* c4 q. _: R i) t" ]
{
( v( u2 v8 |& E+ N' T& g G5 E# h$ {. o) b
/* Initialize BSL */' Y7 N y/ A0 ~3 B9 K0 j5 B/ d! X+ @5 @
EVMC6747_init( );! `1 ]- \1 U1 ^2 S1 }
/* Call evmc6747_intr function */0 U7 a! c7 X( z4 o% j) t" p( E
aic3106_init( );7 ^3 `- K( w4 H, p# s1 D8 ]
while(1); J3 }: q8 x9 |8 r7 ]* J4 o3 M, \
}
: t; t9 p# `4 a
- c$ P4 [/ x% G! r% Y( a- Q# ]) c
' q2 ~; R4 N" l) Uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 G/ C" L) x* |: s) _; X: ~$ C* N) f
/* Initialize MCASP1 */
! M, g0 h2 m& X | mcasp = &MCASP_MODULE_1;
0 G& z8 N, N3 t; y* D( G$ s5 T; }: l$ A mcasp->regs->GBLCTL = 0; // Reset& N/ J. Q8 P* @6 U P q. ^3 X
mcasp->regs->RGBLCTL = 0; // Reset RX
6 f. [" r0 z+ Q( N5 B mcasp->regs->XGBLCTL = 0; // Reset TX
; e) S5 W) l) o9 s/ d* { mcasp->regs->PWRDEMU = 1; // Free-running
. _% X% S! b$ @2 I // configure McASP0 receive registers8 B% r5 z5 P! W* y; ^- L
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ h- d' ^. }7 R: R' X: c/ d3 ?, p
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" s* D9 h- A) B/ ]# U3 ]: H8 ` mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 X$ G3 z' [( l! F
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) \8 G& \0 s; n
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 _/ K" k& V2 S: j D3 n( X% d
mcasp->regs->RTDM = 0x00000003; // Slots 0,1, C" v/ {% K7 d- X x5 t8 n
mcasp->regs->RINTCTL = 0x00000000; // Not used3 S) u6 T6 v: r2 q! u$ W
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; u- w6 g7 Z& f2 s9 ?" W1 W3 a6 Q3 p
: T* J! Q1 ~% C; X# c, w0 m4 X mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# W( Q2 P+ ~ _ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& U, j8 C0 F1 e! A mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 }7 }! ~/ A% D mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 R0 k' u; R5 |& V1 C5 ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* p- X9 t7 ]* Z! p0 @6 P4 q
mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ B' h" i/ z2 k5 o+ z5 y6 t/ S! ~
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
6 U3 c7 ?+ X- H% r mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! R) G" g5 s/ q
& K) G; S E5 {0 t" t mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* ?1 Z/ k, l; ~7 L6 @5 z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 F. Q6 ?: x' ^: E4 a) W
mcasp->regs->PFUNC = 0; // All MCASPs. L5 m, w- G9 d
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) Y% D V+ Z6 L+ j: j
+ A" X5 o3 \; ` O& n mcasp->regs->DITCTL = 0x00000000; // Not used6 o2 X% q* `; U. k
mcasp->regs->DLBCTL = 0x00000000; // Not used
& ^7 a2 r/ x- T: D; g+ O mcasp->regs->AMUTE = 0x00000000; // Not used- [1 p5 v* `( s( J: a" ~
& [! X2 [- q( E3 P/ O
/* Starting sections of the McASP*/% p$ M0 m2 G8 B( }$ U
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. X" |; G0 k h' }- ^/ t7 ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & ]# X2 O+ m1 j- {+ ~2 y9 }
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ o+ H3 F# W% U. e% @" h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- E3 A! X: c Z) w8 a2 ?
3 M& g( ~- B! x, X1 m/ C. }
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& \' D2 r* F: q$ m8 _6 P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% O" U5 @0 \" \/ s! K: Q
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # @. n1 T$ u5 C& @6 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );3 F8 Q0 X7 S0 h$ a" |; Q1 x
% v9 m8 e8 Z" j% A* D$ d8 ~* s" [ mcasp->regs->XSTAT = 0x0000ffff; % U9 S R6 k( P' p5 G% \( ^4 G
mcasp->regs->RSTAT = 0x0000ffff;
7 m7 w. ]2 R5 {( ^. A# v2 G( v+ M7 ]
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- {; v5 O( ?- L9 ?+ t/ |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# N+ b5 T& r8 }4 X' Z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , N# |. V, P5 Q4 w: j& j$ |5 S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" D6 [5 g" | G* q
/ ^/ o, _. W# X0 O7 E; ? /* Write a 0, so that no underrun occurs after releasing the state machine */$ r# _$ h1 j) h: d; D! Y
mcasp->regs->XBUF5 = 0;$ `) j; F: _* ^5 N9 ~+ w. {
mcasp->regs->RBUF0 = 0;
9 c& L* D+ H: q0 `. T, Z- [3 y* j7 Y- D, H/ ^2 c! l* J
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " Q! T0 l. {! h+ l. ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& T9 N3 U1 F) Y+ E4 [) e
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % v3 ?4 _7 G( \. B' E0 |3 J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 ~% v7 }! e6 e+ M2 N. H8 N) K9 s9 ], _7 W9 c* s/ G5 E( B% x$ Y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 p# T5 Z+ d2 }- ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& Z4 l7 d# l0 C1 K! n3 F. t mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# L: z% y. j9 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% r, f7 e7 z9 f* P6 O- i. [& C! V
# s* u7 d! A. s& z CSR = 0x0000;
) D; G B: j6 A" W: O+ t9 h INTC_INTMUX1 = 0x3d;9 M# {9 V0 b# W7 n; j
ISTP = (unsigned int)vectors;
$ z% k" B# Z. p% O2 H) B ICR = 0xFFF0;
{9 k) E" T, b1 m( U3 x IER |= 0x12;
7 k) [3 G- f/ ~* q! `6 b& S5 H CSR |= 0x01; 0 b: |* R4 O+ W& z5 j
. V: m/ n1 N; h/ V( p4 y8 t+ c& c- w# N8 O: v8 s% Y! }
; m0 y8 e* J- m还有就是两个输入输出函数:
: z0 \9 K& f4 Wvoid output_sample(Int32 out_data)
$ t2 `, ?' K6 t& Y8 k* L{
* e8 P: K( G. U% a% i* p AIC31_data.uint = out_data;
4 z5 n9 l1 A4 k3 {3 f MCASP1_XBUF5_32BIT = AIC31_data.uint;% t* I, P5 W" ^8 m& L6 p
}
2 c# s$ y% b# a* t
" S( F6 [! f/ QInt32 input_sample(void)
, H7 w- M' }9 ]- w. S }* B) G: h. N w{
! A0 l2 }) i3 f: L) o. b3 v2 s AIC31_data.uint = MCASP1_RBUF0_32BIT;9 [" B" x8 |0 B7 Y o4 U
return (AIC31_data.uint);7 R) b+ U |) H$ Y
}4 k( I) z4 r$ D# m. A5 S! E
z3 y3 i2 h1 t' g, e! x |
|