|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 v: a/ n3 h* b/ ]) l8 Umain文件:
9 C, t8 q6 Y' linterrupt void interrupt4(void)
1 l' c5 C0 p& ~+ B% j9 B! @% ~: A{
- V7 }' K$ a! j! } D' z Uint32 sample;
0 S, o5 s6 j( ~; f; k% J5 Z' |. h- P. [; a6 R% L
sample = input_sample(); // read L + R samples from ADC3 i7 D3 c. B: ^
output_sample(sample); // write L + R samples to DAC 7 B+ P" t' W- s! ]# M, O' ]. S
return;
. t7 ]/ }5 j( C}
u# B- I v* o5 u! J0 z' s6 w7 r( ]- y5 k/ }" L; V: F
int main( void )
/ }4 i; g& s- ]+ p! a8 M3 j8 P{
2 W* g& E0 V6 Q5 \% G/ E y, c
6 o, ]9 t) ^* }( f$ P5 ^$ t. o+ O" b /* Initialize BSL */" u, p& Q: U9 p8 L+ Q9 ^
EVMC6747_init( );8 L9 \* w4 k) ^! n; Y
/* Call evmc6747_intr function */
. W7 I* W7 ]) E9 v1 Z: ^- a aic3106_init( );
! L/ f8 E6 u5 {. x! D" j' T while(1);
* S; ^: Q6 C0 _6 K; n; ?$ x, m}1 ^- {/ v' b( ]9 P# q: C8 O4 D
1 |( c) [7 C9 L' a3 e- q
1 t8 Z" r5 ^" X3 i5 d9 ]2 maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 H0 W/ T2 p( n( j& a) f
/* Initialize MCASP1 */
( f& B# {3 V, n6 _! b mcasp = &MCASP_MODULE_1;
7 o, M" |, P6 M3 T/ n& ~" ` mcasp->regs->GBLCTL = 0; // Reset
& x9 ]' s! ]7 I+ h4 H mcasp->regs->RGBLCTL = 0; // Reset RX
* D; l' z* _$ v% Q# ? mcasp->regs->XGBLCTL = 0; // Reset TX
8 ^9 t# ~; f% P2 q9 j; @* i0 }# [8 u mcasp->regs->PWRDEMU = 1; // Free-running
' ]/ d+ {' l: U // configure McASP0 receive registers1 t; v! k5 T3 Q+ H3 W' z9 @
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% A7 z0 z, q0 v9 \
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# r$ ?7 |! V+ v mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# C& l$ i$ d: E* U) v
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! n6 m; k& S8 i& ?) D, @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 h* {+ _# W' U( H: d4 n0 A0 B ]3 G mcasp->regs->RTDM = 0x00000003; // Slots 0,1
1 b0 c4 w; h; {- S' J mcasp->regs->RINTCTL = 0x00000000; // Not used0 w. p' S: { n0 p! J
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% a4 m7 R2 G' p1 d3 U5 m) C8 g+ o$ o: \7 F8 t' `4 D
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used4 g, A& W) y2 R, e2 z# `: a$ |
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; Y) ]5 K2 o, }% ` mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! F/ s0 x0 p; m! V9 @$ W/ d mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
P) z6 A) P6 _; i: V mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; [9 G2 ]. a3 c$ B mcasp->regs->XTDM = 0x00000003; // Slots 0,1# Q0 O4 r0 _$ m$ v! Y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit- S6 H: O2 g- v3 w0 S/ b9 C
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. Y$ |7 B& \4 Z, |: U, ~7 O0 v- t
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 d- S4 A) g+ h5 `3 i* K
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) p- O1 y, C, U8 D1 M
mcasp->regs->PFUNC = 0; // All MCASPs
1 j: R% a! V) W( @# A; y3 M& l4 c; W mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# h2 X$ n6 z( x" n* Y3 ?4 }- X. t0 x& U ]! M6 G5 e6 W( g
mcasp->regs->DITCTL = 0x00000000; // Not used% H6 J s6 _' k( b, {9 [
mcasp->regs->DLBCTL = 0x00000000; // Not used
8 e6 e a2 V5 ? mcasp->regs->AMUTE = 0x00000000; // Not used
5 O) w: c$ H& \: M- ] m% G, L- P$ u
7 T, `, u a2 q* M4 [/* Starting sections of the McASP*/
+ \; n4 ^- C G mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: _3 t3 H4 W7 q/ m @7 K8 c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 5 U, ~- V! ]+ I( W% {( `/ ]
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: z: }0 Q$ Z7 f! [% H" G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 S4 f8 U: L0 \4 j/ P) M+ O/ q' d! F. D2 P' z7 T
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 M ?: R6 J, R9 @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 |& y3 L0 k% `) h1 V
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ t! I' R% s/ f7 v7 x" N9 T# h+ o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ U; e# R' I1 b/ N0 v4 r( c- Z+ k8 u& p" u, W; C4 k$ w- g, O
mcasp->regs->XSTAT = 0x0000ffff;
+ z/ o+ q4 W" ?( L* y mcasp->regs->RSTAT = 0x0000ffff;
5 ]$ K- z% ?# r8 q% I9 F
1 \8 c# q2 W4 B2 ]8 l4 _2 z mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ U% j: x y v# ~. v, v' v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. R- ?+ P- h0 T4 a0 \$ X7 Q mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 ^* n* m4 L0 S; r& c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 m; ]6 o) }& a: ]# [, o B8 K
% n- ~+ m/ R# i4 y( ]5 K. e
/* Write a 0, so that no underrun occurs after releasing the state machine */5 Y7 H- V9 m8 Z/ S; n6 }
mcasp->regs->XBUF5 = 0;
/ Y$ ], d* D* R6 }3 L) T: P mcasp->regs->RBUF0 = 0;
2 P6 O. z) u8 w
8 }' V* O- @7 [; T9 ` mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 a$ \8 d" j' N( Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ w" T5 `6 I; D/ h' u4 g mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ e$ y8 i- l& s& G# x) X& q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; }! T w; R( w8 w' ~1 _/ d. U. ?' n3 J
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # D/ i6 ]2 ]% u f1 |2 @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% w+ L. }3 F2 h7 C; t, }1 M mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 w7 v3 @8 g! U4 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 h. t8 M5 {4 g: g4 k! O* Q8 G4 R1 s1 ]! p: i2 |/ e
CSR = 0x0000;
; P& K4 J% B, S8 Q, [% T INTC_INTMUX1 = 0x3d;4 [5 ^' ]9 U, z3 n$ }) S
ISTP = (unsigned int)vectors;
( h2 _& M, z% P& H F, b) ^' ~ ICR = 0xFFF0;
# y$ l3 q; S8 T& d, a IER |= 0x12; * Q% b: J2 m& g1 l4 R
CSR |= 0x01; 1 b* j/ a$ D& s6 n- N" P
7 L9 D8 U! X+ e/ \
' n& X5 x) C- H" D% y, P5 Q! k
x! A | |9 x1 A8 f还有就是两个输入输出函数:
! }; n/ P! Y3 u# p: s9 dvoid output_sample(Int32 out_data). K4 x1 T% b5 ^6 ^* W
{
# U7 U6 K8 V2 b S6 q AIC31_data.uint = out_data; 8 [4 Z. f! e8 F. P+ J1 c- [3 H
MCASP1_XBUF5_32BIT = AIC31_data.uint;2 l: G) ~- d& M/ m6 q
}8 H2 |) Z/ N: Q+ ]% z
* C! ~7 N: M4 Y, |- `9 s0 f0 i9 |0 MInt32 input_sample(void): j4 g A" e; M/ ?
{
! e1 |+ H7 O/ q; X8 A+ a. |3 Z7 y AIC31_data.uint = MCASP1_RBUF0_32BIT;- D; A9 I" m! k* F
return (AIC31_data.uint);1 \. R, S1 n/ w; g! [
}
* w0 @* q$ \7 o4 c# x; B
5 J/ V9 ?$ ?' k; | |
|