|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 n3 V3 [& J) y7 s9 O+ pmain文件:
& O+ U `1 T% c7 m- D: F7 H2 rinterrupt void interrupt4(void)
( S2 H5 {, a/ [! A( b% r! m% Y7 q) Q0 H{# B+ R6 o0 Y Q% `! w6 ]) n3 ~
Uint32 sample;
0 V: k6 S: h7 i2 B8 T6 Y4 Y. d% w# y) k/ U( _: A) M; K
sample = input_sample(); // read L + R samples from ADC( q0 c' X0 {* g$ I. c& q( y% A
output_sample(sample); // write L + R samples to DAC & t9 J; G1 ~6 X: @) ^$ Y3 G
return;
# Q/ n$ D. h' G( a' x}
u, b( z* O& X/ x/ R- _6 H3 s5 U2 X; t& y. o6 w
int main( void )& G; H7 T7 Y& a
{9 E& B4 C7 A( I4 F: p
$ k2 }1 ]7 T+ d1 @
/* Initialize BSL */
! r* {( Z+ h" l+ Q% \6 Q. D2 g2 J EVMC6747_init( );
q4 |1 J; T) H6 K+ V( {& d# O2 F /* Call evmc6747_intr function */
7 ~8 J X) E" \# d0 C# [ aic3106_init( );
+ E+ ~1 U: E6 [1 y while(1);" i( O: C* Q# X& h; ~! S1 {3 P4 }9 k
}5 g8 k( P- o9 K
" A9 F2 B2 w" N
7 @- r0 [( R3 E, V3 ^ d# ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' n8 ^% S, \) g5 X& _9 P/* Initialize MCASP1 */
/ H5 z; B( x: Z; t1 e mcasp = &MCASP_MODULE_1;/ f8 \% P, y1 d) i
mcasp->regs->GBLCTL = 0; // Reset4 t+ N7 d5 d5 f4 j2 T& Q& o8 {
mcasp->regs->RGBLCTL = 0; // Reset RX
$ ^; D3 K [1 @2 Y7 J mcasp->regs->XGBLCTL = 0; // Reset TX
+ [8 p$ R8 G9 M) g; B) R% } mcasp->regs->PWRDEMU = 1; // Free-running
6 ~. s3 g8 v. k6 C" n) r* | // configure McASP0 receive registers( {" c8 _& \8 [% Z9 s3 a
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
~! b9 ~ a4 t9 K4 j# t+ ^ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( f3 Z9 e z& M8 u" A
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 i8 W, R, N/ N; |% b4 d mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' ] ?9 x4 z& M" T: o" y- }
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 O& h+ F5 Z; Q0 ?: @ mcasp->regs->RTDM = 0x00000003; // Slots 0,13 @+ i5 S% |# a% k& c U
mcasp->regs->RINTCTL = 0x00000000; // Not used
) t2 y, K/ m- E0 Q4 x8 C mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 K% a8 W Q1 s& r* H* \
: k) W! O" |0 {1 i7 w! ^; y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. k+ y( Y* @% g7 j" H$ H8 a
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. H0 {3 ]: p2 l0 `2 I mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: @. j% o8 D) s' D% k" o. X
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 S- X" l2 ?- r; y( |
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" D5 g5 S. V: G! `7 d: F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1, A0 l8 S) _+ e( Q9 r# V4 Z% J+ j, E
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit" N* Q: t d8 U5 T" x6 `
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ ^7 D1 x/ p$ T) R+ o5 w" \, y& U/ t; f/ c, r" I2 [/ Q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" e' m4 r% K I/ H; W mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
+ y3 x: V g# X* U9 H0 Y mcasp->regs->PFUNC = 0; // All MCASPs7 {* s. Y" n8 _3 Y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. V, X" j9 l7 G2 n
?1 l! Q0 }0 U$ c2 `- |9 ` n
mcasp->regs->DITCTL = 0x00000000; // Not used \9 r1 n" w# p
mcasp->regs->DLBCTL = 0x00000000; // Not used
4 f! \2 h% ~4 X9 S( j8 H mcasp->regs->AMUTE = 0x00000000; // Not used
. n% } g9 r6 W+ I, Q# _' k& k+ O/ P8 b$ e$ ?% j: v( K
/* Starting sections of the McASP*/
9 k. u( t) c% Y6 d9 n& G# U& y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 a; y; x% n# k" Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# P3 F) H- @2 `7 x3 C mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + W! f; w' f' G. X, J# b1 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& i0 u7 y8 \( W, I. a' B7 g
; u) K! q4 G; \
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# o/ V1 q: |5 f5 s. a) T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! C) W# P, N& X$ |, H( m$ ^( F/ z$ U mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; I) R1 {/ U1 h, ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ y7 y3 W- }( ]( _
/ i w* B. f; o+ v8 Y$ H
mcasp->regs->XSTAT = 0x0000ffff;
- c5 s8 b6 `9 I: N mcasp->regs->RSTAT = 0x0000ffff; * G& S: @+ d7 n/ l9 r3 [& k7 B3 K a
) p* @+ N; m' q/ B% y% d. d
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 W7 c5 ~3 b, O/ C; D9 _" } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 ?/ _& D3 D# J; ?! f mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " Y9 ?) G" j4 z: w/ F, N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 E" H1 H7 \# X9 ?- Y$ n+ X4 p: }7 i! M
/* Write a 0, so that no underrun occurs after releasing the state machine */1 T6 @+ w/ l& e* Q i! S% X
mcasp->regs->XBUF5 = 0;
* z1 q5 Q! n+ [1 x Q0 b2 E& [! E mcasp->regs->RBUF0 = 0;) N1 @0 _8 n% a: E
: L1 B! T2 S$ [3 Q) P mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # k. h/ s# w8 h# R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( C+ G1 K3 }/ k+ Q1 o
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! z& Z0 E& y( }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 n9 k: F6 \( I5 @ E4 ~* s0 N8 }. B6 `7 Z
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- Z- K! Q e, B9 o' C3 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 Y! G7 o2 c6 B8 X2 M/ P mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 o. Y* Z9 ~+ ~2 Z5 p- ]5 W0 [) q B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 z/ a- h3 T$ F1 A4 b7 N3 G% o% B% o/ @% O
CSR = 0x0000;
3 b$ G7 `- ^7 e. } INTC_INTMUX1 = 0x3d;
; C* H# R) C4 v9 Q9 ~ ISTP = (unsigned int)vectors;% r8 j$ _: ?8 x. e
ICR = 0xFFF0; ! s+ G1 r6 B0 ~' @9 K3 z
IER |= 0x12;
F3 @9 t- J m CSR |= 0x01; . J4 K$ k8 d% T% }0 h+ O
$ n6 Z" P# Y/ \9 U
6 f/ x2 c. v% L n: G) ]+ H3 H/ _; ^$ z. s
还有就是两个输入输出函数:( _* q/ ^) @% h; ?. S) U
void output_sample(Int32 out_data)/ `- W+ I% c6 F, f2 u
{
7 U! r* _/ f d& c+ g9 I& k' U+ x# v AIC31_data.uint = out_data;
' _# n9 M z6 L8 l0 J MCASP1_XBUF5_32BIT = AIC31_data.uint;$ H, n. G5 F8 D: s: ?$ h. g# a& ?
}
# h2 p* E/ I m+ e& ]
) K0 m+ D; Z9 t/ c/ y" ^0 f$ S+ vInt32 input_sample(void)
3 H0 \ K- w7 u/ a{
# k9 Q$ M- d8 V" g: H9 u AIC31_data.uint = MCASP1_RBUF0_32BIT;$ t. |/ O4 Y6 [# V+ ?
return (AIC31_data.uint);
% x# q' M3 q! B Z# g}
) T9 E) I2 K; |# h- K1 K' V1 Y- o! v
: [9 O5 S% `- k/ J$ P4 ?6 y |
|