|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' H5 i8 g. }4 R0 c
main文件:: b& ]- q# V/ e
interrupt void interrupt4(void) ) r+ N8 s8 O/ T8 N- J; z! H
{* N4 x* {' N' E2 P. k
Uint32 sample;$ o) \0 B4 v4 B+ V D1 N
: Y* u& J" [8 V) z( O, B" e
sample = input_sample(); // read L + R samples from ADC
( ^8 Z2 b K% M2 B8 u output_sample(sample); // write L + R samples to DAC + x) G2 h! u( @ ]2 W! h
return;
5 i% d* F) C' A k}
|5 x. b1 }; m" u$ a% E7 Q; \0 ?9 v7 N
int main( void )0 Y; o. o* Y. Y6 |+ c3 m+ I _" H Q
{% K# e9 L, f& i" n+ m
& A( J+ }# m8 Z, x. u8 `' ] /* Initialize BSL */
2 R4 u$ [( S5 I0 ^) x/ V9 p EVMC6747_init( );1 R3 G. B0 K; H! @8 f
/* Call evmc6747_intr function */( W R" x- M- u( f3 x
aic3106_init( );
6 X# X; W/ z5 I while(1);6 ]+ ?0 G2 n1 R% m! R
}6 g4 Q5 W9 k" B! C2 K5 G0 V
& i+ r7 Y c& Y* U4 S6 m- [
, B# h; ]! h' ~ K+ A/ o# qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. R4 l, t$ r) P5 B6 J4 p) C. e ?. Q/* Initialize MCASP1 */; J1 ?& Q8 } R5 F$ D1 `% A
mcasp = &MCASP_MODULE_1;
4 v. v; n" G |, G* [! A& { mcasp->regs->GBLCTL = 0; // Reset$ L( i' _- ]( S k; Z5 k
mcasp->regs->RGBLCTL = 0; // Reset RX, t) ]$ U) F' a
mcasp->regs->XGBLCTL = 0; // Reset TX
8 m. L. M# z C x/ x Q& r% k mcasp->regs->PWRDEMU = 1; // Free-running
- g; v9 U& _8 n: c& [ // configure McASP0 receive registers, W) _& o H+ E
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 G! U, S1 ~% y3 r0 V mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! G8 J. W2 ^0 D0 j' p4 I* |2 | mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ K' {# b$ P* l* y; s) A mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( h3 n, D- \( R; P4 q
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 a+ g$ `; D+ s' ]0 l. I4 M mcasp->regs->RTDM = 0x00000003; // Slots 0,12 d9 c0 D5 s& ~& _2 ?! Q9 f
mcasp->regs->RINTCTL = 0x00000000; // Not used
. z9 e: O2 c1 Y) I" Y mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) O; v. d% |$ ^! G8 S
5 w$ L" p3 @. N- h mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
- L/ I. o( M5 b! X, A U S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 V) N/ Y% i7 \" l. R9 I; Q mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) f1 K0 N- ~# M2 K0 c1 V" P mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' [& b. N+ _; R) p8 j9 z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( B6 b: G; u" V1 k" |+ d mcasp->regs->XTDM = 0x00000003; // Slots 0,1+ z& M% r3 `) u8 t0 T
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
0 g- X2 U' m- L$ J2 Q( y- q mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 m, R* _+ F3 h$ F. a& L9 b2 Q% K% k( h9 ` ^0 X. Y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
# \/ i" d* x+ [9 q' p. H' G* `, _% ? mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 ]$ ?! U( B# P* Z, B mcasp->regs->PFUNC = 0; // All MCASPs
, G. Y9 Q2 a" R mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) ]4 A$ X# ^* n1 ~$ d9 v+ S9 b) E6 |) i# h7 i D
mcasp->regs->DITCTL = 0x00000000; // Not used
4 _( W/ q ~9 S. @ mcasp->regs->DLBCTL = 0x00000000; // Not used1 Q/ I- g- B7 b- v) W& q
mcasp->regs->AMUTE = 0x00000000; // Not used) l! t3 K6 V. w4 ~8 x2 E
' \2 B0 W k$ S5 W" T3 T" Q
/* Starting sections of the McASP*/
3 Z& p+ h/ h" Q, J/ C! r mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 Z: L% _- @5 Z; n& ?; S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 7 C3 T4 H# T. k7 z8 Z" {
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" l0 t) V0 s; _! d6 l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& \% B( D% s1 p/ C x4 T0 o9 s- X4 |- S6 N$ {. L
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : L( K6 a* T' M3 }: f2 P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ S0 C _4 e% w6 W6 c0 C
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 d0 m+ `: ?7 [# n( D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" x8 p9 r# c$ d h- u# ~9 g0 b+ t4 d2 k: R. E5 z
mcasp->regs->XSTAT = 0x0000ffff;
% K- o/ }9 c/ H e- Q( I% a+ J mcasp->regs->RSTAT = 0x0000ffff; 6 d1 ?- g2 v0 `! A7 M7 h
) u- x! U* G- Q: {* _$ o& d
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 E+ x6 p2 X; Y0 c3 ^+ ^4 _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 R c" G7 ?; A8 U1 P
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 f' ^' Y( S# u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* W- J! m! N7 u' v
, l1 a4 }& k' |
/* Write a 0, so that no underrun occurs after releasing the state machine */
- `- y0 _1 w8 q4 ` mcasp->regs->XBUF5 = 0;
( z9 a, S8 I- o2 d mcasp->regs->RBUF0 = 0;: p" }, k r8 E1 d3 A3 r
! `+ \2 v& k8 t' h- G mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 U4 e# `$ Q6 U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# X" Z4 w7 R$ Q: S) X6 s
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 f) U) I7 {# j% Q W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 l1 `6 [7 q6 s! ]+ t
5 T, r6 D9 }, a4 S# {
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! Y* M: k: _3 p) G U. n% S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 [9 ?6 p; ^: v mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 y% G5 d6 Z9 E6 n( v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ k% Z3 P. O) v* x) o( k1 L1 Y
8 h1 `) t* S( X/ |. K; S CSR = 0x0000;
3 o5 U4 w7 ]% ~# }6 v INTC_INTMUX1 = 0x3d;
9 ^3 n2 I# X: l5 s ISTP = (unsigned int)vectors;! [! {4 m9 k. x8 @& {$ f9 J2 B
ICR = 0xFFF0; ( ~( Y+ M! w8 _4 i% [2 Q1 Q
IER |= 0x12; * e, z: H( D$ l% n7 \: R6 f) E
CSR |= 0x01; 8 R! u$ d" ~# d8 T0 u
- P* ~7 |! E1 a* T5 a) |
$ T& x' B& z9 j8 y( r* \( q7 b2 f. r9 t' K
还有就是两个输入输出函数:) H2 a m9 u. g5 V1 B; r+ j1 O! D
void output_sample(Int32 out_data)* U" S2 }3 Z7 H p) X p. O
{
( m5 X) L, ? E" t AIC31_data.uint = out_data;
; a% Y* f e0 c/ L MCASP1_XBUF5_32BIT = AIC31_data.uint;" _/ q* j$ ^' Q! l2 W) B6 I. q4 D
}
& e3 d2 R0 k, k4 ~* E( C
# ?3 |4 |* U' _! ?2 i! _3 SInt32 input_sample(void)3 W; d8 n0 j6 w" F3 D9 V) L% X& ?8 E
{
% s# p1 b8 I ^$ X e9 i AIC31_data.uint = MCASP1_RBUF0_32BIT;# c: n5 I1 }' u0 i2 ~
return (AIC31_data.uint);& m9 o# f6 z+ @$ `1 T& Q
}+ O0 r5 g& C0 p& y
# M6 I7 R; K9 d9 @1 {; V
|
|