|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" m7 I8 v+ P) n) ]* ~main文件:
4 X. O7 U( @) |interrupt void interrupt4(void)
3 t h, D5 a; T0 j; r' c1 |{- h4 S8 S. u5 X2 i2 H
Uint32 sample;
% V) }. X. [- B& r9 t6 K4 o5 ]
* W! J* O4 b. a& G9 F) L sample = input_sample(); // read L + R samples from ADC
# H7 G0 W4 n3 P8 C/ l output_sample(sample); // write L + R samples to DAC 6 d1 R& l( S) M8 d
return;* A8 K/ {- v( z6 d$ k# H0 \" \
}6 v" \+ R" ~4 D: S9 g
) `$ B* K) [# y7 c
int main( void )
8 a' x4 i5 q/ D6 ?4 c" R6 v! m{
8 L* e* C" z- I+ c* m1 |& V! K4 k- `# {( l3 a* i6 T
/* Initialize BSL */
P, ?' H& b6 L- Z* c EVMC6747_init( );
# C' U C C! X6 N2 s$ \ /* Call evmc6747_intr function */) d5 G1 [5 j3 Y% o' P
aic3106_init( );+ h/ v5 \: q7 u8 o1 s
while(1);
: P5 t* a5 n, w8 _+ j5 C}+ y) _4 ]4 \2 M6 e
, f0 V6 N& t$ X5 t4 V. ?% C: S
% p" H: m3 C% n8 S+ L' S% w0 }+ U* w: faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 Y* J; J, l) V3 R
/* Initialize MCASP1 */) x7 `" }) q7 t
mcasp = &MCASP_MODULE_1;
2 ~ I- r/ T, x4 j7 }. ~ mcasp->regs->GBLCTL = 0; // Reset% J8 U" p; ?1 W: e
mcasp->regs->RGBLCTL = 0; // Reset RX
- l: c, ?. t1 O [ Q mcasp->regs->XGBLCTL = 0; // Reset TX. t3 B" n) `) c; L3 v5 V& M5 U
mcasp->regs->PWRDEMU = 1; // Free-running
- A1 C& k" B) P9 f3 n // configure McASP0 receive registers
+ J% S# C8 [0 n( l: W mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, @4 A9 n3 t! z4 Z# E$ Y$ g9 A: h
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# i( z. A$ I( |3 X3 O
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 n C4 T+ |! S. a# g4 z
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ a% c: h- `- x; O mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ s) H7 @% A' I% k mcasp->regs->RTDM = 0x00000003; // Slots 0,17 e; \& c4 g. e+ v
mcasp->regs->RINTCTL = 0x00000000; // Not used
" Z! i& P- c* j! B3 O mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- \2 d% L) d5 W2 J4 E. C( ^
" f! N! @" C& J5 X! ^6 ]+ C* ~9 G
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' Z5 K+ ?8 Y% e: Z3 Q mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% }+ D1 }( o }" h mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, q4 F+ v: I& Q0 C( |7 Y" |% x" h
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16 o" O* s: e" M7 N0 I: I
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" E1 C% r# E) m$ o3 ?( v5 K
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 s4 S) x+ u* P5 h0 U mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
8 Y V2 D2 e2 b. Y& o6 J mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 b6 y( l; t& {) C! L2 `; J# x% b; ^( m2 O" g5 U7 E7 [$ f4 p( s
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN2 q5 {7 n) K7 C5 t: n
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 e8 z2 w" S* ~, l
mcasp->regs->PFUNC = 0; // All MCASPs! w1 s! n* q* u0 R. ?& f# l0 s1 [
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' x% y7 E% R; {- p# t1 h7 w) T8 Y
mcasp->regs->DITCTL = 0x00000000; // Not used
6 }+ w8 N2 V/ q W3 q( }2 V) I mcasp->regs->DLBCTL = 0x00000000; // Not used6 R# I5 `9 }; t, v/ g4 o
mcasp->regs->AMUTE = 0x00000000; // Not used+ W& J3 S* V% B% K1 n1 i6 z( ?) @2 ?
# M/ L5 ?0 x8 r3 C+ A/* Starting sections of the McASP*/
2 e: j+ @9 X! N/ f0 K0 v mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) R! t! d/ _: w; d; d- z. W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ( k: D4 H0 U& E' u; L1 I! z; k R
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + f4 D( H; A2 o0 t) B" F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; z: T4 O3 h, T/ I& A
& s, X5 y8 E/ |* Q: e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" T2 j( n, L' ?9 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' e! W5 J3 q# V$ U/ e* o mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 }9 {6 w$ {( j4 H$ ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ G1 Q0 z! l6 t2 [9 E* w6 Z- u# z/ o
$ h3 ^5 z: V* r& @3 t% T, {: ] mcasp->regs->XSTAT = 0x0000ffff; " X: J. j+ ]: D4 K: ^6 Q
mcasp->regs->RSTAT = 0x0000ffff; . u7 P" _' b& s( l0 |
0 ^* `! k5 @. ?
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ t& D( Z; T4 E! Y" }; K. V# [3 s4 u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# k3 E6 C5 e5 g% I+ e- p
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ Y' u2 `8 c7 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& i% e* d& X$ ~
% k% N, `* c& L- o( ?: H' u$ r /* Write a 0, so that no underrun occurs after releasing the state machine */
, z: g; T0 [+ U. X* ?, z mcasp->regs->XBUF5 = 0;
& e2 R4 M I( F* i' H! t mcasp->regs->RBUF0 = 0;- k* Y% K3 ]9 l1 h+ U, r' e
8 ~. t2 _3 d$ Q- f6 a% q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 }2 [' \; }4 a5 o( X* {4 M0 C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) w8 A- `3 m0 i mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # d4 ` {) j. n' i' t: ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( _# W2 L: f n" Y& v5 T
5 |. d1 e, _( p+ l8 e F mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . p4 E, V& W2 W/ g) r) s2 G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- f. a2 x! \; ]# O0 @, g
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! M& ^4 ^5 V6 V" O1 }6 ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# x5 L s* r/ u8 Y" A- [: Z
B! t) ~0 u) f$ r0 \$ | CSR = 0x0000;$ D! B6 d, H$ z5 J) J; }
INTC_INTMUX1 = 0x3d;* F9 @ U3 x0 @ Y
ISTP = (unsigned int)vectors;
; @' d. A; C8 a! l+ H. T% [ ICR = 0xFFF0;
; e2 b* L3 v. \- Q+ _$ h IER |= 0x12;
( m- f" C( @" E4 C CSR |= 0x01;
' a2 P: r- n& f9 a I( o$ a+ v2 Y/ m- F( i
% e1 D: X0 j9 M7 q, e" _
. Y- Y) K6 R+ W/ J8 r$ m3 Y+ ]0 B还有就是两个输入输出函数: \, m. M* }! a, `
void output_sample(Int32 out_data), O" T( R1 @/ f& l, Z9 K0 x% w. C
{
% [0 W" W- F1 r AIC31_data.uint = out_data; " U! j' K- z" `. d
MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 i9 U; q6 s" D2 E}
9 |8 S# v& B/ Q6 F! e+ m* X g- Q& T
Int32 input_sample(void)
& r& m( R" k" u{ b" n- o3 ]6 O# [7 I
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. e& c# G( j. T- k return (AIC31_data.uint);- E) \ D6 d1 U9 O* d/ v2 D
}" z% @7 {* d% `9 {0 I+ P' ^
( w* V' t; h9 d7 W. s" p5 h
|
|