|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 }3 f; ^" I5 l! K- m" A- Tmain文件:: d; f3 D" q2 l1 S2 |% V* I
interrupt void interrupt4(void)
' e& j9 I5 m% ^) S2 H{+ L9 J* s7 V4 M" {8 w# V7 c
Uint32 sample;
( N: V& K0 l* ]: s J8 m
! [4 f* q: n& d& i sample = input_sample(); // read L + R samples from ADC
# L* z j& X: n* \& T% ? output_sample(sample); // write L + R samples to DAC " {) j8 B r1 D
return;# D7 \* e7 C: Y7 X5 } K
}# n6 P: E7 R4 R5 e( `0 O' C
& a% d: ^$ r& [# X( c4 Xint main( void ); [, K% }, u9 ?3 Q( @' _" T0 Q
{6 z7 ?; A+ h9 s
A9 |+ m) z9 ]! Z/ U* y2 D /* Initialize BSL */: P& f- r) Q" ~+ P
EVMC6747_init( );, `3 U! C# V3 E8 {# a9 G& _
/* Call evmc6747_intr function */+ | H" D! D- l. {" J! g
aic3106_init( );
) ^# f3 x9 s _* E8 r( L while(1);
3 n' [# v3 d4 r7 r}
9 O6 L; O, _! G7 O+ ~* J9 q' l d4 F; O# o4 {# x5 ]
, Y' g5 o% H) Y7 F+ G2 z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! y: q6 Y$ o5 r, \$ @/ R+ }; v& U
/* Initialize MCASP1 */ y8 v2 _5 N$ m1 P, D
mcasp = &MCASP_MODULE_1;
$ g0 @& k) m# N2 L8 F: n, V/ k6 A mcasp->regs->GBLCTL = 0; // Reset' ]8 e$ y' A3 m/ F
mcasp->regs->RGBLCTL = 0; // Reset RX7 `' M U! J7 Z/ Z# X" s2 D$ L9 k
mcasp->regs->XGBLCTL = 0; // Reset TX; _( T8 e/ u! t5 N2 g$ r
mcasp->regs->PWRDEMU = 1; // Free-running, J7 q y0 Q0 c( T. i4 C: R% V; ]
// configure McASP0 receive registers* G) Q9 s# r# E# b0 f G5 P2 m
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' I: H: V0 w5 s- j* Z- X* L
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: ]- ^4 b# T. H$ X, t2 s7 m& P
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; W! A, j- _0 O5 J! C
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- F. g2 n& r; G% T9 |& @ K' G
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, I- ^. S+ j3 h j" M1 E+ P mcasp->regs->RTDM = 0x00000003; // Slots 0,1' r/ G7 Q+ f0 n- n9 p
mcasp->regs->RINTCTL = 0x00000000; // Not used4 _# ~/ D* y4 b- N4 t
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 A {0 O1 ~" B6 |- D9 _# H, @7 _' ^+ m7 D
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ N! W5 z* s' b& u/ s1 y7 j
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus a' x0 }$ m( w+ T# l+ w- `
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 f' V. T o$ C1 r1 a0 I- l mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 i: W, w( @+ C+ ^ J1 _
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ t1 W( {; |; L4 b6 @ mcasp->regs->XTDM = 0x00000003; // Slots 0,1' G& b: O5 y3 t
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 [+ X6 i9 \0 \/ M% d( @ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( X7 o/ e% `: l# t+ l) c
5 Z1 W. k: u0 _0 \ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
+ z6 l4 [( ~7 U+ z; ^" l0 _2 B mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT0 f7 M8 }5 e, x+ w
mcasp->regs->PFUNC = 0; // All MCASPs! F1 n# A+ T! J1 _- J) X" v0 w
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* w# V8 b0 P9 E: J6 H' u
9 K! W. j( e: k$ S7 T f* @8 [ mcasp->regs->DITCTL = 0x00000000; // Not used
8 N7 ^. K% }; g( P) E mcasp->regs->DLBCTL = 0x00000000; // Not used# |3 a( {/ C) M2 N' e
mcasp->regs->AMUTE = 0x00000000; // Not used) K3 w7 a% c, _' L
- G' d2 m- g' z" h/* Starting sections of the McASP*/0 ]! J. p: D+ D: Z" f$ W4 D- G
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 @9 J) K7 [& p0 g( |4 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; s: ~ n r+ t0 D! q" e
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & j* U# f5 H% } s) ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, f; D" M# I |3 x# e1 ?0 O: R+ T) m4 E% v; t
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 C! m) w1 Q# u% j3 T7 d3 B! i7 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! C; m0 \4 V0 g! i9 `& c6 }* u6 j
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 a0 E! C/ u. Y Z E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 W5 y2 o ^1 W2 z* z. w$ \3 x0 Y7 O) ?" ]3 N
mcasp->regs->XSTAT = 0x0000ffff;
% F) B( K- J* @1 m mcasp->regs->RSTAT = 0x0000ffff;
: @1 _! F2 y+ k0 Z) \( d6 [( ?6 Q. ]- F6 V# I0 ]3 q: h
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, I1 U% d, c6 {3 G) @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 v/ ?' }7 ^# @; D9 p( G& Y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 U7 b( O6 m3 a+ j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. Z1 S* E% e, E; ^4 I3 @ _. ^) q& w
/* Write a 0, so that no underrun occurs after releasing the state machine */! l! y% U/ d+ e3 y C" L: f$ Y
mcasp->regs->XBUF5 = 0;+ j6 `! x$ u% e) X! ?. X
mcasp->regs->RBUF0 = 0; ?1 z+ k2 f0 d3 u- P
3 C! c. y/ ?3 n) t mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& g) R) ?8 h1 n3 c! k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* m b4 h% B" l' s$ j; L* K# O
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) p- F" k# c6 r8 n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- i# H- `8 J3 ^
( Y% i% X7 T. C0 r; W% L mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, R0 N( D" K. S1 {9 x+ n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 U5 x" T0 \, h8 ~
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 z9 g" y; @4 c1 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 a* o7 C6 \: o* q5 J0 O) v _% o- r& o+ Y3 ~; j2 _8 \, ~
CSR = 0x0000;
) F% h% ?1 b7 }- ^3 r# L INTC_INTMUX1 = 0x3d;- D O7 z1 Z3 y( ^* O
ISTP = (unsigned int)vectors;4 I3 R% { L1 N) b# K
ICR = 0xFFF0;
* E3 A" L' q: C$ N5 }# g- S IER |= 0x12;
: |5 N! c, \. R$ d( p! h2 S CSR |= 0x01;
0 X6 [! t# s5 c s/ z' ?' L5 `$ i2 _/ X5 z4 \# X; l, N! V8 R* T
# `: v/ k- p2 U2 @) V+ {" g
" y9 g1 F' P& n% {2 J3 a/ V还有就是两个输入输出函数:
6 U6 E4 @; t) R: ?' R+ @( fvoid output_sample(Int32 out_data); N; F0 _# j1 i" ^6 @
{
+ x& @, r! x/ U. S AIC31_data.uint = out_data;
8 A! u5 h1 N& x. K4 ` MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 Y" L$ n. j" C" u# S}# E( g$ h8 L! S, c" V
8 r9 u0 y, T0 X% R# o
Int32 input_sample(void)9 V0 N- B) y4 t' M0 f
{
: R$ _9 \+ \& k, P AIC31_data.uint = MCASP1_RBUF0_32BIT;! G: G- c+ ]+ ?
return (AIC31_data.uint);' b1 A" y8 L: F; r
}+ C" T+ L" P- Q& a
8 i$ e/ Y. m4 z0 C/ d |
|