|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ `, u" v* F7 g! hmain文件:% P; x6 {, u6 z7 Y3 y6 ]
interrupt void interrupt4(void) 1 ?0 Z1 N: I$ o; [
{
1 u: L6 K8 |6 I* J0 O8 q Uint32 sample;4 o( k0 M' @ ~& v" W* p2 g
. o. p6 b* Q' ? o
sample = input_sample(); // read L + R samples from ADC
3 Z) z/ H7 D+ F, d, } output_sample(sample); // write L + R samples to DAC 2 L- R7 q$ e( R& n! i4 z, c, u/ D
return;
/ R) p- K% @+ w; }3 {}! O3 Q3 z; ?/ f/ m% \; m
( q- x9 p/ E8 }" ~
int main( void )
. o# I" r! |# u X: L{7 R: h4 G2 I/ Q& h5 ^. N
/ D8 m E/ Q: m: x* Y7 b% c- q
/* Initialize BSL */
Q( w/ O y( u, o# A/ ` EVMC6747_init( );- J9 r9 a' L8 e2 Y9 m2 F) B4 F7 |
/* Call evmc6747_intr function */4 i' y* b3 @9 s0 e; g
aic3106_init( );
/ Z+ z- A% q; B; Y, x% `# e3 ] while(1);
% c9 q1 |6 X- V}
% ?3 \: \* k$ G$ \6 r- l# u+ `# n' G' _$ x
8 T/ c" x; I6 z/ Y8 Y- {! C6 C5 Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' C9 n$ F5 D" d9 e- r
/* Initialize MCASP1 */0 \+ |- \" }/ _* x) g& Y9 R9 j) d3 p% Q8 b
mcasp = &MCASP_MODULE_1;* c1 V2 M7 J) `1 v5 _& d! ^7 ?/ m
mcasp->regs->GBLCTL = 0; // Reset
: w* q! d% E2 M8 g% K& L& w mcasp->regs->RGBLCTL = 0; // Reset RX t7 n* \6 [3 G2 ~; v
mcasp->regs->XGBLCTL = 0; // Reset TX
) `) [ U b$ J) O# L- d7 V! y mcasp->regs->PWRDEMU = 1; // Free-running
& i4 ^" l/ G, s4 a9 J- X0 t // configure McASP0 receive registers1 k* g5 r' {1 e& D, I, ^
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' |+ z6 u% r [ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ {4 T; v2 u D* o4 B1 d! F
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ V8 d# ~0 I; n; Z9 u0 g! M3 R mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% K# e2 ?% H: [ G: ~$ n0 I mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* Y+ H4 m: X. ]# y& c( a9 m$ G
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 |5 M4 B* c, D0 F% |; H8 h mcasp->regs->RINTCTL = 0x00000000; // Not used
2 T& F0 F$ g- @% ~7 N0 _ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) i" r" @! S$ _' j
: R9 L: H2 E+ J/ Q, k/ D ~7 a. e
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& r# ]5 v$ O/ }6 o- O6 r mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 r B0 ] M( a3 P" A+ { E mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 ^3 s& Z/ j% b7 _) ]. I. V
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 G; d* D2 y; T" j# O* y, D
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK% D" `) G: `% l* Z$ ^1 g8 d/ u4 m
mcasp->regs->XTDM = 0x00000003; // Slots 0,1& ~* _" P4 A- N0 j
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. X8 M& ^1 A& c3 m4 u
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" ]4 G& P( j H0 I2 Z# [' t
6 V2 P1 J& r f0 e' ]& n: ?
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# v2 D/ \& p" T0 V6 i) J
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT$ W' {- f! l8 J
mcasp->regs->PFUNC = 0; // All MCASPs0 M! x2 C2 w3 j2 S P% b5 P
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' N+ T* I, g9 V
( w9 o3 N0 i+ B6 [9 h6 b
mcasp->regs->DITCTL = 0x00000000; // Not used
6 H7 b6 I1 w; Y9 J8 G! \; v( M mcasp->regs->DLBCTL = 0x00000000; // Not used2 \, h4 o3 M: k$ t% N
mcasp->regs->AMUTE = 0x00000000; // Not used& j: n3 F3 V; _$ h4 f" f
2 v" B+ H7 o7 F- @5 F4 y/* Starting sections of the McASP*/
3 [; ^& V* G- I* m- p/ g- h mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % ]) F, L) X5 R4 d, R! l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % M2 R' I7 j/ J9 B
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 X" M. E+ R: K) F& v# F& j$ m+ \/ G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 p9 {6 Q8 }1 H. ]; p
% o( j' v6 e0 f9 [2 M
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & ?' l! J5 m) s' Y& }: r2 \+ c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 W/ `' T5 Q5 y mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, M5 `0 n( N4 V, w$ b. E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 `* W7 u$ K% Z0 b
4 D7 w" T5 c0 ] mcasp->regs->XSTAT = 0x0000ffff; # `8 j' R% e+ v
mcasp->regs->RSTAT = 0x0000ffff;
+ S3 Z) j: G/ d S3 ?
' H6 c& d- A3 ]. u6 z8 h6 V6 a mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, j0 Z# ^4 f" r4 G7 ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 A0 X( l& ~" `" Y E# [ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 E# s* b6 z) J& u* {2 [8 g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 Y \8 z W J7 s3 B2 R# i. ~+ G1 V8 w# \6 a
/* Write a 0, so that no underrun occurs after releasing the state machine */6 s7 k7 b+ c! M( P' c
mcasp->regs->XBUF5 = 0;( v' z6 _5 i# M; L7 m, D
mcasp->regs->RBUF0 = 0;
/ l L( L& j. J! ^4 Q8 E+ c# p- s, z: `# L v
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ ^/ j$ K3 I9 A7 } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 H6 M* d; V! v# L
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 S. h% L. V# O; |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 A) v* r9 F- b5 M
a a6 N3 ?9 }
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 Q: E& I# h$ C) R3 L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ e% r; B- D5 m7 C X. h mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 N& G3 V; P) V( \5 n1 N3 o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 n; a3 L: n1 S
; M% a' X9 y7 X, N
CSR = 0x0000;9 ~5 Z' r3 K( Q0 m. j6 r) I
INTC_INTMUX1 = 0x3d;" k3 I$ H8 n( n
ISTP = (unsigned int)vectors;" f5 C/ \3 b; G
ICR = 0xFFF0; # P8 K4 r h1 w% g# \9 n4 ?2 c6 z
IER |= 0x12; % ~; A6 |( X5 @5 Y- ~. Q
CSR |= 0x01; , X* y: Y- R3 ^! i7 L$ @6 b' _+ d
# j6 T( t) D' J- R& R' T* O& C V
# I) D* p2 S: g {. F# G
* i. ~. Z& I" v6 o9 ? i还有就是两个输入输出函数:2 p5 a0 W. C9 T- p2 N' {
void output_sample(Int32 out_data). b0 L( T, ?( s& Y. V/ x" B3 V
{: }- q% ^. H$ F
AIC31_data.uint = out_data;
: P J) |3 r- f; A- @/ m MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 p" t6 R) H) a, W% a& v}& h' i% z0 w1 N3 k. Z% \
8 j2 W; m$ N u1 zInt32 input_sample(void)1 X. V+ s2 Y! z) Q7 T
{
( N9 G1 J3 h! f; r AIC31_data.uint = MCASP1_RBUF0_32BIT;
, m7 W4 [* V1 u/ y return (AIC31_data.uint);
, m2 {* x! @& v. M* e. n" u# J}
8 B! d# _; v& t+ c4 q! S' }; [0 C! a! v$ \7 f& u, ?% y |4 p6 `
|
|