|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 T7 A0 q: m* Pmain文件:# U! E y( u& b1 H
interrupt void interrupt4(void) - @/ O- X2 V, O( K0 `
{' ~! l' X0 O/ Y
Uint32 sample;& J9 y$ I4 X. B
5 A" i3 {; q5 U& F" t* }: ?0 l
sample = input_sample(); // read L + R samples from ADC! T( v! x1 ^( i3 M/ ]* Y
output_sample(sample); // write L + R samples to DAC % {) V7 V; g# O- z _$ L: } o% T
return;4 n0 W3 B- n2 l, G7 g
}! A5 `9 Y n' R
4 w9 s7 j! G: l: pint main( void )5 w" o6 F" v# I, t- v0 I8 v4 p
{
& k8 t/ p% Q& `0 u- J L& s6 \: d6 }; D8 h0 j
/* Initialize BSL */
( S+ a3 O5 L% q' S EVMC6747_init( );: i, v1 E; j" f4 V
/* Call evmc6747_intr function */
: M# W2 m+ E, n aic3106_init( );
$ s3 D' V n c% ? while(1);
$ g) y! c9 ]$ w6 l8 [$ _& E' V" N}
m6 H8 j3 h* h& C
- o9 h; n1 ^! K/ n0 i# D: ?
# w6 [. i3 q/ q& t% eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 I4 S6 t0 p. p9 C/ x/ }/* Initialize MCASP1 */2 L7 p3 G; O0 b5 i
mcasp = &MCASP_MODULE_1;) o# t" k+ x# x( e! v) z8 S1 h& F4 ]. j
mcasp->regs->GBLCTL = 0; // Reset
3 T/ r4 P) Z9 m; T mcasp->regs->RGBLCTL = 0; // Reset RX
1 F, `4 A9 A' l3 r$ j' F0 {* \' K mcasp->regs->XGBLCTL = 0; // Reset TX
' i u! o+ H4 f7 K: [+ I mcasp->regs->PWRDEMU = 1; // Free-running
' a2 a. T: [9 ~* M: ~$ u // configure McASP0 receive registers! D6 v8 ]& A2 ?
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, N1 f! X( X/ m5 z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% g3 K1 }* N% r; Z9 b7 w1 [" G mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- K) z1 s* E8 B
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% h4 W Q/ T4 R4 q5 ?, ?) R5 p mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 u! q3 t6 r8 y2 ` M
mcasp->regs->RTDM = 0x00000003; // Slots 0,1) P+ S, J+ R* d" J
mcasp->regs->RINTCTL = 0x00000000; // Not used
. |: @. n2 C( o1 J# m+ h mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 G1 T' v% {; B% t5 D4 f( f7 L5 |8 w; y3 Q. t
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 x9 a5 _6 `+ X7 t, H+ | mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 y% _% M# [$ D mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 F! |" V. @; }% Q. I! N mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# p V- k# Z8 b( r: {& P mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 A0 J/ @ O# j# x
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
: E! U% P" H9 A8 | mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) \, s( _- Q3 @ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) @+ y: R0 n) Q8 _ _. M' x, r) }- v2 h; t) F- ]' R
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
) M( L( Q8 e, s V mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
^7 U! w# K$ }2 e# k mcasp->regs->PFUNC = 0; // All MCASPs
- Z" Q/ ~( z8 B! U7 Y U4 t$ q mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" J, b# y, H3 r2 d- K1 z4 E8 z! Y/ P" O9 B! ^# U5 Z
mcasp->regs->DITCTL = 0x00000000; // Not used
7 f. o5 i- o5 W( }6 x7 D& h mcasp->regs->DLBCTL = 0x00000000; // Not used# W% A/ C% v% U0 N3 i: H
mcasp->regs->AMUTE = 0x00000000; // Not used
$ E8 [3 ?5 t! Y O' d+ O1 b4 \" }7 g' r* {
/* Starting sections of the McASP*// x3 x$ `7 O! \! C) @
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & K) o+ ]' y9 i7 i3 Q: X0 G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 C% F& \* |5 n$ J mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, M% ]' [' P& ]4 y- | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
{4 t2 k6 |2 Q8 d
9 K9 _4 s. x2 K, {+ B mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) G4 W7 k, Y I8 x. Z n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& f' a. Z1 u6 P5 Y" f mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 s9 A+ O6 e! S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 A! }- [( ?& I; `
. Q. {1 B7 H- J4 o% e- K& a8 E mcasp->regs->XSTAT = 0x0000ffff;
' L/ ^9 W+ s& |+ X9 | mcasp->regs->RSTAT = 0x0000ffff;
7 V( ?+ g [. O! T2 _( k% K O+ a8 i- m0 P, } @. u
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: @. H, g8 J% n3 {# Z) {. Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) f2 r0 r; ^8 i7 T! }. ~' i9 }4 ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; p0 l) V2 S u2 U! S a4 U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 B7 P r1 y# g" p+ x
) `1 f: X" l2 r
/* Write a 0, so that no underrun occurs after releasing the state machine */" G7 u4 s2 A3 }* j' W
mcasp->regs->XBUF5 = 0;
9 [: L& D h+ X, j& k mcasp->regs->RBUF0 = 0;6 D- U s: f- z; y1 j( r. { y/ p
5 N; z2 i D1 {2 g- X4 K6 k
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ _' j, l6 m4 ~, ?; n! G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 S& q: f$ K7 N: }5 X8 _
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - m3 J& U0 F2 x/ g; O( ^0 o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 o' f- d4 p9 u6 i @1 k6 c
4 K, ~% k5 P! c! k! f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ v% v) Y* `' Q: L3 [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ [. r) g5 U3 d! O" _: j6 z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 n. s( F- g& Z! @* f' N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 t! Z' s1 w8 O1 ~% H* q5 ]
* S' o3 m2 t/ \# W CSR = 0x0000;
9 i7 V F& g1 c, q INTC_INTMUX1 = 0x3d;" w% S& u" F! u9 V+ A
ISTP = (unsigned int)vectors;
# B8 u# O0 d$ j( u* \ ICR = 0xFFF0; H) u( x* K( f$ L& M g* N
IER |= 0x12; . H' x+ t9 Y7 I: v* C0 `
CSR |= 0x01; }. _& y' I c
% _" | E3 G# D
2 `% b( P# j8 L4 i& k! @) Q* U) I9 D0 \5 r: D( e8 k
还有就是两个输入输出函数:
8 g7 N: r% x- {4 F, J Y9 e9 B/ zvoid output_sample(Int32 out_data)4 Q% V, }: h* u7 M! x7 r
{
5 x+ p) `$ N. m0 M( v, s4 m AIC31_data.uint = out_data;
$ D, X! {0 ^2 `' S MCASP1_XBUF5_32BIT = AIC31_data.uint;1 ]$ o/ ^+ z C5 u) H( m' ?- z9 J" T/ P
}, t) _5 _4 C, d0 Y
' p$ l7 ` O0 O1 p4 j. E# C) Z# M
Int32 input_sample(void)
: z7 f' ?- i( w8 ], E3 ?{
. P* n% Q# E! I2 Q AIC31_data.uint = MCASP1_RBUF0_32BIT;
' k5 ~1 l; b, C( }. n6 N9 {' W return (AIC31_data.uint);
8 g) B2 M \9 o: M4 N2 b/ ~- b}
9 l5 _3 d8 X4 e+ w; p' h# O0 V0 |7 u% ^9 i
|
|