|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ F5 l- ]* a+ O# z1 V9 |$ }3 d+ amain文件:( C, U4 E& ` \. e
interrupt void interrupt4(void)
5 C' K$ {3 R. A( { |8 v{
9 N; }( {( H6 E! {9 E Uint32 sample;
8 d9 n" _( u( \) a+ O/ }' o3 r) N) ]' N& J2 k1 N5 z
sample = input_sample(); // read L + R samples from ADC
5 I, p3 j! m) a output_sample(sample); // write L + R samples to DAC . F: d- M) V& @0 s/ L! w
return;& f# I0 |: s( D |7 d2 n0 k; v
}
1 @" ^' }+ V% `( f: T" z8 e& r) k- s/ s% l% @/ q
int main( void )
; a# ?( }3 w* r) o; {{+ v* U1 P8 ]1 H# {9 A
% K" f* e8 Q/ Q5 r* b4 }' y% S /* Initialize BSL */% j! E" A6 S2 S7 `4 S0 i& r- y, Z, z
EVMC6747_init( );
- }3 R" j+ L" @$ O" ~9 y /* Call evmc6747_intr function */2 b2 V# ]- x- o- @4 E" h' t! p
aic3106_init( );
9 s1 I+ d$ g6 J+ \ while(1);% J/ _# e+ i4 [( H* n- ?2 ]
}
5 K- T! A g8 o$ r! C U8 i7 g2 v% h% ^0 Y0 I, Z- f
/ w: C1 }9 ]' h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* v' S" o* X" W1 O5 c& z# S. O" `1 D* q/* Initialize MCASP1 */) N4 r7 e* F- O1 f0 k* z! P
mcasp = &MCASP_MODULE_1;
, @4 Y( S: N; C/ ? mcasp->regs->GBLCTL = 0; // Reset
: X* F; @6 F! V# ]9 k, o mcasp->regs->RGBLCTL = 0; // Reset RX3 f6 O# T h0 a2 {! C+ Q. `7 J* A
mcasp->regs->XGBLCTL = 0; // Reset TX+ a ~$ M& D! E3 l( v
mcasp->regs->PWRDEMU = 1; // Free-running
u. I# O$ v: z3 Y+ ] // configure McASP0 receive registers' Z Q+ S: L ?: P+ S: N5 z
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used+ c& L& u# \0 a
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 b. K. v6 e, U
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 q" g" N3 f- e4 h/ i
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ z% F4 u) h0 i& r; q0 [! Q& n
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* d- K9 U# t3 q; R+ e; F. F4 j
mcasp->regs->RTDM = 0x00000003; // Slots 0,1) Q7 o6 P' x8 O$ f9 c$ `: f
mcasp->regs->RINTCTL = 0x00000000; // Not used: Q: ?9 l P( m8 B
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' T' R+ @5 h/ n V& r$ K
6 i& z" f6 u* E; Q* v, m- e8 V
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; Y! z. X( C! v mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# [5 }! D1 g! M2 Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 K& Y- y% s) G7 M
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: x; o4 b& F" I! i8 G* N* Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK1 A% H6 q! @1 y4 ~
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
l' @7 g% c" [( ^ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
& ?; B/ ~" A6 m* V! d mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 K7 d2 L: J. g* h2 |% B( y2 _2 a, B. _* n9 i1 @
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN7 X( M5 P3 r( q
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* U. _3 z; H3 ?4 ] B( r& y, p mcasp->regs->PFUNC = 0; // All MCASPs
) r% J$ {# c, }+ [" A mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" {2 ^0 q/ [. ]* D
8 U2 L0 a- k, n! E1 j( R mcasp->regs->DITCTL = 0x00000000; // Not used
r# J- m0 G# R% T mcasp->regs->DLBCTL = 0x00000000; // Not used
! p: T$ H: U7 r mcasp->regs->AMUTE = 0x00000000; // Not used( }9 I9 \" d& }% k$ M9 [
: |% [5 G0 v" [, c# A* r- J6 U/* Starting sections of the McASP*/7 U9 {7 o _3 r& w& F4 P- J8 G
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ `3 w8 |1 t2 K; |0 @7 X, X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 a: M6 G3 M; @. L' | mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* I3 c4 r; T# Y7 N' H1 ]$ ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 A- l. K4 t2 D2 j) ?
4 Z) J2 H5 |" F( i0 i0 s mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) t- w6 v6 e; k) l8 j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- G ^: I3 w* Q% l, } mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- \! U: e) H* R0 @# f; n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 x: G' b. A! x. T8 `, R) L0 c* k0 x! C4 h# L5 {; E9 r/ n
mcasp->regs->XSTAT = 0x0000ffff;
2 T: Z6 ^+ [% I9 p/ p mcasp->regs->RSTAT = 0x0000ffff; / u4 r/ C% z }% b/ g
, o. D' N1 c0 p- f
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 f0 i- U0 z! u% h# ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 U* {; }4 H) Y( `5 R* I0 m! z
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 d* ^8 T) o8 ^' P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 ^9 @& W1 L4 g
. ^+ |" ^, _0 Y' ?" t; n- q$ x
/* Write a 0, so that no underrun occurs after releasing the state machine */. g7 ^. E9 V' [8 d) `! \ b" e$ B
mcasp->regs->XBUF5 = 0;
3 V4 M: z# u4 V3 r" v. Y/ l- L mcasp->regs->RBUF0 = 0;: X7 X, c& Q8 u0 f7 A" {
' I) X) Z. u6 S; j# n
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 y* f" g, a7 K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! \0 @" L& z! u0 r, z" G
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + e9 B" c) V) x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ s' q! Y4 k, ?* S* W
9 P6 @# S0 y) ^9 E3 o
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' G' y! s3 ^; x! _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ { ]1 ?0 E* i; D
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- o* {. E/ c2 F& r( R$ |6 z b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% O; d" V9 B+ W- Q0 x! h
% U8 ], Z7 Y0 W8 |. h" J CSR = 0x0000;% n6 [: n! F1 G0 Z$ F
INTC_INTMUX1 = 0x3d;% V' ~1 L) D, b8 Z- p
ISTP = (unsigned int)vectors;1 t/ T# @# A8 L3 T
ICR = 0xFFF0;
9 Y6 q7 M' }) |5 m IER |= 0x12;
0 A. R1 `8 g ]9 a) o& M# r CSR |= 0x01; : C2 k) D6 s4 y9 G
# \! H7 \0 m: @& f* R4 f5 @- n- M/ y q+ s. e, o! R
9 L5 c& ~5 _/ W2 n. K还有就是两个输入输出函数:& o \6 y6 E _0 j! T8 e
void output_sample(Int32 out_data)$ F1 k! n! U, D$ X5 ]
{: `8 r( [! p! U- o" F$ ^/ A& n& k1 O
AIC31_data.uint = out_data; 3 \8 H: c P+ f% N h) @0 k
MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 T9 j5 i0 U, Z}
- X5 Y7 l5 X! g' L3 W1 X; t' J$ U' W0 n
Int32 input_sample(void)6 N; ^4 W( ?/ l4 p/ p4 [
{ ( d5 }; k( x' N b3 P
AIC31_data.uint = MCASP1_RBUF0_32BIT;
: e+ B# i$ \& S m return (AIC31_data.uint);
$ T' J3 d- N* q" i4 o}
! X' m9 ~/ e& B( N6 v# r' U* M
* z. L9 p) y1 t2 m |
|