|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 a3 e7 i, R( n6 f6 n0 H# ^
main文件:: H* t" R+ u7 S' A
interrupt void interrupt4(void)
) L/ d( q4 N6 S% r{
' h) t9 l3 a# O Uint32 sample;7 ^. i: z) |( S
0 A. q/ x1 ] F% D5 [; N3 h sample = input_sample(); // read L + R samples from ADC( R; s7 I) f, N/ O- N
output_sample(sample); // write L + R samples to DAC # [- }# L& M; {& i; B
return;
$ k& G4 H8 \4 ^6 k}
+ `2 k/ P# z! \% C$ B+ f$ l0 }' M5 I9 ~; @! \+ V
int main( void )
+ S* t9 N$ x) M" z: q{& W9 i y9 d3 v
. P) u4 `" n. C* I /* Initialize BSL */2 V6 ^% s- ^. ]' |- A! J
EVMC6747_init( );
) W6 q5 |! C7 T" o$ l /* Call evmc6747_intr function */
; S+ r5 ~: T6 W2 J8 }4 m aic3106_init( );1 a) L$ c E" ]# l) p
while(1);) l( ~# K6 a. Q: l
}
5 _- ~) w% ?: [6 T% A$ a6 Z
. K5 j. X1 e6 } b( D# F
1 d# B4 H/ x0 [3 M- s2 _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 _" ]# Z2 L* T
/* Initialize MCASP1 */
3 ^7 C( r! X: Q7 o/ h( W+ W6 C1 K mcasp = &MCASP_MODULE_1;9 v& L+ @6 c8 Q" s
mcasp->regs->GBLCTL = 0; // Reset9 d s! g6 }; a. E( X$ C+ p: m
mcasp->regs->RGBLCTL = 0; // Reset RX- y' K* j: k2 w2 f: P
mcasp->regs->XGBLCTL = 0; // Reset TX
% w# t6 g. x9 e) X7 l+ k mcasp->regs->PWRDEMU = 1; // Free-running2 p3 ~: G0 B# W
// configure McASP0 receive registers! g) {$ S/ t% B- _5 }# d' v' m
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* E1 b4 Z0 _8 |5 @ e/ K( @ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 s" R2 n' E5 P I1 C5 c mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! r" p: W: P) ]% i& ?
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ V1 M! I4 `7 O& Z( A) L mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
6 H& J$ f8 e1 L% o; v+ d# P; h2 J7 P mcasp->regs->RTDM = 0x00000003; // Slots 0,16 W5 h) k: R, E3 i2 s, v
mcasp->regs->RINTCTL = 0x00000000; // Not used2 H w! P8 l3 J, _
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) }. X/ i+ P" W' i i% r
4 y! d0 Z5 ~9 E9 e mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
" A7 Z7 N4 {) u9 X/ X. I mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% ?5 C8 m6 Y" ?: ~3 \
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! p% l) h; w% E4 n q mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* |" B1 H; d: v5 G( t mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% _9 o% [( v/ j mcasp->regs->XTDM = 0x00000003; // Slots 0,1! C, Y. S2 W+ W) N2 U* G2 @
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ T$ \9 e+ [ n+ G
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 \3 _7 s+ f7 y+ S0 r2 h& ?! z5 b
2 n: }% ?) U% M& Z$ E" ]. Z2 f" y mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 M+ r5 r: h. n1 J9 q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
1 L0 l3 U" U* X mcasp->regs->PFUNC = 0; // All MCASPs9 O0 }& i: D" e# v
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- g1 d" X8 h" s
. d- v$ b4 ^7 L1 s. ^. X7 ? mcasp->regs->DITCTL = 0x00000000; // Not used
1 `( }9 v ~- `+ y5 X4 n9 F( C4 ? mcasp->regs->DLBCTL = 0x00000000; // Not used
& i% |! R* {* k mcasp->regs->AMUTE = 0x00000000; // Not used
, }# A: D( l9 c4 N& y* q
+ Y, U$ m/ r/ b! D/* Starting sections of the McASP*/' W$ P! C) l" z9 q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; I9 M8 ~1 V9 T3 f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 n% G& Y" E; f& U& ]/ d mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 O' H+ c* ~9 z% D2 T, F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' f" Y) ?1 H% e Y) ~
3 z" Q/ r2 j3 x$ f( @$ r7 I mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / ~. ?8 s4 b. u0 T1 j- {: o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 r7 T9 w3 r% k6 r# z( ^ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 e5 C! z: C4 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# E0 Y- V! G6 H, R! O1 l$ X9 p( D$ {* s# a( i
mcasp->regs->XSTAT = 0x0000ffff;
7 s# O2 |9 M$ R! I& e. Z0 C, M: L mcasp->regs->RSTAT = 0x0000ffff; / @: H& V- y4 C# Q9 p2 ?7 Y' x
+ W/ K8 c, I+ j2 J& m
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 b+ n+ @* q: u2 q R! }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, m1 }( `8 {" F0 u. A+ F
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ ]) f8 e& ]1 i1 s4 W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 S/ I: i( s- `/ N
# H* j+ S* K% W /* Write a 0, so that no underrun occurs after releasing the state machine */% \7 T$ ^+ J7 l% R
mcasp->regs->XBUF5 = 0;
7 E* X1 r/ o, { mcasp->regs->RBUF0 = 0;
* ]% Z! J7 S; v6 E1 G
$ o6 g2 S( m% m! n" m9 ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; T" D* }' n! C* S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ x5 R$ |: ^, N% G4 u' ~( {- o mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 H: j5 j- _5 _0 ?) p( q6 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ H/ S, a3 t8 L0 \( M
8 m5 e5 T, }1 w" J# t0 Z4 ] mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# Y# c5 v( m) O+ x; t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% V% ^) q/ q4 K4 U1 m' d
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % w' U3 c3 ]/ x$ l, u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. q( r* D# b; O3 [) T8 Y2 Y3 E* [# ^/ J, {: k' i
CSR = 0x0000;
- c7 P( g( Y# b INTC_INTMUX1 = 0x3d;$ H4 F3 g( e" {7 W- `- W: V
ISTP = (unsigned int)vectors;3 H1 Y: z* k" K2 R' |
ICR = 0xFFF0;
n4 n& M% j% m0 y9 y; ~ IER |= 0x12;
4 F( r% f( `9 d b CSR |= 0x01; : `1 l6 C. j3 d3 U Y( f2 i
6 R5 a3 e6 J! C/ d+ N3 @4 D
" d0 @9 ]( Y* u! E( z6 s3 ^: k5 }& q( U' @- x# P. q2 r/ p
还有就是两个输入输出函数:* F# v- Z6 G! F& `5 P: o
void output_sample(Int32 out_data)
& m9 W# w! e( g" ]{/ S+ p h% K- H6 R& X
AIC31_data.uint = out_data; ' x: f# A3 E; K m8 G0 |9 ]4 k
MCASP1_XBUF5_32BIT = AIC31_data.uint;$ s: l1 [8 y) P1 s
}! ], Q% C; p3 d, c6 ?7 O
8 j! ~* p0 g6 r z2 n3 X
Int32 input_sample(void)7 [1 y6 H1 y& K1 A" X8 l7 v
{ 9 `+ @' k( N' \, g* ]* m( q4 i
AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ F* ^3 q+ v/ Z- k6 d0 m% B return (AIC31_data.uint);
, z. _$ u i! J' b3 f) m}8 J9 |5 U2 y' ~' `: F; ?+ Q
7 `0 G! _) r. Y; d- ?) M
|
|