|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 f6 S7 h- F. o+ U/ n2 F
main文件:# E$ U+ B- S/ V1 |' ?: C" S
interrupt void interrupt4(void)
7 H" D$ Z! o& t& N{- {& i( U) g+ j8 v9 \1 @ ?
Uint32 sample;
0 V( M2 k1 Q: h7 g! J. A3 x
; r, X, y+ T: ~$ \& n sample = input_sample(); // read L + R samples from ADC- f5 o3 v( `3 N
output_sample(sample); // write L + R samples to DAC 9 Z' G! f S4 T
return;8 K. a, D) @# `2 H" ?# [6 X
}
D5 E9 C7 f0 Z/ ^6 i) ^! l2 ?
9 E5 t. N) M( ?* P+ rint main( void )6 T' v" V( o( c. h3 D5 G
{7 `. P- V& j4 V r1 u
; I8 J7 C4 @8 T& H8 H1 K
/* Initialize BSL */
/ y: M+ H, J4 } EVMC6747_init( ); K9 e2 }4 [# n3 [7 S% [
/* Call evmc6747_intr function */
5 a, J9 Q- a: U9 S aic3106_init( );
& L O) \: k% o3 A9 F' G while(1);5 B/ V4 j* t! @/ k; {2 ^# R5 \! F1 U
}
! X7 ^ L8 `0 Y. w+ v9 E: y, t
6 F/ c7 j' ?4 Z
& b5 c; G. P" u: Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 e( q) U% ^) s" E& t% G/* Initialize MCASP1 */
% A+ a. |! p# B* _( _* B3 \6 j mcasp = &MCASP_MODULE_1;
; _5 n1 n1 p0 a$ K; C! D7 | mcasp->regs->GBLCTL = 0; // Reset
) x3 L0 U6 ~6 m. ` mcasp->regs->RGBLCTL = 0; // Reset RX
1 A* d h! C. ]1 V mcasp->regs->XGBLCTL = 0; // Reset TX0 C# z8 M* ^% b* i# Q' c) w
mcasp->regs->PWRDEMU = 1; // Free-running
9 u( B0 f: |' I; A! a // configure McASP0 receive registers2 ~# s, H& k* x/ s5 w
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used t" y9 k( ~$ [& D% r' J8 _
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 ^& m$ P: |; y# ]3 @0 A mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word( A7 A% ~* R5 X' M$ ?
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 J' F. B3 N4 N) z' c( |
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* e9 Q3 \' R+ v! Y
mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ q, f/ D# c/ q3 j
mcasp->regs->RINTCTL = 0x00000000; // Not used9 [3 y2 X3 }- }
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; `1 Q2 C' i3 n% m& x
8 W9 H' j1 K" V( N. U7 M& P$ _9 q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- c5 x: I" Y& F i2 w# ?. U
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* }, |: h2 h2 Y% K! y+ W0 M
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word L/ F& {: ^, C. {
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# X z3 g& y6 ]5 X. Z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK M5 }. P: ^- l1 `+ s! o( N
mcasp->regs->XTDM = 0x00000003; // Slots 0,1# `; g* ^/ `: s. W, y1 Y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
7 p7 E+ @4 w1 j2 \: Z mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' ^: E# ]: E" t- p$ d/ x8 K
1 C# {5 y- ]" o" O mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 @& L; S8 [7 p% Y* ` mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT0 g+ C$ G. v& t- h. d
mcasp->regs->PFUNC = 0; // All MCASPs
$ s( s8 F# I p. N mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 I- S# Y' b$ H
/ ?: g! j: P" \( p* b8 u- v' A ^
mcasp->regs->DITCTL = 0x00000000; // Not used
e. ]) ?# v- \9 Y4 i4 b mcasp->regs->DLBCTL = 0x00000000; // Not used& M/ G6 B9 [# j! W: R
mcasp->regs->AMUTE = 0x00000000; // Not used! k" J# u2 Y8 }. g; w
# J, V9 o0 f) c1 o7 [5 Z
/* Starting sections of the McASP*/' n O s( \: m+ _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; F, W* O/ y( e" F6 ]% L8 {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( R1 H) F& S$ H mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% H- V6 f, d' K5 C$ |: i9 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! Z5 R2 ]# q9 K% n% v' p; U
9 z# q! L P; d9 ^ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , m! F- } l; u, Y0 r- f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! y, y( n; v$ A
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 G% c& h& _$ R Q `- F! |4 s" h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, T4 C0 {5 H- y+ q I1 x0 T& f: x
( ^4 c9 N8 t2 y, u' M mcasp->regs->XSTAT = 0x0000ffff; 9 x7 C# w0 _' r3 T& Y
mcasp->regs->RSTAT = 0x0000ffff;
. B" l6 T9 ^. [4 J
5 C& ^0 G' p( |8 D8 y4 E mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- v4 x9 H1 C, E" O8 ?* G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ M% o; Y! J6 m
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ e8 W' }; x6 \) w/ g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) l8 G |# `5 i9 ?
7 {. E1 x/ y( Y" h6 W /* Write a 0, so that no underrun occurs after releasing the state machine */
. b; }" S6 {2 `) f) R6 T mcasp->regs->XBUF5 = 0;$ n6 a; G1 I; f
mcasp->regs->RBUF0 = 0;) p: }' \ v1 P7 W+ o7 e* d8 d
g8 v$ V l3 _4 n mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ W3 H$ ?/ S k% a* i. m/ T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' k& H& P& E+ l( v5 G* Z2 U mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# W" F) V: l" Q& n; q8 e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" t; N7 d" `# `/ ?- p% {- s
7 {! F* |! _$ r* T6 d+ p
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 w. F% K" I; k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 }# s3 ?: G3 n1 x) ^ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& h; f5 H3 z% s% p: @3 | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ z5 s1 b4 g+ r& z' D
" J# X7 E3 m* B) g8 a8 C
CSR = 0x0000;; L& {3 q! h) {2 F
INTC_INTMUX1 = 0x3d;) \! p/ e* ], {! R
ISTP = (unsigned int)vectors; U! r/ D; C/ r! k
ICR = 0xFFF0;
$ X. z; c# `- t0 { IER |= 0x12;
0 \0 D. v1 J. f CSR |= 0x01; " x- G/ a% O4 x8 l1 J5 l
0 F( M$ r) r3 x* o# ^& W" p% Z2 H
0 j A: o" t! s5 o6 ?* w3 {
l {4 p9 f" N% s T) R4 K5 d$ g" g还有就是两个输入输出函数:
: i( K6 F( R4 M8 N9 u* P, z2 pvoid output_sample(Int32 out_data). E. z/ C ]# X# T, K- c
{
: X' k' Z! U7 H7 a; b: a AIC31_data.uint = out_data; 4 E) D# ]$ L3 i% z, w: D( G
MCASP1_XBUF5_32BIT = AIC31_data.uint;* l6 z; J+ b- d3 F# n1 A
}" h" h8 u1 ]* ^; z; J
! {" p, A9 g4 q) e- F, DInt32 input_sample(void)
/ N2 w A0 G3 @; f5 v{ / I7 a# q t8 ]0 N q
AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 Y' `# N; t9 Q/ D4 u& d) A) W return (AIC31_data.uint);
! Y, @7 D, t( o S7 ?* h}8 Z8 O a6 H9 V- @8 r
9 O, w+ i7 n7 I( H" n
|
|