|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 j# \, ]+ O) R, b& Omain文件:' z5 I! c& u5 e9 | O- X
interrupt void interrupt4(void)
9 a, @5 ^. d! _) K6 p7 T{' q2 A9 ^3 {0 D0 R
Uint32 sample;- q% ]% C2 h. C6 V( k8 V+ u
$ { t) d! v9 l3 k( n% U v sample = input_sample(); // read L + R samples from ADC g+ c7 }/ @. |" ]
output_sample(sample); // write L + R samples to DAC
8 N1 p" _- S, W2 _9 d* \ \ return;
( R* e+ L) g3 {9 `# o! P}
$ M: c9 r9 X1 K* Y) z# W. F" u' \
0 A8 E# a2 h0 t; r8 h0 w; uint main( void )
+ L7 Z; \. \. Z% s6 c{$ Z& V! D3 ^/ C3 i) H0 ~
: r* D: r6 M. p- M m, v* X4 b6 | /* Initialize BSL */8 a4 i: S0 L* u0 [
EVMC6747_init( );& w7 D6 b- R5 C# w4 Q% @7 D
/* Call evmc6747_intr function */, g* @* h( W! ~9 d
aic3106_init( );/ X& r4 H8 T# F7 {
while(1);: }* B' \( [ K5 d. T2 `1 P
}. a1 _2 N6 W' R" P
( C) N& I- B: f+ ?0 Y% o
* w3 f* Q% g1 \/ g5 o; T) Xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) y# ?1 {4 h" G
/* Initialize MCASP1 */
- C. W4 R- [/ y9 n$ {% M mcasp = &MCASP_MODULE_1;5 c, [5 v. b3 s
mcasp->regs->GBLCTL = 0; // Reset
" h/ a! t0 u( u) H0 p. r mcasp->regs->RGBLCTL = 0; // Reset RX
& b( V0 k' c2 l: T' T0 M7 P mcasp->regs->XGBLCTL = 0; // Reset TX! y5 j/ G( e& C4 ^* }
mcasp->regs->PWRDEMU = 1; // Free-running
4 D, j3 u: p: `7 l8 C // configure McASP0 receive registers/ A! s7 [% m* N; J! d; F
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% B8 U8 P/ y, b/ ]* Z- N: _ ^
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 ~2 G& w a W) Y! w
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 U( A4 j7 ?% ?- N9 x5 d2 ]
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), G. `% D1 {+ V# ]( T
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 N: H0 w \5 v. ^; c
mcasp->regs->RTDM = 0x00000003; // Slots 0,1# z. s" v1 Q3 w, a! \9 g
mcasp->regs->RINTCTL = 0x00000000; // Not used
# w- F/ Y% p! r, @, c1 y' [ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: V' Z: A+ L" X" I3 t3 w' j
2 Y" t# Q t1 k c7 ]7 T h* J% t$ `
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
, o) I% g% H% x! C mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& A, n' `3 N2 a" c- } mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 y! S$ a/ j/ V% S3 x' X mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
p3 R' W9 \. T' h7 d I mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK' s8 j* c. U2 W
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 M; P* V. O! D+ m mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
' V6 Y, v; ^3 Y% F4 |7 g mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% c8 V) W! d- Q2 E( Y+ t' Z
* D+ W9 o3 F; o6 r" {& \ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
j) F6 C" O0 ?7 S/ A mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
& ?& G$ J/ ^2 l# `5 V* m mcasp->regs->PFUNC = 0; // All MCASPs
9 u$ d$ J9 ~4 i mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# P$ T0 U% j( Y j
' T; V4 R8 J3 E' w3 Z
mcasp->regs->DITCTL = 0x00000000; // Not used
3 g% l3 @0 Z' D3 A( G9 i mcasp->regs->DLBCTL = 0x00000000; // Not used
; \; T1 K* r7 ?- E3 u. }" f0 Z mcasp->regs->AMUTE = 0x00000000; // Not used M6 m* s& o- \" m8 Z: l% u
. a0 Q# T1 s! o" U d$ z* g* H/* Starting sections of the McASP*/
: w% H2 x; v2 F mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 O) j/ D. F$ A% I9 B$ ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , Q- {- o- y4 ?( A d9 [; d0 U
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ ~- b$ P0 r( Q2 b$ d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! ]$ X T) m. V2 K
1 c2 l/ K7 X2 W, i1 W) k! { mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + U& s: Q4 ~ w" d; e0 ]" j* j7 _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% f" m3 L! Y% _) b/ A
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & n/ V5 u3 H7 p& D0 e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: i/ p# L+ B6 m1 G
) I) w, F- J& n, k mcasp->regs->XSTAT = 0x0000ffff; ! H; `, { k- A
mcasp->regs->RSTAT = 0x0000ffff; . q5 ]* `1 Z0 m+ X: H
6 d5 U+ ^; e' b. |+ u
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 r" ]% u6 D2 r3 ]4 a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 ^) _' W6 ~+ \& k: [
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 a9 _3 y) q! w* o" S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 P- }6 c; ^0 Q" s' d% i9 O; K
) E6 F* X. A" w8 g /* Write a 0, so that no underrun occurs after releasing the state machine */: G+ y' I e. S8 l/ V ?
mcasp->regs->XBUF5 = 0;
, h( x" K8 L8 _( R C7 M% P2 h mcasp->regs->RBUF0 = 0;* \: _: ^* K u
0 Q' V7 G0 \( ^# ]/ ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 \$ @+ b3 x1 t% R! b. Q' ^& P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) q7 n4 o: E) Y0 Q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 ~) a( [' u3 t q3 ?, X; I9 T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 s$ Z( \$ A% \& _4 `
% g; a9 L$ O9 J* o, G: d mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% [; K( o8 _& q D- R0 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ m: v' T; ]9 l9 ? mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & U+ C7 }/ z7 {2 j7 }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& z* ^1 A! Y# e, }# B5 z( R5 ]2 }" P; q1 J
CSR = 0x0000;
6 D% g; y a" ]8 M/ R INTC_INTMUX1 = 0x3d;" }0 a* D2 T0 Z4 I F3 \6 x
ISTP = (unsigned int)vectors;
' H' q1 G, O* j/ ^3 F1 e ICR = 0xFFF0;
4 p* ~4 _( O% I$ v6 U+ v/ \ IER |= 0x12; 3 O# n! r( k& g" q* M0 ]
CSR |= 0x01; ' c& V8 ?( G0 r9 k, Z
0 B2 x9 l) s4 {& t
- I6 D+ O _4 C& p' S' L8 ?- H2 m8 V$ L) R }7 X
还有就是两个输入输出函数:
' C9 E6 d( _. B: \4 D( h, v" a7 |void output_sample(Int32 out_data)1 [# ^ n3 g. I$ z2 u- n8 p
{
" S6 b, B" E* t/ G( ~+ F0 ] AIC31_data.uint = out_data;
! u% O; ^" Y8 j! T MCASP1_XBUF5_32BIT = AIC31_data.uint;
" r m8 F5 H4 _1 w9 O9 A}
0 ]3 ~9 b1 j8 s9 U2 Z9 g" B! h: \1 q5 Y
Int32 input_sample(void)+ X0 R5 N. j/ @# t i
{ 8 r: Y) n/ ]; O8 B/ ^; z4 e, Y' o6 h
AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ F2 L8 H" @* x; I. O& w: B& z return (AIC31_data.uint);7 w. m4 L c; M8 \1 s( K
}
8 f$ Q y& x6 G5 c& [- C/ `9 \3 `+ Z# u+ B1 I: n
|
|