|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 ~ |/ k! S5 Y3 c
main文件:, Z1 a. a3 L" `4 E- m# K& ^; Z% z
interrupt void interrupt4(void)
, U6 [: d! _3 C1 K$ o8 {8 d) W{5 o& u5 u3 ]* ]
Uint32 sample;
7 Z; f+ J7 K. `4 U: j4 V9 [; i% R0 v! q$ K v4 ]
sample = input_sample(); // read L + R samples from ADC
4 g5 \% R. m: N. M output_sample(sample); // write L + R samples to DAC
" m2 s/ b8 s N) b6 ^& @7 t return;
1 b! @+ S6 N! w% ]5 \}5 ?/ h1 K j2 h6 o l. g/ L) _6 E
& H5 s" ]! x* g: rint main( void )
. |5 U, L2 t7 U5 g) |- `' ?{* U( \+ B5 O" J2 }* B1 ~, F
* B; K; W, R7 Y+ E1 E, M0 w
/* Initialize BSL */) Z! L! A+ j ~
EVMC6747_init( ); z5 \. @0 a9 [- Q+ d. {
/* Call evmc6747_intr function */
2 W3 J) [( J$ Y( |8 L6 e+ W+ v# } aic3106_init( );4 g) L0 |1 T! C) f
while(1);
3 n, w7 n' ^) N5 T, m, K! P}
6 [6 V S: l% a z: C1 y- c% d
! f6 C8 f1 i' W) }# C; c
4 u! J1 X/ i7 G" H# ~aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) G3 }; g: o* |( O, w# ~/* Initialize MCASP1 */" }. X# C; w* }, u2 C, W4 c
mcasp = &MCASP_MODULE_1;
. [- j# O/ x+ ?- w* }; y mcasp->regs->GBLCTL = 0; // Reset% }# K2 ` R2 `- b9 ~7 i R: q6 Q) d
mcasp->regs->RGBLCTL = 0; // Reset RX
" Z9 x2 h1 y" K. |2 R mcasp->regs->XGBLCTL = 0; // Reset TX
# A9 i6 b" @: N, X& w c mcasp->regs->PWRDEMU = 1; // Free-running
3 E+ m0 I! w. n2 k // configure McASP0 receive registers( R5 T% A% B8 b& N+ w6 ?, `# c
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
. a' v% v/ d0 u. Q- g: l1 P) j mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 F) H. W) P/ P mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word c/ |/ N& N) |7 ~
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). J8 s' X( O+ K) R1 T4 s7 O
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)/ i( t2 p, T* E* N
mcasp->regs->RTDM = 0x00000003; // Slots 0,1: u0 m. b( w9 E
mcasp->regs->RINTCTL = 0x00000000; // Not used* k# P6 W' L7 B: x5 }0 a
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% ^4 n0 E% g/ i- K
% l+ s6 `; `% S# [2 @' `4 g
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) N9 w9 i$ I" k6 J& X0 Z3 U# M mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- L, n9 m/ n2 \3 C+ [
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ D& I' H2 f7 P9 l
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 S# s6 {3 d$ L$ f- h, f mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
5 B* ?# B9 N) K |9 t mcasp->regs->XTDM = 0x00000003; // Slots 0,1, L% ], j+ n E; J( S/ g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
2 s8 U, O* p7 i$ W$ K9 D mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 P( A* `1 S4 x0 [6 h# z1 P9 ^
/ G' h1 U' c! ]# I' S* K mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN. L( p' ^- \- R1 \7 C) {- R. L" S2 {% K, r
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT. f. }6 ~2 P" r( i, u
mcasp->regs->PFUNC = 0; // All MCASPs
1 Q: t9 h! u% |: ~ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" s* R+ j7 D# M# T( s
( V. _( f8 ^1 I% S, b# J5 H6 d6 W
mcasp->regs->DITCTL = 0x00000000; // Not used& a3 r o+ ]* z- ~
mcasp->regs->DLBCTL = 0x00000000; // Not used, I, D( C4 O. s% C2 D- v
mcasp->regs->AMUTE = 0x00000000; // Not used6 g- G4 i+ P+ @2 p
7 u* O* I; h" J, n
/* Starting sections of the McASP*/
( F8 l2 @2 ?+ |( @2 q2 L mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, f5 b' _4 h4 i/ h' \# A8 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 ?5 F( V- C% h7 A
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) c s7 L* y7 b4 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 H( j- p5 Y4 P c. v: R6 X# U2 r
3 O4 u! b9 ]2 Z0 s% P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( h# J' \1 Z6 Z1 q Z& ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ O I; g, E; g/ f$ L mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% H* n5 f' p1 M8 @ y3 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" f. g% v [ i y+ n I
9 l$ @ b6 _. Z8 h7 a$ a mcasp->regs->XSTAT = 0x0000ffff;
* i, a+ ~& ?/ v$ [0 F7 e% d8 o mcasp->regs->RSTAT = 0x0000ffff;
6 T. ^3 n. R- ]' a% R5 U: J$ Q% q( a* k9 z, ^
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" W7 E" K' C- q/ Z; P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ W O! [ J! t, O" Q3 z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 c6 b5 x' n, a! B4 n" W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 J) A" e1 b* |8 B
( R& J7 O! D' `1 y
/* Write a 0, so that no underrun occurs after releasing the state machine */
3 @( J7 c7 e- J+ o5 M& A2 P# K mcasp->regs->XBUF5 = 0;; y# t$ y+ @$ H! V8 i
mcasp->regs->RBUF0 = 0;
& v/ [" m+ U2 L" L7 o/ M& H7 ^7 F6 L- P, ]
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% T& c: S) w1 M7 X4 C [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& ^5 H! H4 h% ]: c4 B k' \
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. f: b& |# A9 v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 T, L% @) e0 S8 l) q1 f1 D/ L. _* {% l4 E' U Y/ m; e
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " F2 k: Y% s& s% b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 r8 u' r) j/ Z1 m mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 _9 P3 z, A3 E' w4 `; z$ w) q, v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 n, r7 d( j& O( u7 T$ V3 j2 X |
* @8 E6 c; `. R' A- u+ [3 E CSR = 0x0000;
% W) S5 u3 @& ]: g INTC_INTMUX1 = 0x3d;! N! W" c7 l6 W8 O2 o
ISTP = (unsigned int)vectors;' V5 ^4 ^, o& g( b# m
ICR = 0xFFF0; / T8 K+ p7 k8 J- S: F6 U% k( q: Q
IER |= 0x12; 0 U; x. V8 g! R
CSR |= 0x01;
! {9 U' b$ |4 r0 n7 u& u( e
$ C. l4 I" o8 F; w8 J
" ?: c7 s1 e- @! f$ z/ I! ?1 G. D3 K3 ?' k$ G5 i- H
还有就是两个输入输出函数:9 o5 V' y0 W! q* R* z) k' Z+ u
void output_sample(Int32 out_data)
$ X2 f' _# r8 o. i{6 N7 C6 a+ ^9 Q& j
AIC31_data.uint = out_data;
( a0 v) U4 r, F* Y6 r k MCASP1_XBUF5_32BIT = AIC31_data.uint;& G0 X$ {# R- b5 I% [
}4 ], a* x9 e* k% n
$ B( r3 U# A& G/ G% A5 _( I2 O9 JInt32 input_sample(void)
" h& V* j9 f5 n1 u, k( H{ 9 {3 z+ @6 `: i
AIC31_data.uint = MCASP1_RBUF0_32BIT;- C2 |. h) b( a9 ?
return (AIC31_data.uint);
$ d5 X6 L- f4 {* p' V% K}# }/ m" y' j# }+ T
# F; L0 b5 S$ W! T" ~) e
|
|