|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 U$ Q1 n8 t" X$ }( t7 @3 `) a- b2 Zmain文件:: f) i! S; {0 s' A) e. d
interrupt void interrupt4(void)
- u& m* h! n, I& C, o; S{* h$ W. m g T% ^2 Z
Uint32 sample;
% t2 R" E" ~8 @% t1 I
: [9 S& D' ^9 l sample = input_sample(); // read L + R samples from ADC
, W7 c" q% o9 `) U output_sample(sample); // write L + R samples to DAC
/ I4 Z0 h( [' C; y$ i9 q1 W) j: `- t return;
" U" B! D" C; ?+ U. a) Q' }( s}
* v' v0 ~1 }; `3 F
% {5 r6 @6 ~& z4 e/ e: Z4 Uint main( void )' l7 f& ^& R2 {) ^
{
! [. \5 D0 K3 _7 [
: O6 d- `! n5 ]5 h n7 T /* Initialize BSL */
2 ?4 `2 d3 a3 w* W6 e: W EVMC6747_init( );
5 u, t, {: c! a. o8 F /* Call evmc6747_intr function */
& B0 }9 _2 X9 U2 J aic3106_init( );
, R/ G) ^, `# ^ while(1);
+ W8 f0 q2 S' O e9 v. ]0 u}
: {- D& D' o; u8 F; i, [9 r. K: V$ i/ s0 X9 p5 x5 j7 S8 d
1 D$ W N( j: O" }# daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 f \. C: d! D+ c; w" R' S
/* Initialize MCASP1 */
5 Y: p4 {: ]% P) }& b mcasp = &MCASP_MODULE_1;
% @( O0 D# }( F" L1 x mcasp->regs->GBLCTL = 0; // Reset
! F, x$ B: {$ S- r mcasp->regs->RGBLCTL = 0; // Reset RX. F3 Q2 Y6 x: {7 r" g! U
mcasp->regs->XGBLCTL = 0; // Reset TX8 ]4 t7 m# o. s v$ @+ S
mcasp->regs->PWRDEMU = 1; // Free-running
" x; B) m! T j' M) W5 C // configure McASP0 receive registers
" D1 y1 w8 Y w# N& |8 j" l mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 [) d/ m6 x1 E5 N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, l6 x4 p+ L( J; B
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word. v D5 b) I% k V
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 d7 M4 N2 C8 J mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
1 d; ]- g; i7 F- X8 F. c' o mcasp->regs->RTDM = 0x00000003; // Slots 0,1- |# b* l$ A0 t1 e; t/ ]. M1 V
mcasp->regs->RINTCTL = 0x00000000; // Not used3 p1 Q+ d% Y! `! x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 P, r: r7 J. X# o, i( q* a5 a+ p- t4 ?' m/ v
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used" {* x2 W, |. G3 N9 n
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 ]( i, o7 l N1 e mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; j7 m8 N; u3 l3 j+ ~! F mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 A$ j6 E2 x; s' R' }# [ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK' R$ q& M- Y- N. a/ V
mcasp->regs->XTDM = 0x00000003; // Slots 0,1' M3 P$ k" L1 @# t7 R
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit( x' P1 b! R q @# R
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# E, O! s: e( w9 Y) H h$ o5 B* o) Y% u" c/ `, K7 p, i# ~) d( V/ t+ W5 x
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN5 S& o8 l+ ^- k. h- A$ D
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
1 ? E% E* `0 Q- x6 t mcasp->regs->PFUNC = 0; // All MCASPs
0 X# N4 w7 L7 n+ a0 S. f1 r mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 g7 j, I" N/ s$ Y2 ^: c4 ?! m
* e$ A6 a1 E4 B
mcasp->regs->DITCTL = 0x00000000; // Not used2 n/ P4 C1 W, z6 @+ m0 _
mcasp->regs->DLBCTL = 0x00000000; // Not used3 K9 v, o5 I/ T" X j! f6 w G
mcasp->regs->AMUTE = 0x00000000; // Not used o- L# A8 b) {4 [3 _
7 w0 N0 M9 x* Y. E
/* Starting sections of the McASP*/
. ^- B2 Q0 G5 P2 R" T: W" z m mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- ]/ K& G* w1 s9 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 U# m' |* U" E2 i mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 y9 l( H$ r; D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); g2 S, a' f" q
6 O' n$ E8 r& N( c+ l+ L mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , C9 F3 l' ^5 N& B( G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' X' j0 d7 i! l+ N/ w6 }/ H5 J, T
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # [$ E6 X f. V& V) o4 n- `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ `, r! G2 t7 ~2 y" U
( }/ J# J1 B$ e- B& n: Z
mcasp->regs->XSTAT = 0x0000ffff; , ^! D' _* F$ U0 K1 ~
mcasp->regs->RSTAT = 0x0000ffff;
l% I2 F* Y4 N8 N0 V& i8 Q0 V2 Y0 f8 i4 m% E* [% z
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 ]$ R7 I6 {+ Y* N9 i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 d. l% T8 b% \* g( I0 F
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; s8 I j1 t" P3 Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! a6 X4 }; S4 k d# s$ v2 d6 g/ b
/* Write a 0, so that no underrun occurs after releasing the state machine */
6 r& V$ f! \: k. d, y mcasp->regs->XBUF5 = 0;
, d; e6 N& P! a4 R mcasp->regs->RBUF0 = 0;
$ D6 `/ n, Z: M, z4 R& g% o" Q; G7 u1 I' D: M2 Z. B
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- {+ S. h9 g( w% \+ ] l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' P ~5 {% ~! q8 }" X/ P mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ p( j! O+ o9 z$ b/ H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 x) u( r! s2 B: @* X. ~* h' l
. H) I, F: h( g# H mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; y; f1 Y& b7 ]8 x5 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 a3 p4 w$ M7 b9 V
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # { E5 }# S6 F; }' T3 t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( c5 d ^( ~: `( Z
( g( l) m& E* n6 V4 |% J5 R1 s% h CSR = 0x0000;+ u6 u+ l$ q8 {1 h7 |
INTC_INTMUX1 = 0x3d;4 E( U/ n5 @3 z
ISTP = (unsigned int)vectors;$ F8 L' c! K$ _0 B9 r6 ~ G! {
ICR = 0xFFF0; . T" `/ A h' a) H6 W
IER |= 0x12;
; X, S6 q$ |" B; B8 j$ m CSR |= 0x01;
% u! `6 u, b0 G) a7 T* p9 H+ h D0 k5 ~; M2 G! [6 T
% {( M5 B& K% k; l/ h# w' f/ [. [% i! S
还有就是两个输入输出函数:
2 E, E6 b; N1 ?. S+ x$ m: Wvoid output_sample(Int32 out_data)) K) ]6 R8 a, i0 w7 F5 G% ]7 X
{
1 C0 \% t$ h3 |1 O* m3 W8 y8 {& ? AIC31_data.uint = out_data; - Q# `0 e( o' \9 ]
MCASP1_XBUF5_32BIT = AIC31_data.uint;8 O6 M9 U4 }" b
}
9 {" p/ Y9 |5 B9 ]
7 p: n8 {; _$ L# a5 V' [! ]Int32 input_sample(void)8 o' n" ?" o' u9 _4 ^9 p: l
{ 8 x, p9 B$ m0 U( g3 [$ L
AIC31_data.uint = MCASP1_RBUF0_32BIT;
) ~( Z& O3 b# B" ]' ? return (AIC31_data.uint);
" D- U I, d/ N" p/ z( D1 `0 C, a2 Z}
& `, @' _ Y( U, [- S3 e( z9 v0 z2 ^2 o0 I
|
|