|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 E9 U r, N0 K @- Nmain文件:5 t) |7 G5 K; ?5 p8 O5 [
interrupt void interrupt4(void) ( D% q0 y. L" w' K4 z6 }! W
{6 L+ k# m1 `9 r& a/ x
Uint32 sample;2 ]% d g/ I3 C+ q3 G6 E
! d4 v. @! \3 ` sample = input_sample(); // read L + R samples from ADC
, V# p3 \: o W/ D output_sample(sample); // write L + R samples to DAC
D9 O5 O, e" V+ K7 T return;
3 @, b7 ?: x4 W5 ~8 d" @* j1 k}- e" E( Q( G1 `) {2 W# H
6 F/ E" q( S. f8 p3 t, v4 x2 {8 Bint main( void )0 g$ T( ]( x" I" |' o2 o" O* i6 i5 a B
{
& ~* q: t/ z$ ^; o, S
9 h1 F6 q* k" a. s; W: Z /* Initialize BSL */7 k1 ?' M7 b, C
EVMC6747_init( );
) g& G/ b% b% d5 |2 J3 j, F7 f5 Q /* Call evmc6747_intr function */2 w* K, C/ H* W+ B2 v7 t1 A
aic3106_init( );
) i2 Z0 y: K5 P1 Z while(1);
" M: C) T! x6 g6 R* J1 v# D) T}
: D- l6 n" c4 ~& I# s- \
1 `: j# r' ]+ {7 t& V6 S, {; n+ m( f' `% ~/ ~: T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; y- L" A- s U' F0 r' ^2 B# _/* Initialize MCASP1 */3 z+ h( [+ c% U
mcasp = &MCASP_MODULE_1;: u, n) @) b, ]) f" b8 U) I' V: u
mcasp->regs->GBLCTL = 0; // Reset( \, f) H: d/ {! Y
mcasp->regs->RGBLCTL = 0; // Reset RX& u1 h( ^; R p$ s2 q$ F
mcasp->regs->XGBLCTL = 0; // Reset TX E; ~/ d; N5 ]6 Q$ l' R V, [" s
mcasp->regs->PWRDEMU = 1; // Free-running
" V% v+ n9 o5 u# j; W0 J // configure McASP0 receive registers
7 J2 }& [( K8 t7 F8 v mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 W+ R& k# E; ~' e$ Q; V# c mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ {1 a$ D$ D( _; Y# i9 {% [+ R
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 `. s1 `6 F4 h. N
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; l* U; f( z" A) |, {) q mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side). s/ n. Q: G1 h4 N, Q. F
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
b7 N& H& n- Y/ e9 p7 v1 b mcasp->regs->RINTCTL = 0x00000000; // Not used
1 ^/ O8 z" W2 \2 @/ ` mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' x* ?, h- q/ J4 s* q$ h( j
# M, K0 \; K& Q( k; O, L8 `4 s mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 |' H: L" b- {. o! {! W
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% b* \% Y; V' Z7 B2 i# i7 f5 N0 T
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 p8 F1 m( ]% b mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! n+ @* }5 l% e V: V mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% _$ p |9 j: c2 `1 c2 t mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 K* ]; S$ u5 ~! d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
( Z9 }' X, S6 X- \: ]$ {) ?2 L mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 M, W! C8 ?2 `, w. r8 e4 m! _! v/ _! ^( E' x- L0 D0 r7 D
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
' g- j0 z, q4 z9 b- J mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) ], a2 n" O7 L4 A3 V
mcasp->regs->PFUNC = 0; // All MCASPs
- L' J E5 i1 H6 r6 D$ P* k mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 k$ m h% i4 M2 ^1 X3 j, _2 Q& N* x' Z
mcasp->regs->DITCTL = 0x00000000; // Not used; ~+ t. o& R7 y
mcasp->regs->DLBCTL = 0x00000000; // Not used' Z: T& ~/ z, d7 q; R8 i
mcasp->regs->AMUTE = 0x00000000; // Not used
: Q. b5 _8 ^# C. T# a2 v
# N; P' x* ?2 Q) r0 Y/* Starting sections of the McASP*/
5 N# M- g6 e; o: @3 b mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) a1 D- }- F n U! P! I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
' ^$ F: ~* T: X8 T! H8 t9 l mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; e' U! e" p! P7 t: g2 `2 V" C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ~' z; _( k% Q; _* y8 o* _7 a
# Z$ @3 V: M* E! g: V mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 \ O' d6 {# P/ F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 K5 ]; R6 p0 P
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
|8 ?) H, T6 B/ X* v5 `7 i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ f$ I' Q% }; l# c7 z
2 r& T' w! Z. d* D7 k mcasp->regs->XSTAT = 0x0000ffff; 6 B' n* K# r2 P5 q4 k1 a
mcasp->regs->RSTAT = 0x0000ffff;
/ ^* T4 R& j$ _
" x1 }" n% S2 g% v mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% B+ I+ ~& P, D, b% B/ R. |( ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ P1 q8 }1 }5 G# Y6 ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* F, C K- v7 `, v; Y9 c9 l2 `# M' e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* M& \4 `' Y6 H, b& t0 \' r+ Q$ i: k
6 n! |: A: \3 d- K; \0 K# x
/* Write a 0, so that no underrun occurs after releasing the state machine */% W9 N) Z4 P5 l2 A7 [* @, L$ D4 T+ {
mcasp->regs->XBUF5 = 0;
, {* @3 H+ O: d6 p+ z+ b mcasp->regs->RBUF0 = 0;
- ?& Y$ d2 I/ e% i6 M' c; b
# c" I3 W# Y. F; r( _0 i mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . \& B( |1 Y8 b& o& y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* t* v! s6 x1 |. a2 }1 q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; g3 Q# |6 N3 g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; u% \1 L8 v/ a2 E$ Z
4 B5 J& d3 `+ \ y( M" T; s$ O mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + B8 }4 @, Y5 [$ P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% d- t' b! C; F3 G j |
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : L" D( j$ J7 R, `( j. ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 y& {3 _: R% z' r! K; y
$ X: v0 q1 K( { CSR = 0x0000;& n8 R" u( [' T4 v d
INTC_INTMUX1 = 0x3d;
- z4 D n7 H7 g* f ISTP = (unsigned int)vectors;
6 R4 t b; l3 x1 e ICR = 0xFFF0;
+ z" A4 x. B/ P& S9 j& z IER |= 0x12;
1 z# j, ^6 e: D4 ~ CSR |= 0x01; ) y5 y! l/ M p) e( e6 M1 p% \
1 C! j! p" X& f- ?. q# |+ p7 F! _
; ?4 j- @7 K3 ^8 w) a3 |7 Y
1 Y. n2 s. e. R8 J( A9 ]2 h
还有就是两个输入输出函数:7 l& m9 {2 z7 l
void output_sample(Int32 out_data)3 z n/ A( }( l# h5 J6 B
{
( B( C1 {# R. H4 C3 y AIC31_data.uint = out_data;
+ I: L& B; M) M" v MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 n2 ~; S# H% V}4 {0 y. V% N! e
6 [% i) `) e! X/ |6 Y* D9 b: cInt32 input_sample(void)
' F0 G6 h8 J1 M2 {& v7 O# t{ , V# K& T8 h, S/ H, U
AIC31_data.uint = MCASP1_RBUF0_32BIT;+ u D' `9 f# t5 T
return (AIC31_data.uint);
0 _' N) M7 X& f+ W, [}7 [/ \3 h4 b. Z2 ]6 X, {( |6 W4 @
4 C" K1 V: F4 l& b& l+ c/ C |
|