|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! y) j B4 P* F. U- umain文件:. e; B2 Q2 N; p; V ^
interrupt void interrupt4(void) ) w7 r* @6 f) g; g; J; y
{5 i* o9 w1 T7 |! d" n7 `# t
Uint32 sample;0 U8 N8 B5 y# h3 r
" }" z6 X6 M0 Q3 m# ~ }% Z: S
sample = input_sample(); // read L + R samples from ADC! Q/ u% T! p, m0 k2 F
output_sample(sample); // write L + R samples to DAC ) X' D" p4 I: x
return;: @2 O' X. h/ P# \4 t0 m) I
}
5 q4 g' T" j& ^; T. f& F6 h) S9 M4 w
int main( void )
6 T/ K$ a. j- D7 l3 u% S5 {6 l( s, ~{/ N, [, ^1 u% J5 \* e
* d$ U" i" i1 G& A: A /* Initialize BSL */ X' s' I' i/ g2 ?! k Z
EVMC6747_init( );, f) X) s. [6 D/ J8 }
/* Call evmc6747_intr function */
1 @7 h' g% c1 g- |: o aic3106_init( );
' Q; C% V7 F5 f while(1);
' ~" S! _% Q) x! w6 A7 C% }}+ J7 Q' b9 C& n: y
2 w0 @ ~0 x+ |! \+ c$ B+ }2 \9 D1 J. F2 s1 L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" s& H0 k2 F( J. Q
/* Initialize MCASP1 */. D+ }! E/ s5 q# q4 v3 K3 w9 k
mcasp = &MCASP_MODULE_1;: `* y$ H4 k2 T
mcasp->regs->GBLCTL = 0; // Reset0 U/ @+ a9 d: n8 E- y" w
mcasp->regs->RGBLCTL = 0; // Reset RX
$ v+ \/ }# K6 E1 e) b mcasp->regs->XGBLCTL = 0; // Reset TX
. m+ s2 T6 F9 S4 m6 D, B. n) `& R mcasp->regs->PWRDEMU = 1; // Free-running
6 ]( Z( J; G9 U# a7 S2 `& O // configure McASP0 receive registers( Y6 X; x9 Z' m/ u
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" n% T1 `4 G+ _4 S' {
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 I' u/ {6 Y+ ^' J# ?, h' q. W/ o# ^
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word, r4 t. u9 B( g7 a( F1 H9 l
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- P/ x) b; ^, O7 l4 Y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)- O ~, }/ m3 W8 G; ]$ J
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
$ N; a, n. X; ~$ m$ H mcasp->regs->RINTCTL = 0x00000000; // Not used
) d& w, Z* N% A7 K9 n7 N" O mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# F( B8 w, O% _# Q, W' o
' ]& F/ I4 ^) G: Z$ z" m mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
?/ L5 t8 l& {- [+ \4 A mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' \1 I: k1 M! C2 d; b7 r1 T# C+ c mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) W! }# A5 g7 T0 X* N( k mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# p5 h2 G& G7 O* \& D/ s mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK3 H9 m8 ?/ J! g# v' w& i
mcasp->regs->XTDM = 0x00000003; // Slots 0,1% u+ K( p3 W. ~6 j0 C5 p# V
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
8 {3 y2 ^, h8 R* o5 @ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; }5 H+ c0 I% ^" U9 u
* x6 g; w6 a' [; z: } mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
+ K( W: j) S1 D! h( V# Y# ? mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT, {4 A3 F% h" I0 X
mcasp->regs->PFUNC = 0; // All MCASPs
, W3 S! I* _. Z4 S! B mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 [( i4 `# R- ^) X" |) q
' o6 E% `0 I/ k5 z$ K0 q- k2 e* \ mcasp->regs->DITCTL = 0x00000000; // Not used$ `7 v0 |$ u, Z0 x% F" k$ X+ o8 I" {
mcasp->regs->DLBCTL = 0x00000000; // Not used
- K( ?) P7 K4 t& o; r mcasp->regs->AMUTE = 0x00000000; // Not used
, l! a) @2 A# n% j3 z
9 W4 ?% H+ V' ^* o* R/ E/* Starting sections of the McASP*/9 ]( A4 w4 f# m0 d: p% q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( J" M; W' u. m, s) F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 k1 ]" J8 J5 `, d mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 A% V- e) O' m7 {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" N0 i) G4 U4 V9 @
4 E; e, O9 E; [' G9 @. p mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ \. c' |0 s+ F2 ]8 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 J- [# E, H" E/ S" M mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* P, @6 \4 K# l: b! S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 Z# ^9 o. Q8 P! t" |3 W. @) s# a& g2 t
mcasp->regs->XSTAT = 0x0000ffff; " ~# h) n% N, L! a' _& T
mcasp->regs->RSTAT = 0x0000ffff; * P5 q% g) H. r3 n
* c+ c+ w, w) \' N) N mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' x) |- B. c. E/ ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) j& O. e/ V/ E# B
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 p+ z' g& [6 e8 }4 j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( K0 d% l, D- p- A& }4 r7 V0 B. l4 W" R4 g/ ]( D' N
/* Write a 0, so that no underrun occurs after releasing the state machine */+ x Q* p) k& [8 ~) d |
mcasp->regs->XBUF5 = 0;! p# e: P0 R2 \* D
mcasp->regs->RBUF0 = 0;
0 S$ Q- Q, ]7 d3 r% Y/ P* L* g9 G9 [& h4 A6 i8 ]
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 p1 T. O- d2 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 ?- W7 Z5 T: I, f9 N5 T
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 l, r+ }) }9 u9 ~5 n+ { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" j# p4 w8 n' `! \7 M! \, R4 d) ^, X: @6 }
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 c3 C) L# a: @ Q% o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, }& N( `* J u9 A& i+ O mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ v1 `1 ]8 U+ \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 u+ u3 Q$ ~' H5 b& N
" _2 V* t3 q7 R
CSR = 0x0000;+ [" P, z5 L8 Y* E
INTC_INTMUX1 = 0x3d;$ t6 n- S6 m; c6 v1 ]
ISTP = (unsigned int)vectors;) F/ {/ H& R9 y1 Z2 T
ICR = 0xFFF0; 9 q3 ~" L& q# U; X" d
IER |= 0x12;
+ \' @' w, o( @/ R' w" r2 N CSR |= 0x01; 2 b9 r% ~ g" @) D* x
# i- G& F4 N% e" u9 l1 x0 R
( c5 N& f$ R: r
6 G q: E7 H( g还有就是两个输入输出函数:* }& U: f( B& k. d
void output_sample(Int32 out_data)
- g" R9 {: \& y8 n! Q0 M6 h' {{6 N8 |% `6 A3 T( F) W
AIC31_data.uint = out_data; * D4 ~5 o; m; j7 ~
MCASP1_XBUF5_32BIT = AIC31_data.uint;
) z! g } x+ E3 P. ~+ j}
' \9 h0 c5 }4 b8 O, e/ _8 X& E B: ~* Q$ m8 t8 u
Int32 input_sample(void) ?+ u- c9 P# F) S) [
{ 1 K; y5 N4 l6 Q G! m
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. R. K4 h. \9 k8 B8 a return (AIC31_data.uint);
' m9 N" Q( E9 [}
0 @! o/ e4 I4 I4 Q7 f
8 w: B* W' b& N |
|