|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 z; B3 N0 s$ P* ?& s. S
main文件:
5 H; ~/ Y/ l6 w% i7 }- Vinterrupt void interrupt4(void)
' y$ b* x r u& T, N{# E# e( Y- C7 k: V5 [
Uint32 sample;8 F5 F& K) s4 @6 [2 N, I& w4 j
& v- M C5 `- q0 m, Y. h6 u2 H( z
sample = input_sample(); // read L + R samples from ADC
, M$ Z7 w6 j& N( u, K output_sample(sample); // write L + R samples to DAC
. {: I( u6 H7 J& \# ]' l3 z, s d return;% ~. j6 C8 T: V/ M+ r
}
' O; h7 P- m( J- Z% T3 x0 v/ b( t K
int main( void )/ x, I( M q/ X5 g" ^
{9 R+ f: o" u5 L' `
% t# R A: Y4 c) [- C
/* Initialize BSL */
$ b0 F( `, W. ?1 J EVMC6747_init( );
: H: _2 f& j7 { z( B% ^ /* Call evmc6747_intr function */
2 |3 X' p3 \4 n; T aic3106_init( );
: g8 d' Y# z2 ?: @+ z& a while(1);
1 _/ ?. g$ K& l, a& _}
$ A& W% k# D" W, F$ m- e/ S) [% c3 \# O7 d" o- o8 x" I
2 Q: X2 _5 S- }, Z. Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! ~6 N5 \- T% O, E% I \( O; `8 o, Z/* Initialize MCASP1 */) x. |1 U& Q( B+ D4 v
mcasp = &MCASP_MODULE_1;
8 E) `3 }/ ~; z$ D mcasp->regs->GBLCTL = 0; // Reset
( A# h% q6 p; ^. H" m- q) H q1 z mcasp->regs->RGBLCTL = 0; // Reset RX# J* p+ R. C: [* p* K
mcasp->regs->XGBLCTL = 0; // Reset TX
4 H" w% `) V. @# Y0 l! M' R* C mcasp->regs->PWRDEMU = 1; // Free-running2 E% u) f1 O# T0 A, H/ D5 D7 t8 H
// configure McASP0 receive registers
" Q8 P/ R9 R, ?" R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
; I R) P+ r- I! U mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 d* g# L$ C e2 ?: G3 l
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# m" q% k( V5 Y# Z5 M7 E
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 g& p& i0 u# p0 X5 V
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
& u, x! K% B" h8 f$ ? mcasp->regs->RTDM = 0x00000003; // Slots 0,16 e4 v; L- ]. [5 }- F4 l' ]1 N' G$ o+ \
mcasp->regs->RINTCTL = 0x00000000; // Not used. ^1 J5 }1 k/ e3 R/ V- A" E* G/ b- j
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 {& V% k. z2 V1 K" c! q
; q# [( q! z- J; t, x( k0 \+ q* }
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 z0 L# B) B* o; {
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& F" _2 V" B {, r9 H
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, |6 U( U) G' M+ W5 ?
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* A' g" d& s3 n# m& A. Z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: c2 E" P. F$ y% R! _$ c mcasp->regs->XTDM = 0x00000003; // Slots 0,1 v7 k- L( F' C9 h4 R
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# M7 w* {/ n$ ^/ \
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( I! z! s! @7 {5 Z
$ E- V7 |& Z$ y# v3 O$ F e mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
+ q. k+ H" y% J) p- Z4 ]- u# r mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
7 v" ]0 [0 _! A& l8 s* j mcasp->regs->PFUNC = 0; // All MCASPs
) V Q' b) J. c3 t3 I! r! E0 N% p mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( W5 j1 f `# W" V5 V6 F! T g4 L8 |
: }7 J( I: T f# I mcasp->regs->DITCTL = 0x00000000; // Not used- k! Y J! k: r9 f; P
mcasp->regs->DLBCTL = 0x00000000; // Not used( ]- c( j e Y# l4 G/ u
mcasp->regs->AMUTE = 0x00000000; // Not used
, k( g( Y/ ]# P* b: G% X! G% X
% w: R/ J0 W3 R/* Starting sections of the McASP*/: C! d1 D/ q" I, ]; `6 M* q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" B' ~9 h3 h0 f1 F8 \& a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( t: S- V9 B( d" l/ x mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % M* C: H4 V7 M( W u% d, D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' |* [' _" a0 z+ I$ K) c$ \8 z9 N* a3 I. C: W% u
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 }7 n! D7 J8 W% ^# W: O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! ~# x4 y; m/ h- G: r
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; D9 |5 H2 n* Q2 o. q" w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 t. q. ?6 F2 ^( v: n% x" e5 j* Q8 {) W
1 p* v7 C; A0 N% m+ {, Y
mcasp->regs->XSTAT = 0x0000ffff;
9 E' a0 _2 O% ?5 L6 R mcasp->regs->RSTAT = 0x0000ffff;
; w* J1 z6 B* g* j) k8 }8 v/ e3 Y- B+ l
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 C) Q* ]+ b P$ ~1 t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" Q, G6 [) k7 J9 }& ` mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) x1 o0 G0 h8 K8 l/ ]3 \* v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 C( j/ o3 s: }* U+ @# s6 V: C
1 P. e. q: c- P& ]2 \- F /* Write a 0, so that no underrun occurs after releasing the state machine */
/ H' o' [! i, T$ c5 M! B2 ^0 w0 Q mcasp->regs->XBUF5 = 0;. g Y1 z1 l. r7 M1 C6 ?# z
mcasp->regs->RBUF0 = 0;
4 C9 I; S) N6 c
: M7 a a) F6 U0 J5 W; T mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . D' y0 Y' f) _+ g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& Z' f6 g! J+ d' k* k& C mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 S" x: E y' h- Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ @/ J1 A( Q. a! b
0 P' { @6 C$ [* ?! X mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 h" `3 C' o7 ?+ Y& }/ c3 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 M1 U! O4 P7 T8 `) Z3 T mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 a6 j: R9 z' E9 U6 f' G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 j) e/ E1 q! R
% ], o. \2 V; X. f6 d8 a& w- Q CSR = 0x0000;2 y! e1 i. P4 }3 M8 F* j @" Y# E
INTC_INTMUX1 = 0x3d;
5 t. y, U, U9 h. [0 A' X ISTP = (unsigned int)vectors;
0 E2 ?; H0 F/ j; n+ [# R ICR = 0xFFF0; " h- y9 ^% R* l, _: N3 f
IER |= 0x12; 2 b4 O3 F! {* x9 {% U, E
CSR |= 0x01;
3 m' T8 J4 B5 \$ f# P0 u9 K Q+ A( l/ f3 g7 ?9 L) h% y( ~
: K0 r5 ^# u! w: ^4 b
( n) Y9 u. U! O3 x/ e; @. S还有就是两个输入输出函数:+ x) w/ q$ z- {2 J
void output_sample(Int32 out_data)' |/ V! U- h: E | ^' J, l
{
J$ c' ~8 ^) M2 M- s- ^2 v AIC31_data.uint = out_data;
) N/ {1 V. |- w2 t- w$ }; \* R MCASP1_XBUF5_32BIT = AIC31_data.uint;
% f' q+ X" D1 E9 g; e& e}
3 c: `! s }* v+ c6 j
# j+ H" y/ o/ v% l- `8 L- {Int32 input_sample(void)
! @' o0 Y0 H4 P; Y# f1 i# N1 t{
. Z! ]. l. E! d AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 x! J g- ?. r; P7 u; @1 M W return (AIC31_data.uint);
b! Q) i( Z; |" A$ F}! T ^" h0 w$ X9 ]% S! N) ^& a& G
# h7 i, R3 u/ t; Z
|
|