|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ m. @8 w. Z0 x5 w; Dmain文件:
7 M E0 z* [5 ]" v* f) @$ E2 D- ~interrupt void interrupt4(void)
$ T6 L# B8 Y( i{
2 N8 y$ ~5 Y: g; ~; L# i, R" A) | Uint32 sample;* O: M/ {+ q- u& `) V7 {# N! {. X5 R
3 F. _, w) Y9 O2 M% w' {
sample = input_sample(); // read L + R samples from ADC
! y% a3 s9 `6 ~1 K output_sample(sample); // write L + R samples to DAC
6 \7 v/ X: `! [' M& E" U7 }* C return;1 U* [( U% J' R- I2 T0 \, P4 k
}
9 B7 B8 N# I( B" U" A2 q0 @" F& C3 r
4 \+ _: N1 S' F1 t2 fint main( void )
2 `' t) n0 w! B& P7 g8 @3 s; Y{4 J+ D- [: K1 @7 m$ ~
# ~2 E6 L6 V; v7 \0 z( s. ` /* Initialize BSL */
! b* r( y9 n' V7 ?6 p* F O EVMC6747_init( );
; B3 R2 I# f7 k! H* e/ d {/ K /* Call evmc6747_intr function */$ S. O1 [# @" |; a2 I
aic3106_init( );) @" z% W1 I- T* @1 \
while(1);
) t* {& I' c4 O( V2 q: Z5 J}1 k2 E' K4 z1 D8 Q( @* s- j
& p* }8 [0 c) \6 ^' U& H& u' @* C; d5 y* T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: x8 l' r0 D3 f! Q* J( E
/* Initialize MCASP1 */
' P; k, c E& Q0 ^ mcasp = &MCASP_MODULE_1;
3 s* @: ^5 R5 u mcasp->regs->GBLCTL = 0; // Reset
2 J S! R3 O2 y2 {* V" C! M1 c mcasp->regs->RGBLCTL = 0; // Reset RX
6 L+ g" a4 `& @, m# N mcasp->regs->XGBLCTL = 0; // Reset TX
# U/ n9 }# E1 r! I, _ mcasp->regs->PWRDEMU = 1; // Free-running
- X) X# A: M! p+ g( P // configure McASP0 receive registers' T& w& r) l3 T+ Q* J5 a4 k
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, ^2 o& w5 v, }. i5 i# K mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 ]8 J+ Q, c( d, o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word( ? Y! `. j: M4 ]% m# M& l5 L
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; G( V' C- D9 i6 A mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& s/ S/ H. m: v$ L, \- D, }
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
E, j8 X- ~0 H1 c mcasp->regs->RINTCTL = 0x00000000; // Not used' I$ g1 x# r) p) Y) J/ }6 N4 m8 v
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 Y9 D9 Y& D# S" g; S
: l/ g6 l F) P7 ` mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
! h0 J6 ^8 i' N7 J mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 d* O: |# ^. |, L
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 j7 A7 W& D/ n2 H7 r
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) S9 C* \7 f8 q" t
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: Y) o, r9 @6 R0 E+ y mcasp->regs->XTDM = 0x00000003; // Slots 0,1( ]4 i/ I0 S2 ?7 G" n$ t
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit- M6 T( C' W* z$ k G e
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. v3 D% o% x# c9 A3 D9 k! r0 b! l
3 `1 U4 _0 @& X8 ?) D! l, f mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: G, _/ k( K) x8 J$ F/ t mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT+ x; @! M% ^ s d7 n+ p4 x% ] d
mcasp->regs->PFUNC = 0; // All MCASPs( `* v; a' r! Y: t6 r4 d
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" }- [7 \( y; z6 `/ R: ^$ I' `% L6 u! G' ?7 _2 n+ G
mcasp->regs->DITCTL = 0x00000000; // Not used0 {' }1 ?; {- ^( j% S7 X
mcasp->regs->DLBCTL = 0x00000000; // Not used
- {3 [3 S: L. D% }' K mcasp->regs->AMUTE = 0x00000000; // Not used* m: w$ `# z; A3 h
$ v; X4 A0 r. U- Y. S
/* Starting sections of the McASP*/2 z% c- F: x2 q2 t
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 L+ v8 T2 i: F- n; f/ T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 a2 v- {# A) f1 M- l7 u P5 S c mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 O" x& |: ~# ?+ o" h, }; W- M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 a3 O# A% ~5 g! @: M. i% i! X' y/ T* E
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 S1 p7 h, E. Q* c9 H$ v0 p" K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: u: r7 I$ i8 k
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! c& O$ b9 A8 t$ \6 p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 j: V0 z! i0 S7 [0 | V; i
3 j2 S8 U6 e% q2 n+ P/ w4 d& W mcasp->regs->XSTAT = 0x0000ffff;
; V2 ^1 I) K+ @( R6 l/ x C3 [- p mcasp->regs->RSTAT = 0x0000ffff;
9 l/ ~$ f/ d, d0 P7 v
" A9 u7 r; x$ _; F mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! I2 F8 r2 }! P3 m& y3 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* j8 j) U6 \0 _# g: F mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 Q6 W l) v3 S. E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% i" e; B1 _& t. d1 P
z$ K9 P5 }0 w /* Write a 0, so that no underrun occurs after releasing the state machine */
4 |/ e( N& _2 X! U mcasp->regs->XBUF5 = 0;
3 L! @0 h, v5 \" { mcasp->regs->RBUF0 = 0;; {( [6 o6 S8 j
3 F5 c, h1 G1 i `" O: x
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 `/ r8 F. l" R" N- o& q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! y9 W# q& \/ U. i
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* w! ?/ r1 j: C; A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 N) I) Z. Y% O+ ^: J/ u/ t+ ~
; h# [% [# V3 r X5 Z1 { mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- I: n0 z' R0 D& _/ a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 s7 G, |5 `0 v @* D( N8 a mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ d: ]. e' f% f) @& h) n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 k6 ]) E: w( A7 [. Q. I3 {0 i* C S+ y5 T) Y
CSR = 0x0000;. v0 }: ?: K$ ~
INTC_INTMUX1 = 0x3d;
- w( b5 t+ E; ]* E0 I U% W" e ISTP = (unsigned int)vectors;! P% a# T* \& Z1 n0 a9 q
ICR = 0xFFF0; - N, }+ D# d+ G- K% l
IER |= 0x12; + \* c5 G4 U+ x% X9 l
CSR |= 0x01;
* B) e" N6 I% }; D6 r
+ }9 ~! P7 k& J/ j1 D* U% l' o+ ^) [4 C2 i4 j- S" H, R
1 \( o, W2 F5 S! b, ?还有就是两个输入输出函数:' W' x' \5 z$ j& A9 M8 L& L3 X7 I
void output_sample(Int32 out_data)
Y6 h% ~3 m$ z2 ]{
5 p: O6 g; m1 H AIC31_data.uint = out_data; ! t' C/ f2 p& p) k' _ j+ A
MCASP1_XBUF5_32BIT = AIC31_data.uint;
. X) F0 O* Z) H3 b/ e: `' t( k$ Q+ V}
3 u. |5 N& ?% M9 }4 b( f, O/ m* w
Int32 input_sample(void)' @: K$ X8 ?, f0 T& h
{
, I2 h R& d5 \, s- W% H5 g AIC31_data.uint = MCASP1_RBUF0_32BIT;* v% l5 S( L" t2 u y: n
return (AIC31_data.uint);
6 _' Q4 H$ r# d: m$ N6 R}
9 G5 q' i$ X. B& w' K$ X r5 A( J7 W4 L( r
|
|