|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 c( Z: \! K. d- Xmain文件:
" J1 o' s. v. L: O* n) Yinterrupt void interrupt4(void) 4 `0 | `4 I, A* Z! w& I3 k4 Z
{- ?7 [* o" M0 r
Uint32 sample;
& z; _& Y8 E4 m+ A$ H3 T
& i4 b% g+ F' k0 J# k sample = input_sample(); // read L + R samples from ADC- h9 F$ L7 ?' i) E6 r ^) z
output_sample(sample); // write L + R samples to DAC
/ g: ?% p& ], d/ ]# ~) H return;
( T- V7 J, l+ i( C}
9 b+ S' @' b0 k# J. o: C+ m8 ]: h- y. b n: j, Q+ x
int main( void )8 [! ?$ ?' x5 X& H" ^
{
# W2 t1 x2 ]9 t8 o& g* [2 p1 X. v* R- E
/* Initialize BSL */9 W$ Y9 B- g. U5 c2 b$ v% x
EVMC6747_init( );) T* d/ L( y: Y2 Q! g Z6 D4 |% L
/* Call evmc6747_intr function */4 ]6 u% w! e' k, P1 S8 z7 [. O; L
aic3106_init( );/ g( F; n1 q4 W0 q1 w( r" S
while(1);
1 l% z ^4 v' K2 D8 m" {$ I; d y* M1 w}
4 f' u6 W+ T$ R, o" [
; I9 N/ V' S+ S) S9 O9 U6 b4 }: d1 J$ A2 Q6 Z) _% h! e: K
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, L0 O* u8 C- q8 O; N4 i/* Initialize MCASP1 */
' ]7 s9 U: L- B L mcasp = &MCASP_MODULE_1;
7 ]0 r4 ]8 b5 j4 M" ]+ d mcasp->regs->GBLCTL = 0; // Reset' r2 u# B; z4 o* w7 {; ]
mcasp->regs->RGBLCTL = 0; // Reset RX
/ c; _; }# n$ ~: g7 n& i5 `1 m* v7 k6 X mcasp->regs->XGBLCTL = 0; // Reset TX
1 m% F. y2 r" W# O" i$ B* ~ mcasp->regs->PWRDEMU = 1; // Free-running
2 Q. z8 J% W$ |2 V1 Y; A9 r0 a8 b // configure McASP0 receive registers
: k% |7 P: p1 j( s# P mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
1 e2 r8 s' \/ a1 L5 }2 Q0 j mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& h" K) ?! r0 E! M. s* O/ K
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' v) ^4 V+ [2 ?: j! d9 s
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ T7 d3 V, w0 i mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 \! m$ k- A; N8 L# J$ G! ?, B mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ `# j+ O% ~+ \' E& v! |1 E% U
mcasp->regs->RINTCTL = 0x00000000; // Not used
/ O0 n5 K7 J' o& } e mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 x0 \- v+ R7 C' o+ _
: G* R: N0 _+ \; r; S4 S1 A! }3 |$ p mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* Z: t% B6 s q3 o; n$ O mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' |5 }% p! o6 V' V: L" Y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ B" ^4 u- H/ L* V1 f; t mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
U5 [# x$ b$ C6 G mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) B) H8 ^2 H% l: }# s mcasp->regs->XTDM = 0x00000003; // Slots 0,11 |8 j/ U: L b8 _
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% s: v9 A, A$ b% z2 m) I
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: E- h- @" v7 `* B" \; X
" C) f2 k) M1 s6 a, _
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: I4 \5 V' E/ E" ]2 d mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ u8 H$ k9 d1 i$ x$ u6 W, a
mcasp->regs->PFUNC = 0; // All MCASPs
0 V5 v( L- k& Q ] mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! Y4 c( }, B1 O$ ^; [
3 e# i0 r5 q3 B* \; e2 S, i" f, K
mcasp->regs->DITCTL = 0x00000000; // Not used1 ~. [2 t% t" {; b" e6 d. Q. p0 S
mcasp->regs->DLBCTL = 0x00000000; // Not used
( V, U. x8 n( q0 R8 z8 \ d9 X mcasp->regs->AMUTE = 0x00000000; // Not used
0 k X! a& r# ?
- V- O) {+ d( D' ?& r/* Starting sections of the McASP*/+ V& a4 l* z! }
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 C% T7 {+ a# n9 b% b1 M& e# w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 C3 V6 }3 V: i) F7 u, ?' p mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ f$ \" z3 Z0 j8 h4 p( t) Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 `' e! a& j3 \7 Q: `# G& S+ Z
7 P* }# ?. y& m! l( e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
l( h$ r( Q0 ^1 D1 Y$ r" P+ | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( j6 P7 W- F/ P mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! x r: p) o5 o7 g2 C: S; l* r- |0 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 {4 F$ {( A8 }* L5 v- X
5 O9 F0 `( j; ~9 @6 y' d; d7 k mcasp->regs->XSTAT = 0x0000ffff; 0 @" h7 r$ ?, Y9 M: ^$ \
mcasp->regs->RSTAT = 0x0000ffff;
3 k" n( r0 h( }2 y) Y" ~; c# P8 W, s9 L, o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: f8 g* f) K; n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' o7 {0 b# n* h3 x; I$ ? mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; ?# E5 ]( j; L- J; O3 ~# Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% I4 \& ?, e% g3 d c7 C1 s: V5 A3 ]
/* Write a 0, so that no underrun occurs after releasing the state machine */3 r4 e4 \4 M; o* e
mcasp->regs->XBUF5 = 0;, h( C! p; V( o9 O2 F3 d: d
mcasp->regs->RBUF0 = 0;9 ~. C+ e8 [9 v, [( i
9 b2 |! j7 e3 Y5 n0 B mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* k9 o8 C0 j* f7 K- T% f+ A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& C! r, }. Q( I, Z
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 ~. e! j% c$ u" f# r% W' f while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% r! K) c, Q/ J* t e
3 k! U1 s' i2 V3 `* t6 F7 X1 k2 C mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 B4 O* p, w0 x6 m9 f$ ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 d7 g4 X$ ?0 s) A1 j& I
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 @& x1 p( Y' L+ W+ Z+ }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( a; Y% x) m2 L7 Q* {1 Q
4 n$ p) `9 e4 u2 l* m CSR = 0x0000;# A) d' t7 J0 I8 G0 j
INTC_INTMUX1 = 0x3d;
7 x G C5 S; T0 Z; g ISTP = (unsigned int)vectors;
5 n) Z; N. u7 z2 R& W( E ICR = 0xFFF0; ) a8 \$ g4 F/ D9 z: V) w1 K0 t5 T
IER |= 0x12;
" m6 O- i+ j# Z+ Q+ X CSR |= 0x01; ! D9 p( h% u7 }
: g# r- o' i5 M& ^
! z& @2 K* ]5 F+ f/ e0 y& N
) m4 W3 K- A- @( V还有就是两个输入输出函数:
) `7 a% N# E4 k+ cvoid output_sample(Int32 out_data)9 U/ j' X# S1 ?0 A/ n) S
{
6 F; P0 H( ?9 x9 w) \" Z AIC31_data.uint = out_data;
/ \ t/ r2 |2 i* b MCASP1_XBUF5_32BIT = AIC31_data.uint;
; i0 g- @& j1 }9 e0 d% o- e5 C}: J6 a- ]; x+ d0 P+ b
' T. C- u. [4 q' S' o! w9 W1 J8 m' K
Int32 input_sample(void)
, |; I2 v1 u0 P; f{
( S4 M e+ u4 T) U1 S: ]5 M0 f# Z+ k AIC31_data.uint = MCASP1_RBUF0_32BIT;' P3 s" X ^* r3 M; t8 P: o
return (AIC31_data.uint);+ Y1 J# b4 W# p/ b$ X4 _; v. G; q
}$ c- s% i7 r$ H& y: b; d7 i( @
2 ~6 p/ o1 s/ |6 U0 q- S
|
|