|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% A5 m' t/ u1 x+ U7 Y/ I x7 b2 R
main文件:
, B2 v: h' w& @) `8 i9 R" k3 p; linterrupt void interrupt4(void)
( U* x' i& p/ H$ V( L; a& N+ _{1 \. Y) X9 W+ i0 m9 O: A
Uint32 sample;
! U5 P( S& X/ O6 a# g- x2 a' P; Y/ W t3 B2 h% \! P) i
sample = input_sample(); // read L + R samples from ADC
' A' X1 a# j. q0 Y3 d- m1 ^$ P/ L output_sample(sample); // write L + R samples to DAC 2 m, Z; E' N, D- S: L3 h
return;- d5 e, U7 O3 L: p L9 S
}
4 C& L' l0 ]: T' Z
8 F4 W( _! y9 z& o' }/ U i/ Hint main( void )7 o: f3 B% O( H7 ]9 v. R- }
{8 E& M; g. c4 F* A7 {9 m
& n; Z9 {! d( j
/* Initialize BSL */
& j. b* B& M @. H- J EVMC6747_init( );8 q; f \7 K" q
/* Call evmc6747_intr function */
f% n7 s$ }3 f" s* T- E aic3106_init( );
# Y2 v: ~4 W& O while(1);
3 J# R( l% \- c8 Y3 X}" O8 O5 y" I( u4 ?- m, x% k% q
, c4 F4 Y$ f# R1 T0 s; \' j
' g0 k5 a3 A' o7 |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- l# _$ x) v* l8 S1 ]/* Initialize MCASP1 */
3 F" E+ N, A) h5 |3 _, S mcasp = &MCASP_MODULE_1;
- D+ u- b$ |0 ` z: O6 \, ~ mcasp->regs->GBLCTL = 0; // Reset5 E& q! ?$ ^: l' j1 |: a0 A( R
mcasp->regs->RGBLCTL = 0; // Reset RX9 ]0 ]+ E- d( Y" s
mcasp->regs->XGBLCTL = 0; // Reset TX: U0 M# R+ N+ v! }+ N
mcasp->regs->PWRDEMU = 1; // Free-running; M2 o( p1 O2 g, R9 b: l0 [& X
// configure McASP0 receive registers
' M6 ^7 ~* _& L" f- R9 O; ~1 F6 @ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; ?6 x! k0 X4 q3 |; G! Z( O
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 |7 @ \, E7 M+ Q mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ n0 N5 N$ P! O( i mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, ^: C( j4 h$ E) x5 g, S' ~5 a* H mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) n& [! P$ G6 n' o; V; J4 S8 k" V
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 J5 K+ K# Q2 ~, X4 @4 }5 K mcasp->regs->RINTCTL = 0x00000000; // Not used/ v6 H- {" |# U2 m5 q7 o n! L
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' }3 j2 l/ X, y
9 w: f* b# [0 O, Q mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* z4 c1 S4 |9 i0 L5 l mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 p& l. H/ l0 o$ A5 q2 ^6 u4 l& O: V
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' u2 J+ I4 h% N8 \; ?; }2 D9 r) e2 G/ r
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: O1 z/ D" c* _7 g F# O$ p
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ C) P; I8 v3 L @6 N6 Z3 r mcasp->regs->XTDM = 0x00000003; // Slots 0,13 H9 `$ {- _% U; v1 d- _
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
n. r3 g; [1 N$ {% Z1 F D0 M: {% s mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* ~ W# b) Z: U
6 X. _) B' p/ C7 l7 ]
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" [1 q% V7 x6 p$ t0 L mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; P4 t2 B+ T' v5 m, E9 d mcasp->regs->PFUNC = 0; // All MCASPs
# b& V3 A$ w% R, s5 x' T mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 j4 _( }6 T) B p
0 \- u8 [4 w" @7 |4 N% W3 l mcasp->regs->DITCTL = 0x00000000; // Not used3 s8 A& y2 G* D/ U, B9 k
mcasp->regs->DLBCTL = 0x00000000; // Not used
" b) a' `( w5 R5 p5 @- Q& f" s# ~ mcasp->regs->AMUTE = 0x00000000; // Not used* r6 Z# Z$ W7 j9 ?% l
; ?8 r# X0 U2 W+ t5 S
/* Starting sections of the McASP*/
$ T5 E9 [# Q7 C. ~$ z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 A) Q! N' {4 u3 b* Q; c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; M8 b# m" [$ d$ Y5 T
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 Y# J1 ]1 ]" K, k+ @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 g1 J! v1 S1 L( Z8 a' l
, @$ e3 [3 a2 i$ u mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. \# b2 Q. a! n g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 o: e3 V% l* G+ G& Z) v: c: q* R
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 P" U# F- u6 D+ E: S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ v: f3 X+ _9 z7 H
c2 `/ A/ Y6 T% }; E- A& l, B; x
mcasp->regs->XSTAT = 0x0000ffff;
( O! h" a8 c. h a" R mcasp->regs->RSTAT = 0x0000ffff; ! ]5 h& [) b& S1 @5 X H4 h
7 x7 B* Z, S) B% y* P mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& m r. |; h; w2 e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) E4 [) O4 }+ t/ \* l) t mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; I9 B" D0 \0 d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. k% t. ~. l w: V+ I
5 k7 v: ~0 l$ G" G4 [ /* Write a 0, so that no underrun occurs after releasing the state machine */5 P7 I. m0 C E# D2 c
mcasp->regs->XBUF5 = 0;
9 v3 I* |3 U* G mcasp->regs->RBUF0 = 0;$ {. E/ f* A7 C
$ L- n( T0 i+ O5 c( P9 _ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% m9 m' F$ k' r4 Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% x$ B0 C$ v, C: }
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
Q: ~$ [5 g: a( r7 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# }& B6 B8 e; ? ?. k
D6 N# p0 B, i1 j8 Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 Y6 ~! w: l- R3 }5 U5 S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 O8 i7 m; u9 R6 r4 M0 P k' y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" c6 h- j* S0 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 M- d# a# u0 Q2 M0 D. s+ n$ G% g' O4 I" e/ W( A
CSR = 0x0000;
/ ^9 q, N9 |1 I INTC_INTMUX1 = 0x3d;! ?! t+ r; c7 q
ISTP = (unsigned int)vectors;
9 B7 C, S9 G7 [0 ?7 D ICR = 0xFFF0; s/ `% P) [5 g) L& Z$ f% q! d: M @. S
IER |= 0x12; . v% l! d5 ^6 J" ^9 F% c* V. B
CSR |= 0x01; ; ^. e1 t: G! H" Y" _ ~
, h" r g: j: P, }/ f. i6 r
% @ J5 f( I- B2 c7 P
. D4 L% u0 L. T5 O还有就是两个输入输出函数:; ^+ b" b, V+ G3 M' J; A
void output_sample(Int32 out_data)
/ B4 k% f- P. C2 ^{3 G$ Z0 a% V C1 P+ n) N2 t: ^
AIC31_data.uint = out_data; 6 ~2 i% t% l6 D1 ]7 f% e+ K
MCASP1_XBUF5_32BIT = AIC31_data.uint;& H, R2 R" b9 f e
}1 [, c7 f: U: ?3 |6 R" w
- v2 s5 y( H& J* x& \3 e1 X
Int32 input_sample(void)
: c, w, A; F1 }, n! E2 k{ 3 D# a7 `' o8 e8 ~ L: X
AIC31_data.uint = MCASP1_RBUF0_32BIT;: T; Q9 i/ n# q. b4 i$ X/ ~
return (AIC31_data.uint);7 ^; G# D* Z1 A$ W
}
1 l3 u: \: l: q1 m. N4 S1 D) h" b0 ~ i# l/ l' H
|
|