|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& Q6 Y2 i+ [, j& k) J) Amain文件:
1 D/ T+ l2 k7 b5 F" D8 F; @0 |interrupt void interrupt4(void)
1 s3 G/ M( i0 x- W4 Q' s# p{
( O# B* T, |' D" I; E+ s Uint32 sample;
+ m: [) w9 f" `" n$ v( y
6 v7 L! x. i$ Q. }% |& Y* q sample = input_sample(); // read L + R samples from ADC$ Y" `& h U! p6 Y
output_sample(sample); // write L + R samples to DAC
8 |% {% V9 A G$ m& D return;$ m3 F/ d7 a8 n5 X7 e+ [
}4 _0 m; |* ^3 G6 m
* t. D6 g$ Y/ m% |: Lint main( void )8 H( Q. A. w9 ?+ V3 B" C
{1 A; k7 x. a1 h) D$ y) {
7 R/ }$ N: G' m
/* Initialize BSL */
( { T8 G8 S$ c( o% v( J EVMC6747_init( );
) J+ u* Z. ]" E# W0 S: w% F3 r /* Call evmc6747_intr function */
" N5 L X4 m$ ^9 p aic3106_init( );1 U9 r3 A1 l* p
while(1);
" t/ i; f: ?% D" A1 H}
4 H* l9 Z' ^+ _- r3 A( }( r# u
$ C! a, Y% `( J( B7 o8 T9 q8 u, u1 k: N# u& J9 O4 G' P5 S, V( Y6 H9 S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ r9 f) D B3 T
/* Initialize MCASP1 */( Y! Q( ^* h* ]2 Z3 t! c3 Y
mcasp = &MCASP_MODULE_1;
1 u4 r4 K2 H- ]' y mcasp->regs->GBLCTL = 0; // Reset7 w$ T5 r+ e5 U0 k
mcasp->regs->RGBLCTL = 0; // Reset RX
w( S) H7 Z6 l/ z$ f9 }2 k mcasp->regs->XGBLCTL = 0; // Reset TX4 h8 s# l! O( v8 w4 T0 m U+ K4 k
mcasp->regs->PWRDEMU = 1; // Free-running
/ B7 p" E W, d. V5 X: f: R2 } // configure McASP0 receive registers
/ H5 L x$ \! m1 z9 T( G+ |4 G mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" @& y9 l- {0 D3 d9 r mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# J# ]* v7 z' L7 \0 O, h( o( S mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 l! c1 a9 q% ^ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& i% O+ ?0 A1 Z4 \% ] mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side): D" C6 Z& J7 }2 b3 B- m3 s
mcasp->regs->RTDM = 0x00000003; // Slots 0,1( v* H& r F$ x) l) S1 X0 N: ?
mcasp->regs->RINTCTL = 0x00000000; // Not used$ Q1 K" q2 [7 K0 U' i
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 I2 {1 ^& r* l t
/ ]( F" @- m- I2 k mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ y0 d' |# x5 E8 x9 m2 O& F# B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ m. `" e5 X0 V# j4 P mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 H, V) l" j+ K& L* i( |$ d+ J
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 j3 q& M( ^* ], ?
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; T: S9 a: u% L/ d
mcasp->regs->XTDM = 0x00000003; // Slots 0,1& b% P2 ?2 H! Z# W
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, A- g+ @7 o" t- X mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; ^1 {% U# N. X8 B- }
6 m6 g* {+ ~$ i. m! ? mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN7 f$ R) }& \: |* O# R4 h6 _5 a
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 h: U8 h+ s6 I4 C; V7 K
mcasp->regs->PFUNC = 0; // All MCASPs
. R B2 ?' J3 {5 u mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ w; y) H2 ^7 k+ @
$ I$ x% T3 |& d& _9 K( F0 ~ mcasp->regs->DITCTL = 0x00000000; // Not used
) S- ^0 c/ s3 W5 m( U- I$ r mcasp->regs->DLBCTL = 0x00000000; // Not used2 `; f7 s0 r+ I5 x5 K9 A2 ?
mcasp->regs->AMUTE = 0x00000000; // Not used
4 m' D3 s( b; D
# v& z# u- m5 O0 b& K6 ~" V0 m/* Starting sections of the McASP*/1 u) ?5 [$ C" F8 J2 Z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 n7 k/ O& t% F3 v) x5 D0 N2 j/ x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " n, _+ O0 w3 B+ D
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 n# {7 U* i3 P- ] Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 U( V+ @" O0 f5 M+ A; t+ a1 q$ f. G7 }8 A5 d2 Q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 l# M* B f4 e. D4 a4 Y% I* x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 K0 _9 P0 g+ ~# m. c ]6 H mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, b2 B- u; N3 f" k) h( q; k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ T& N4 j! P: i, }5 ^
* `8 }: J. X7 i! J. E3 ^; v
mcasp->regs->XSTAT = 0x0000ffff; ! G' E2 X2 z! ?; r$ T6 y" t
mcasp->regs->RSTAT = 0x0000ffff; ' j9 r. b% N5 N. g& C2 Z. N
7 t8 ^4 [7 o' d/ z mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" t6 w, I3 G( N9 R# i0 ^+ `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& _7 ?4 Y$ s6 y5 R
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 N$ o3 h- f" G$ h: k/ {" n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% B+ d9 g6 P7 H7 z/ s6 l5 G" b; b- P: q
/* Write a 0, so that no underrun occurs after releasing the state machine */. U- ]* f5 s: M
mcasp->regs->XBUF5 = 0;( _/ C. B, W* x' O
mcasp->regs->RBUF0 = 0;
# d( N$ U0 [- g5 A$ F5 Z6 J
2 v6 ^- m/ v$ {# h7 U3 e mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 t5 b% Y: I7 U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; w, m. K* a) X! _; R! l5 {
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& k! E) i: f6 D, e& N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ?' c2 K, s9 c9 d0 z7 w5 Q! Y4 }$ h
9 ^ [% j1 X2 L& q# }. f8 c mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 \- J/ Z$ s2 G+ W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ v3 i$ T3 _- Q! l mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ m2 h9 `( s) v2 p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ {2 g# G5 z( a# J
) A! H$ o# Y4 L) } CSR = 0x0000; t( |1 W0 ]; S5 f& f/ L
INTC_INTMUX1 = 0x3d;3 N6 m5 _+ M. a: b/ u T- I
ISTP = (unsigned int)vectors;
' y) D- G x4 O1 g. d ICR = 0xFFF0; $ L" I9 G7 U0 F# {9 K
IER |= 0x12; ; A- G- {$ ^) c5 v w0 g# j
CSR |= 0x01; ; K& p/ c& @: K* \0 e" q, i/ G- }" I
0 U0 @9 w1 L0 x- o" X7 P1 S) Y" M6 c
7 \6 n6 C2 W' C4 ~
! K0 x" @. Y# O8 w( u还有就是两个输入输出函数:
+ z4 S; w. P: O, f# A. ovoid output_sample(Int32 out_data)
4 f4 s" l) U6 ]8 Y2 _# Z{
: _7 T- |% \; v5 G AIC31_data.uint = out_data; , K; O& q7 y# a5 z& u0 Q$ B
MCASP1_XBUF5_32BIT = AIC31_data.uint;# b( T, I; ^" l7 B0 W, v
}
' o+ t# G" ?' H' k
8 W, T- a. x7 W8 s$ A0 @! J# ?Int32 input_sample(void)
" |) C( D7 l% C5 B# Z$ `/ P/ l5 m{ 9 L6 K3 b* q: L9 O& e+ o1 C
AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 z7 ?' G+ u7 E( q! ~ return (AIC31_data.uint);+ ~) w4 L3 k# e. _6 y
}* K! p) L4 K8 f) U7 c0 n
4 w) F. I- w) m' y# W/ ^: @( B( w
|
|