|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: Z; @5 }* S# @8 C8 B& a; M* ?8 X4 h
main文件:
& C' M$ V, U2 i3 b2 Finterrupt void interrupt4(void) 3 ]/ S+ I. A4 O+ U( H5 x
{& \! y* D1 A3 \2 `7 y5 ` U/ |
Uint32 sample;
9 N4 ^0 Q2 M; O& p# z( r2 Y; ~" ?! {$ r
sample = input_sample(); // read L + R samples from ADC
* R8 C9 o/ g7 W2 [ H s output_sample(sample); // write L + R samples to DAC
1 I" L! _& ^ ^1 y j return;
1 j; a2 R$ Y( ~, A$ \% N1 s}
- c% x, o8 B8 |3 |- o' j! N
$ x% h, f3 y' E7 uint main( void )7 S+ A' P y p; _2 v8 ]0 Z$ S- R) a
{
% Z( d: Y3 }4 @& [7 t
4 K1 m3 Y! I# q) w /* Initialize BSL */
/ j8 d9 e8 X2 E6 a) T& A EVMC6747_init( );
8 C! v6 L& B1 L4 F: G /* Call evmc6747_intr function */
: H! Y! K$ G# S aic3106_init( );
. O" R. n$ n( T4 S0 F while(1);; g$ c0 }- L3 m2 m- d
}
0 n& v& ^ J- y3 s, L8 q4 S. d1 @+ E5 M9 I. E- p
+ {$ [! p& i- ?- l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& u s2 Q5 ^' i5 u) K
/* Initialize MCASP1 */
' U, y0 D7 E# Z+ c; W5 G2 W& |" U mcasp = &MCASP_MODULE_1;
* p2 r# o0 t" x: S g6 H+ f+ M mcasp->regs->GBLCTL = 0; // Reset
, t' U' W9 ^* k9 w+ D/ M0 A- [ mcasp->regs->RGBLCTL = 0; // Reset RX
" K M$ P+ T: H# s6 x mcasp->regs->XGBLCTL = 0; // Reset TX' ?9 Z6 X# s: Z- K/ n
mcasp->regs->PWRDEMU = 1; // Free-running
6 w4 l. N# m0 p, P // configure McASP0 receive registers1 R- R6 {, w3 J: p% M& p: c9 q$ K! X, K
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" `7 q. l& m5 l* ^8 C7 f
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* ]+ C! Q2 T' W# F) g
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word& i q1 D9 e9 s Z: ~
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
G: p7 z/ r) t, {' ~9 U mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* H( _! G8 `: }' V& N
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
: x( B& `: @0 V9 ^* j mcasp->regs->RINTCTL = 0x00000000; // Not used( x% d2 ^9 m+ Z/ J1 s
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* w# ], P d% ]# N: D$ [: \3 ]0 |
( ?# X9 ]7 z+ \7 s6 i. c$ n8 }
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# c" m+ }4 g& p3 e: t mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# | M( l1 |7 _; j7 Q6 y( x4 b( Y) ^ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' P( w3 Q$ ]/ O1 v( v' y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. M0 L! s& n8 Z! d- @+ r( u8 c7 w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) D7 _; g3 C! f, m! x mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( c+ ^- {4 n- s" f mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ a# ]* K2 h% u) b
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 F, H1 x }1 H, G; U" Z; [
1 n4 x( m Q1 |% [! t
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN, J7 s$ z T( y* v, B
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 v$ O, r* A8 u; q, \6 Q% p ^; ~
mcasp->regs->PFUNC = 0; // All MCASPs9 w- {- @# o, G! d2 ?3 K& M( V
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* v; D$ Z2 {( Y t! d; j, ?! k v- k: x$ [; c2 N
mcasp->regs->DITCTL = 0x00000000; // Not used1 P) i5 C7 j' u: z6 \
mcasp->regs->DLBCTL = 0x00000000; // Not used5 O* }3 r* {) I
mcasp->regs->AMUTE = 0x00000000; // Not used' u! ?1 P: K7 G; G/ m3 |' g k& B
( {$ W: @( }+ O9 h/* Starting sections of the McASP*/
( W, T: T, o' o' r. c' o mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 u# p! _4 A( D1 i# N/ _6 w- G7 b2 m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); Z) R& S1 y1 I+ l& n/ J" W
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 M% I% v" I* O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ s5 ~* ^' u% f2 v* H! S# S" W2 k7 g% d0 m3 K
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 u9 `8 D0 a$ x) b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ J7 Z) I( @9 H1 `% |# B
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 [% f, m0 O2 ^ K8 m5 n! }: g- j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON ); ?3 X* ?! ?- Y1 p2 }0 U
/ T( J9 U3 ~7 C2 C: b$ e, f mcasp->regs->XSTAT = 0x0000ffff;
" M: ?. D. u6 Z# D0 ~- B mcasp->regs->RSTAT = 0x0000ffff;
( {7 v4 o9 }1 g9 [* w
0 J0 y: p8 R0 F& D' t* o mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" a) c1 U6 `# r) _7 Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ Q+ I% o# m" `% K. O mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # j2 h0 i( K% O" x$ |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) g3 C/ M" \+ n$ T
2 e6 X; i9 R* I5 Y
/* Write a 0, so that no underrun occurs after releasing the state machine */' f1 }+ I* ]) @ q9 j
mcasp->regs->XBUF5 = 0;" M. F: R& ^1 S, o( W
mcasp->regs->RBUF0 = 0;
' h. Y7 U' }% |2 z; S6 F8 v( x8 l3 b9 I! k1 x
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % m) F! d2 B) [$ w, j- |6 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. _; W- a5 I3 R2 k
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( N! G" o( v! g/ {0 j8 Z' n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, I* s: r0 @' v2 z) h* o7 R! W( P l, y4 \. h7 @" G1 X
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) C$ V* J2 P* v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 T/ T8 w: o. a) G- s' K2 H
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: K& J& s* S+ p" _- U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 p, J. _: H% c* a# P: _/ m* R
- _+ M% U7 Y7 U CSR = 0x0000;
# A' C' h" a$ V' Z3 X& v INTC_INTMUX1 = 0x3d;
7 K( R9 |6 h; ?$ d$ i. y8 g ISTP = (unsigned int)vectors;
' q5 w: \8 U+ Z9 L L2 l& ` ICR = 0xFFF0;
& Y1 F2 h3 c- d. p2 f( D IER |= 0x12;
0 i ?. m& Q, p$ X# ?3 X# v5 m CSR |= 0x01; 1 w9 y$ ? Y, o. Y3 O* L
; Q0 m+ F; w2 L4 s# X6 A T
2 S% w/ a# ^ O) T, c
$ [" l; v' |: i. J0 \还有就是两个输入输出函数:: ^$ g6 y5 v" i+ a- V
void output_sample(Int32 out_data)
0 [8 M8 J. m1 t$ O: C{1 I& h- U9 \# y; w( x$ h' x* g V
AIC31_data.uint = out_data;
6 `# s; E, A! G4 Y7 B4 t1 q MCASP1_XBUF5_32BIT = AIC31_data.uint;$ r6 }! }# y8 ^/ r7 f, O
}1 p9 [+ r' H2 l$ D! P( Q% U( |
& }. g6 }" r& E3 E2 ?Int32 input_sample(void)2 s. u( n$ {: U! h$ b& X+ a, D, Y
{ . }) W0 I7 T1 \3 S5 U; r, q$ F. `
AIC31_data.uint = MCASP1_RBUF0_32BIT;/ G5 ]" B* @% K( j+ h
return (AIC31_data.uint);1 D- o' |) X) p- V* w& D
}4 P1 ~' ~; G) o$ R
( m" a3 g* [# M+ p: I- p |
|