|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 G5 s( \( ?% t4 h+ nmain文件:" V& h; |8 |5 s0 k3 I; U+ @) {+ f
interrupt void interrupt4(void)
3 c1 `5 K0 C) k{0 l9 O5 P* Z, D$ I% ^/ L5 k$ C7 [
Uint32 sample;
1 N( A! b7 Y. ~" r) Q! D
. a# q; v- J6 w7 u4 P! X( o1 f sample = input_sample(); // read L + R samples from ADC& A1 m, F" k7 T7 a3 J5 q; K# n! ^
output_sample(sample); // write L + R samples to DAC
7 j6 Z" _/ ^8 i& A/ m return;
: A4 n4 f$ B' w( i}
: `$ @$ G1 e( H- W& \) B- F
" t# `0 o7 o* u+ h# y& [- ]int main( void )
2 j8 u$ @! u. K- {% t2 x7 h{0 n' R2 N9 o4 \/ O$ B+ r
/ S' V9 M: ~# F5 K9 h1 m# h/ Y% |
/* Initialize BSL *// p X8 m; f) u& U {* O
EVMC6747_init( );
! C0 }' C }4 ^2 A& c C# n- G$ L7 c /* Call evmc6747_intr function */$ D& C U* f* s, l& I& ^3 {
aic3106_init( );
# v, K7 z8 L: _ while(1);
7 ~5 N- F" D0 R. U8 y3 l% a+ r}
2 {; R+ ^' f! q6 ]( N( T7 f# z8 Y8 @- u; m( k6 c6 s& b
- D$ @3 y9 r( V5 T6 |7 {5 m
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ g" @: h: W1 s R0 x
/* Initialize MCASP1 */ ], p* F5 p" N/ a
mcasp = &MCASP_MODULE_1;
4 D! ~, D& m1 | mcasp->regs->GBLCTL = 0; // Reset0 U6 V; a! M+ i r
mcasp->regs->RGBLCTL = 0; // Reset RX! A7 N- I2 M! Q: {
mcasp->regs->XGBLCTL = 0; // Reset TX7 h$ m( g# q" B5 e) t
mcasp->regs->PWRDEMU = 1; // Free-running. c+ }& i( g+ n5 D2 a3 z
// configure McASP0 receive registers
/ q- V$ ^& z; z: O; o w mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 ?! i3 U9 i! v. c2 S# x
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 S6 J8 x1 {- \+ T& Z
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 j9 ^0 A) W9 Y& n3 s9 H mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. ~4 s! _1 a! e1 } mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 L+ ]: N7 Y9 q5 O mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 r& B7 R3 M* j8 n" y mcasp->regs->RINTCTL = 0x00000000; // Not used& u; k$ x+ O8 ?* q3 z
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% @4 H7 h- x8 u- q+ Y. q
, g8 L: u M$ M e4 `
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) k7 E% @4 c1 ^! a& r; u mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 H) k O% e0 T+ g8 d& a mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, C! T0 ?+ v) f: {& S6 }3 q% g mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& G2 a- C- F6 G6 f9 v% ? mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ F! R" h7 K* T2 \. _( K mcasp->regs->XTDM = 0x00000003; // Slots 0,1# {- F1 F2 | j
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
. z! y M# U% L mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! \, h/ H# w9 u
8 r& o- a3 `8 d! t5 U! k mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 K' Y# \' O! v" H M3 p& u6 y: U mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 E( z! H4 `1 O! l3 Z& ^( _
mcasp->regs->PFUNC = 0; // All MCASPs( {% t/ A. r. e9 G" h* f' B& h% Y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* r! k4 C/ A Q8 m T* i, R
0 i& R9 c' U7 m( F5 y7 D mcasp->regs->DITCTL = 0x00000000; // Not used
. M( A5 F. b. A$ c, U2 ^: H mcasp->regs->DLBCTL = 0x00000000; // Not used
; o9 p) Y; r1 R! c4 R- M mcasp->regs->AMUTE = 0x00000000; // Not used% @- x2 W V3 F. P
4 j' w0 p& `) U8 [. r: E/* Starting sections of the McASP*/
! a/ b* g+ H/ T1 U; E0 c mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ q G! H. L5 G2 M3 @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ( \1 p! d9 J) @& Y& H* j
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: @ a: b* ?6 P, i4 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 e) S1 {/ [' p, y% x; \$ ~# o( T
9 E2 Y% t6 W$ E( ?$ l4 u mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) |/ d2 M( J9 K# ^) Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( w& i2 y& h. _1 Q+ o2 f& j; O/ g2 ? @2 P
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, @$ A. d, E- Q* M0 o; D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% N5 I$ }0 O" d6 d8 f
* b6 ]" m3 _; X' j& b; m. @
mcasp->regs->XSTAT = 0x0000ffff;
( r+ ~. K0 F5 J mcasp->regs->RSTAT = 0x0000ffff;
; x6 h) g) _) q% f) C) P; `) _8 q: W' D8 j
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, T, q- C" t, h5 Y5 ~$ u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ d7 X, l: z' }2 T# J
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& I& Y& S3 G. z$ M/ q5 Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ i3 }. S* r' ~" R1 _) w0 v6 D- o
) M, v4 r. y' p& x1 z /* Write a 0, so that no underrun occurs after releasing the state machine */8 o( B9 E& }2 n( i0 W, S
mcasp->regs->XBUF5 = 0;2 P ~0 Q' Y! H8 H
mcasp->regs->RBUF0 = 0;
0 Z1 N6 J8 ?& Q- I6 X, ~
1 w1 z+ o3 q+ n6 ^6 l mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # z" W( Y( m) V2 p8 H2 w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 A* P7 k" l7 |+ @ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # g! |$ k7 u N; l/ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, d/ p; Q) F' ?- l! b. }
* a( P& p- k; Z3 b K" f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 Q9 |- S2 V0 K4 \$ Z+ u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. q) f. |$ I2 L: E: e mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 N( w; D; g. W+ l+ g" [/ E8 m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 |6 [/ Z [1 r
8 @$ y: J+ }% b' f: @
CSR = 0x0000;8 @- x& z& V+ g1 y; s
INTC_INTMUX1 = 0x3d;1 Y+ Z! t4 b% C, N) C
ISTP = (unsigned int)vectors;3 |( S/ }: ^4 t' ]" M* f
ICR = 0xFFF0; n! o' R/ t/ S/ g2 r! S6 S ~( s
IER |= 0x12; ! E$ K' t+ y+ c5 u1 ]6 o
CSR |= 0x01; 6 t$ N/ A5 E+ Q w. x! Q
# S& p3 y8 F# Q6 u7 T! o
7 u- Q8 Q! u5 c* S. M- T2 I! P# O% z
还有就是两个输入输出函数:9 a4 R5 @' D! k" w% u6 q" _1 t
void output_sample(Int32 out_data)2 ?- r2 ]9 R% Q
{
4 q% o4 D" }! _* @5 V7 u$ u AIC31_data.uint = out_data; ; T0 ?$ m: F. x
MCASP1_XBUF5_32BIT = AIC31_data.uint;/ W+ l% Q7 A+ s5 ~0 L
}+ y: Z" C6 I7 A
& g% a- K1 ~" o" l9 LInt32 input_sample(void)$ E3 \. G# J5 n" t( z# e$ q4 Y
{ 3 B6 K. p r S) N
AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 {. `5 R M+ y. D y; x y return (AIC31_data.uint);$ J6 N- _ w% i$ g# r- e% g, A- x" |9 G
}. M5 l+ ] I# u$ L5 B ^7 ]% y" @' f
% M/ p/ U. p2 W7 u& B. d: S z |
|