|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! O1 d* W" l* ^
main文件:
) H2 v7 P! N, T1 v3 {# k( ]( o( Ainterrupt void interrupt4(void) 2 ]: _9 J+ I$ i5 D' U+ I7 P# d a% d6 X
{
. Y" y b; ~. H6 H+ ]+ _- x Uint32 sample;
4 }- l6 P1 n- g; O0 T
% ~6 `$ |9 E* ]: D# l6 ], C. v sample = input_sample(); // read L + R samples from ADC, S8 N3 N9 M4 N1 L) J8 v p. [
output_sample(sample); // write L + R samples to DAC / ~) |- r9 p7 ~" {
return;
1 n( s. I2 w, F, M" w}
8 u7 B* X3 Z v* W" e" U+ @8 O( e: R$ I
int main( void )* ?1 E) n! w5 v9 J: ^* ~3 X& k
{
0 C: Q# e/ d+ M2 y+ M+ K# J6 e# V- t& q/ h" b5 Q/ g5 ]" O5 v
/* Initialize BSL */2 x) ~3 g) m$ g/ b
EVMC6747_init( );
0 }5 y" ?7 n: o T: H) @ /* Call evmc6747_intr function */
3 C6 U8 O5 G" c1 F8 D f: d+ A" |/ a aic3106_init( );
% S" p' U! _2 ~" l: L6 c% ` while(1);
, l* ]+ | U8 r. v}
/ X- v7 Q* ~) a0 \1 `+ j& s& `8 b
, y: P) ~& r" d' P( ~6 O4 r% Z6 s2 f/ ~; H; a C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 ^( X) W5 W' g' f' G- D8 `
/* Initialize MCASP1 */( V& o* i6 ]6 ^& ^; ^
mcasp = &MCASP_MODULE_1;
4 r$ c d( a+ u: | mcasp->regs->GBLCTL = 0; // Reset
* \6 ~- |" ?7 h5 p9 G mcasp->regs->RGBLCTL = 0; // Reset RX- l, i5 C; m" T4 d9 e' l4 I& E6 \
mcasp->regs->XGBLCTL = 0; // Reset TX
) v* Z, g, {: } mcasp->regs->PWRDEMU = 1; // Free-running% r! y) |5 l7 O, M
// configure McASP0 receive registers! }3 E4 @: L" o: }, G/ p; i
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 c/ u5 T5 v: t7 |) \* T
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- B7 d9 n% k+ B5 ^) E
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: B N `/ x0 `0 d" [ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& I0 N, P+ j c5 K6 _" e mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ t8 b0 @" `1 {/ E' B/ S2 A4 f mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 k: M1 E8 Q0 B& n7 X/ H( T- F mcasp->regs->RINTCTL = 0x00000000; // Not used# a. N& z- _+ R5 F1 H9 V
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! G% j7 D% h% E6 A2 Q+ z
. T9 X9 G: W, x$ l4 X6 ]$ y" @ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used4 b9 {* C/ J- o0 B2 D: u
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# }) j9 n& {) ]7 K$ s mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' P# W$ K# Y0 w$ N( p" X5 K& k mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ W e2 n+ B6 D3 u) p2 A/ A mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK4 o& J+ O$ g* k$ p* D: _9 U
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. H' k. v) N+ i2 r1 U( ?, T4 m* h/ b) \& R mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* L: E8 O* F0 x/ h, E1 f mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 R; X( H# ?- r$ w" n
! v) z Y* X; C0 r
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN \ ^! V' w1 D' _% X! Z9 K7 f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
- s% N5 v8 F q1 U- |; }. G5 f mcasp->regs->PFUNC = 0; // All MCASPs
+ ?$ ]: ^3 a1 Y- \ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. `: ^/ Q0 d7 U% |6 U* g
& j$ ], w2 ?; k- t V
mcasp->regs->DITCTL = 0x00000000; // Not used
$ @3 p) i/ s& ] w# A1 ~ mcasp->regs->DLBCTL = 0x00000000; // Not used
! f& |! e7 ~6 F$ k$ D mcasp->regs->AMUTE = 0x00000000; // Not used/ m/ C/ j" C. K& v0 ~
8 M$ b/ u7 {& B; S8 [$ X9 s
/* Starting sections of the McASP*/6 [7 o: c v: u1 J4 H9 W
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # T) Y! p+ f6 N# G3 ]6 |$ F' g- A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); / x" Q X$ w" I+ ~
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
8 }% U$ K9 i, V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* C& n) n5 z) z
# s4 O& t+ T& \0 D( U, v# o# I mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 X& C% D: V7 E( l8 m) d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ s( N0 Z: y8 `6 w mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 [6 E. @5 r; V0 M/ u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ O; ?$ N# V6 \
N3 c- R) U7 [" }$ o7 C' `6 O. H# T mcasp->regs->XSTAT = 0x0000ffff; $ N% j8 z, m0 h! n: C: {) n' B
mcasp->regs->RSTAT = 0x0000ffff;
6 ~; E, E) y1 B. s" U; V4 b: ?) L5 T/ {& C
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ `( C4 I+ H9 ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 v4 X$ ~+ l5 z6 H, K
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! x0 B. k7 U3 \4 u; f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' I4 H0 x" a2 b
s, z4 F; `4 F' q& s* V/ R; W# _, N
/* Write a 0, so that no underrun occurs after releasing the state machine */
* |: y1 e1 ]1 [$ Q( p6 r+ e mcasp->regs->XBUF5 = 0;
8 W8 p1 M) w, B6 I4 ^/ n mcasp->regs->RBUF0 = 0;
7 p' X. G' W7 R9 m
R! b5 b" }6 D6 D+ J: r mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ l. B t0 l9 k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! t, S4 G( X+ d* G% O* ? mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - j+ G4 }8 N- z- Q. k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ F4 O* Q: n$ H, K. C2 l) G* Q4 ~( P, F/ S4 N3 B1 l
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ Q2 h" `% Q8 l* m) T4 F' I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- U5 D/ B) v5 \7 P mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) F: f Z8 J7 R; m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ s p4 e+ C3 G0 `
( r$ u7 M4 `) H# K9 X2 O
CSR = 0x0000;
6 Y5 G% g, j) c8 ~: `9 o% S INTC_INTMUX1 = 0x3d;
2 W4 y: X$ Q( G, J1 T/ C* C( z ISTP = (unsigned int)vectors; \+ ~4 T/ @+ O, g
ICR = 0xFFF0;
5 g2 o( [+ C; ] IER |= 0x12;
& @) e! D9 w9 Q CSR |= 0x01;
( |& F: O |6 N% a9 V- C' T9 ]3 t* F/ ~ [, y
+ O8 f$ w7 M4 q0 _ \0 B6 t7 K0 m5 |
还有就是两个输入输出函数:! D/ @$ q2 n- j
void output_sample(Int32 out_data)2 o% ^2 F. b/ Y. e
{2 z* d4 h( q$ ]0 T' @4 _ A
AIC31_data.uint = out_data;
. X, h2 [" S! q* ~5 [* v MCASP1_XBUF5_32BIT = AIC31_data.uint;& J/ q. [" p3 Y5 p. o; z
}
. \! e6 U/ `4 s" k# A5 C1 r- \7 b' `* v# P2 ~4 ^6 e; K# T' |
Int32 input_sample(void)
- Z+ @4 n6 \6 E7 h* t0 e{
% ^( ^1 J$ ~0 u% n AIC31_data.uint = MCASP1_RBUF0_32BIT;5 k" y3 q$ T& C _0 r- q* E+ J; h* v
return (AIC31_data.uint);1 I5 a- L7 m$ ^5 d
}3 J0 D4 G. P; o% o8 ^ q. ]
$ t3 i% b4 Q' a6 z* h6 f+ \! w |
|