|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: L) z0 Z* g8 Q7 N1 ~, l
main文件:
& v, u( r, Y' h3 ?- e tinterrupt void interrupt4(void) 2 P4 ]' ]; J) ?# w3 p3 E
{! [& f4 J$ _ D5 `, H3 [( b
Uint32 sample;
5 f1 O1 [* z6 S$ y9 d! Y, U+ }1 |/ z5 [7 z+ s
sample = input_sample(); // read L + R samples from ADC
2 ^8 Y& g; b3 t% c output_sample(sample); // write L + R samples to DAC 3 J3 ~7 t, S: ]& N% \% L9 P1 ^
return;6 F; L- ]. T1 j
}
0 g/ X1 D7 [% ^" y' u8 y- B; ]( d7 c9 ]
int main( void )
6 W- Z( h3 W% s% o* f1 L* e{
% \9 u% c! Q2 V6 @2 C# z1 H4 \5 \0 k
. I9 y; p6 r, m /* Initialize BSL */0 H6 _" [. G' x: N; I
EVMC6747_init( );
. x; X( ]' H: \- ]: Q /* Call evmc6747_intr function */( E: w+ A+ k! m" g$ E4 P
aic3106_init( );
1 ?* n" h% u8 ]% Y a+ }$ _1 w while(1);
6 @, D, q3 [( K+ n; \/ c( L}
6 J7 {9 O8 v7 f+ C' S8 U; X. I+ ~9 Z2 J
& h2 [8 f' @( I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ I m) B4 `& Y, e: O3 H' G/* Initialize MCASP1 */
/ t3 I* }& H$ l, {1 S- Y7 r mcasp = &MCASP_MODULE_1;" r( @& _% @, v _4 K3 O3 U% w
mcasp->regs->GBLCTL = 0; // Reset" d4 A/ M2 U! K q# @* S1 W
mcasp->regs->RGBLCTL = 0; // Reset RX4 v, Q6 y; R0 H# ]* ] V0 `
mcasp->regs->XGBLCTL = 0; // Reset TX
' e- t( d9 ?9 g* K' q mcasp->regs->PWRDEMU = 1; // Free-running
7 L2 s$ i8 L d5 k' ^, S; Q // configure McASP0 receive registers9 c7 s/ J) [1 X! S @
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# T$ Y+ |$ B( c mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ S1 x5 G' s: ~5 J- V3 t mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 N# q8 s h9 A F5 f
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 l. U! Y- I" J/ p4 N& f5 x4 J
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
! T. D5 a. Z: w a% o; E2 o mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ X, x6 V1 c1 N- t mcasp->regs->RINTCTL = 0x00000000; // Not used
: W) ]- B0 `# l/ v: Q mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 J" }2 K5 P" o2 a4 M: U W( c: s
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
7 c% W$ k7 U# [7 R' v% M mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' S5 U f. v' V& Z& |& Y L
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% t |- S8 b( {" n- [: Q2 I' R mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% ?' N+ |* P( V3 S" `" d mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% o' D" {: C; m& W b mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ }1 Q! F x6 u: x
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit @8 s* E3 G$ [
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 l' B+ l; p' o; Z5 @/ @
* y* e* a U5 L4 Q( ] ~+ s, `- a1 L mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN. ~) T& [, u& K! ?- }
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' L+ J% P' k8 u1 C, O; i
mcasp->regs->PFUNC = 0; // All MCASPs7 T& A4 c: W* u9 J
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 n! |2 c' R( C/ M: b& }
5 G3 S& g& B8 {- A2 ]2 | mcasp->regs->DITCTL = 0x00000000; // Not used: G# i6 O; l( X- O6 Y
mcasp->regs->DLBCTL = 0x00000000; // Not used
, ` W* b5 X# K2 }' b) _. }! v mcasp->regs->AMUTE = 0x00000000; // Not used
7 s$ v/ T9 [! o2 t }8 \( \
) j: B: w) i; h- j+ D/* Starting sections of the McASP*/7 z, I, ~$ Z4 _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' r0 v! }. l3 `! O" A% W( N1 T. S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 U% y: @, k7 ~; q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# Y1 y6 ]9 `" M+ N( ], _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: C) |: C* W4 e) v$ _1 {" v+ f$ G
2 b% r j3 f/ J j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) Q* z# X* I( {+ T( W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 S; p* Z* {+ @" M+ Q" Y/ y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ L; I' A! C" ?1 ]) _3 e( w. x- e4 ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 T5 Q2 S3 `2 L9 P1 @8 M5 k4 C
% g2 C: B# N/ K. w$ K mcasp->regs->XSTAT = 0x0000ffff; 3 [ W8 O$ d: h$ y6 y/ y
mcasp->regs->RSTAT = 0x0000ffff; , c/ [8 C$ ?- @7 I
[1 m* I, y+ F7 e mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ Y% t8 Q& E- w; E' a- H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# ^ T0 i. o3 z/ C! y; W
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 |+ O4 p6 m/ w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 _/ J7 f/ g+ m$ O
# Y Y( k" r4 [& U0 W: j4 d /* Write a 0, so that no underrun occurs after releasing the state machine */
8 t/ L- i, H' j8 N& Q3 j2 v mcasp->regs->XBUF5 = 0;7 R) w* z" b6 a
mcasp->regs->RBUF0 = 0;
, @2 g7 ?3 R3 b' f* u
5 a2 f5 P. f5 f' |" L mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) }: R% |8 O' B- g0 l: a$ }+ f8 y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, k( Z- B% o+ F+ d2 }: h8 j mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 t( U# R; P* S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& V* Z8 w( s% S
1 B. {8 M3 [4 ]: t; R, ]. Z
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / I) M4 e3 v: r, F+ \4 A: ?% g5 U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" k* k1 h9 z' j2 E- \2 n$ H" T
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . ^ p6 @0 Z7 H. ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 [$ z/ p# E$ ^. P+ H& V1 n( \' @
% \1 g" f3 x8 N+ H: Z. L
CSR = 0x0000;5 Z- P9 l+ m. q
INTC_INTMUX1 = 0x3d;% c( e' a& n. |7 c, J
ISTP = (unsigned int)vectors;
e- O2 @% {5 V# C3 ?7 F ICR = 0xFFF0;
+ a& ~5 E0 S, o4 c. v" A IER |= 0x12;
0 p; ?# g& Q7 y CSR |= 0x01;
6 l( W3 {& F8 a+ F8 B. V
) d# X" e3 v0 V8 a$ x# k% \
, |5 a0 E! N! ^3 p6 O' ?: a* O/ l, K
还有就是两个输入输出函数:# F3 l2 ~3 i$ T% V& O
void output_sample(Int32 out_data)/ x+ M& v% v" q1 @* c
{
7 v' y# @. O# w6 E' r) m% _: [ AIC31_data.uint = out_data;
+ ?$ d9 l0 F# b [3 t+ g MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ k; L8 H, b& D6 g$ e. P' _6 i+ [}
; k" t" b6 p* p/ _5 P) ^
- C4 v2 G7 h7 j' H7 ?1 x) D% HInt32 input_sample(void)
; c# f M) c0 t+ P3 T1 l1 v/ a9 y{ ! ^: `6 H/ r) G! L* U
AIC31_data.uint = MCASP1_RBUF0_32BIT;" _! F7 y. j5 z6 U
return (AIC31_data.uint);
- Y; ] _, e# Z7 |}
_) Q: E# Z! w3 N) I' r/ v1 ]
4 {" N: x6 A* |- k& V0 c) n |
|