|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! m2 ^- q7 j$ Q+ @main文件:9 f6 t- C% }- b* M+ a
interrupt void interrupt4(void)
: C- i; E' E9 W3 f; F{6 @4 w6 o3 [. z) t# L- [
Uint32 sample;, L+ B, ^# ^. E {- C& x9 c% z
9 Y2 f3 O/ I! T( i8 K
sample = input_sample(); // read L + R samples from ADC& j( Y' S/ y1 K. E2 j7 L5 K
output_sample(sample); // write L + R samples to DAC / p1 x1 Q' I [1 Q
return;+ h- ~7 L7 \$ m9 x6 p+ m
}
1 e) P! a* q7 b; q2 E$ K4 `* I& W' X5 T1 M. W- t, s) v3 g2 j2 O7 `
int main( void )6 e5 r [4 A D' m0 {
{) j, x$ ]/ ]5 f0 I
: Y3 n3 I$ H- R( E, S! {: Q /* Initialize BSL */! v: M" Q- v' V5 z6 p: [
EVMC6747_init( );
' A3 J/ ?/ V8 Y4 x /* Call evmc6747_intr function */2 c9 r% w; Q, \# L0 g
aic3106_init( );
& S; ?, b+ J- Q; i while(1);
# X# ]% ^9 O7 L; @* z}
6 i0 [8 \# A- @* _, A- F X, |& G+ @- K/ `" Y; K2 N
: k. l8 _. I% q y6 f- oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" z5 C" r. @2 Y ~3 ^
/* Initialize MCASP1 */1 f4 `" U/ k0 z7 J' x0 {8 ^$ u- R
mcasp = &MCASP_MODULE_1;
9 @7 B" x5 H& a8 B mcasp->regs->GBLCTL = 0; // Reset9 D; q$ j; G# _9 }* S' c
mcasp->regs->RGBLCTL = 0; // Reset RX
: M7 w) p9 G, n% w b mcasp->regs->XGBLCTL = 0; // Reset TX
7 |0 ]7 A, H5 M mcasp->regs->PWRDEMU = 1; // Free-running
9 J. n3 n: c! v% J/ q // configure McASP0 receive registers
: z5 ]: r/ [: t! M/ B mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 B# n% |6 i5 k
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
Z% Q% v2 I `/ a mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% L0 O% z( v _, z, U1 A7 Y
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- q& g* n) l/ B# Z, O4 Q mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
1 C. x: O$ e5 @6 O+ N& z mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 w9 Q$ j( w. N" I+ }3 ~3 m mcasp->regs->RINTCTL = 0x00000000; // Not used) l" C+ f" p' S' a) W
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' z1 q, c, {& O. u5 V8 \* s4 s; i
- h, y% Z1 ~# k0 E mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
" @+ b3 i3 t( G; S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' }- l* ~" r0 K& f- r' B2 _
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( J5 n3 k' r5 T' J k mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16 a+ y" W$ |( U, F; @4 ` _
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: `7 ^! S. b! D; ~$ Q mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) e& b& A& q7 K# i) N4 i mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% y" y0 T) e a, |4 a4 I- g
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; Y: Q. m9 P$ m9 b* C8 K
1 x9 _$ O& m/ h" | mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" R3 O9 s( w2 i, o; n2 H
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
( r j) N. Q! m mcasp->regs->PFUNC = 0; // All MCASPs2 r* ^+ j. N: P- M, n- i4 l# X! K
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" t$ z% b1 _, r4 c% P
; P3 t; l0 ^. @+ x- H- u& ^' a
mcasp->regs->DITCTL = 0x00000000; // Not used7 @/ q" y# q Y6 s$ M
mcasp->regs->DLBCTL = 0x00000000; // Not used
( K* S7 x, D; e$ | mcasp->regs->AMUTE = 0x00000000; // Not used+ o$ n5 [* A, R7 I0 k# {
: n! |5 Z# R: J% C: r: a
/* Starting sections of the McASP*/
9 b9 E/ [9 g2 B% f( |5 g" G! H mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * P, ]4 J% F i) X4 V4 w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ) s4 ]2 i! k# {: ? t
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ U0 Z- E- j: L# P0 n' Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) y$ E" ?7 x1 ]! |
! D3 d0 B9 Q0 y/ e$ t mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; b* n- o% o) }& N$ N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 ~8 K% h2 Z: `, A
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' r- m8 V+ z8 E9 x- T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
R- Y% d0 z Q( R7 S! l6 f2 H) z s# q
mcasp->regs->XSTAT = 0x0000ffff; : j/ N' d/ ~ {
mcasp->regs->RSTAT = 0x0000ffff;
% o) X1 X$ p: f7 \/ a1 n& B P/ \+ g
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% u' m2 d* M+ B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 n4 p: m$ ?! N
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" x0 l# z/ L4 P! t1 d' _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ Y" M: I7 r2 c6 w' M1 s. ]! c0 ~- x
/* Write a 0, so that no underrun occurs after releasing the state machine */
5 I, X: L; h" _- b5 l mcasp->regs->XBUF5 = 0;9 V- z" Y5 B4 H' R, A; X
mcasp->regs->RBUF0 = 0;
. M; S4 q! ^" a% p% l9 F' e# o3 Z! {/ U* h# H' A
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 C. ?( m3 D4 {; E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ m9 o, R3 X" `; T9 E6 b
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % n( B! B& ~0 ?! [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) j: d& J+ B+ B0 @2 [, l$ a8 M- l
4 \% Z3 T6 _1 Z% x mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & u" K9 V; u8 L, i9 K7 A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" F" r" T( ]' o) ^ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 s# X5 n7 }3 _2 o/ V& z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 V/ X$ F1 ?7 b+ u
2 H+ n/ t) S4 H' @ CSR = 0x0000;5 B1 S# m; a' s8 ~1 Z
INTC_INTMUX1 = 0x3d;
, Q5 f* O: |9 G3 A. C1 U4 k ISTP = (unsigned int)vectors;; q# w3 L0 q% E2 \+ L% z
ICR = 0xFFF0;
2 N7 L0 B7 i8 Y$ X) N IER |= 0x12;
! E0 d: L l% q+ c( B CSR |= 0x01;
2 O4 i4 e7 G( d" z5 d, Z5 ?
1 n, z) w: a) _0 ^4 d8 T2 P, I
" v2 N0 \1 W& t. u! q6 Y, H" v
0 l; z( X2 f; M; T; F还有就是两个输入输出函数:
$ {9 |5 i5 t' j6 evoid output_sample(Int32 out_data)
8 }2 N3 |; F: b4 h{9 [/ C1 i. r; G' R. z
AIC31_data.uint = out_data; 9 Y9 }3 r @# ?7 c L$ h$ C) w
MCASP1_XBUF5_32BIT = AIC31_data.uint;
) C* [6 j s7 e$ T! \}# C e& R9 T; R) j
; t2 A( W) Z, t0 Q% G9 Z2 C2 V% E0 E5 n9 r
Int32 input_sample(void)& K7 M3 y4 Z3 ~7 n C
{
( r1 O. ~& X7 a0 ?8 Z AIC31_data.uint = MCASP1_RBUF0_32BIT;, _2 q! W/ V' B& C; e7 [
return (AIC31_data.uint);
- Z) u+ Z: l* _( r: b4 A}8 ]( ?% A. T- c6 \
1 Q' _, ?. |) z
|
|