|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! S+ l5 B+ ^! X* ~$ m( I! b
main文件:$ Y! \$ B$ A$ A8 z2 B; v& L
interrupt void interrupt4(void)
% Q9 _% V3 `3 u, ]- u7 h9 H1 r" c{% H; E( r, a. f$ b' v6 u3 c: G! l' G
Uint32 sample;
% B" t0 D& `, G
/ {) ?7 e+ i+ T, @ sample = input_sample(); // read L + R samples from ADC
0 O9 a3 @' Q4 {4 A0 }4 }' n, N j output_sample(sample); // write L + R samples to DAC - X: p/ e1 G/ U
return;' j5 r& u. F. t; M
}& t3 I! c. Y% u: W- C! Y. H5 h* _
- i- ?) F m$ X4 ]9 {int main( void )
# x' g( m4 i# u9 x _( n' S3 Z; r2 L{0 o, H7 W5 ~3 N) C7 P
0 v. F( w0 L/ z' J& Z8 @1 ` /* Initialize BSL */
# o- Y( w1 ~# S5 }) D4 _ EVMC6747_init( );
% r6 q6 G5 A5 v p9 u' E /* Call evmc6747_intr function */. L; `, Q! O1 }# ^1 V$ i, z
aic3106_init( );
% ~4 p" J+ o1 x; y6 O# n8 k while(1);
" o! U$ \! K: `}2 e5 l2 c; U- e4 m4 v& i/ g' V
, q+ d6 U- T' C) r
3 g& Y f; p! X/ Z/ J8 ^1 m+ B" Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 v0 u1 J2 B* ?" u& z
/* Initialize MCASP1 */
! E- c% _" m) W" f mcasp = &MCASP_MODULE_1;% J, Q% g. ~/ q' h% |, |
mcasp->regs->GBLCTL = 0; // Reset
" @1 b( n# ^! V/ U4 z3 m1 P mcasp->regs->RGBLCTL = 0; // Reset RX
) ^1 _- H: d' W) b mcasp->regs->XGBLCTL = 0; // Reset TX2 Z' G( t* c0 R9 c4 c
mcasp->regs->PWRDEMU = 1; // Free-running3 w: |6 \: @6 ~+ Z0 R# g$ H+ ~
// configure McASP0 receive registers
P/ I; I9 J; l4 K- H( X2 [1 e mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used2 s; m! @9 f7 J! v$ n/ ~4 P) M; H
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; W( M" K' i3 o9 t; U+ t) `1 W
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ S5 n9 g) O! F. C) k3 k8 F% Q mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 p' g) }3 Z5 Y) @$ v7 q mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& p2 p, C2 v4 E- T8 u, f6 U. D
mcasp->regs->RTDM = 0x00000003; // Slots 0,1- T% g; V9 X$ F9 |1 c
mcasp->regs->RINTCTL = 0x00000000; // Not used
& h3 B$ u6 ~. G5 D mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 s+ z5 [# { u0 t/ U3 ^' k+ o: C2 M( c5 s1 @8 t
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; Y5 w/ @: G3 U6 d- p mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: |" d' _, j" N0 F. `: b" |
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, A8 Z: ~$ \: B8 Q+ D
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" ^: N1 ^) T$ J+ p4 w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: u. b/ I, {: x+ t4 S mcasp->regs->XTDM = 0x00000003; // Slots 0,1' k7 n8 t% Z, m6 d) j8 R* `; g7 [
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ V' C! C. L$ n5 e0 N$ u: U mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 T- X/ u* w8 \2 C' ]
5 k# V* X% W9 [. R; a8 j! U mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# B# l" I' |0 y y" E
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ x+ ^" R* s8 i( N/ V
mcasp->regs->PFUNC = 0; // All MCASPs
+ D$ M$ J) h* `% h; [- A mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 ^2 O- O# @' e, V* T. Q% e& y
7 t- P+ u8 O% ^, ^8 m' H' i; H! K mcasp->regs->DITCTL = 0x00000000; // Not used. u% h& o& e: k
mcasp->regs->DLBCTL = 0x00000000; // Not used T& y( h d- k% }* r. G8 a
mcasp->regs->AMUTE = 0x00000000; // Not used& Y; P# W6 y8 B5 B% ?
/ E2 W6 U0 }0 ^/ _/* Starting sections of the McASP*/! G1 r! G3 F, t9 S' h
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 }2 _" @. @# m" g V$ v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 1 n! c Q# d/ e% V0 W
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 I x! m' s; o) b3 e4 u1 p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% U+ C" C+ G4 ~$ I# A7 G% N; @
/ e; I) x4 B' u
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 o8 x5 X1 r$ V* d3 c! N1 G+ k# c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. g1 {% U6 p9 v( W
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 A8 n: b4 H2 ]. W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
]2 H+ N1 H3 J: t8 Q8 g3 p& V9 H& \; l/ w4 \1 q4 J5 d. o0 l& u
mcasp->regs->XSTAT = 0x0000ffff;
9 S b. h0 H" r mcasp->regs->RSTAT = 0x0000ffff; % z2 ?4 Q1 N! i. M2 b. W& A4 L
* N' q" n# C* z' B( O& h! M' `
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 E" h9 F5 h0 P. W& S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: @4 \0 @" q, z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& N" h3 b) `, e' g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; c1 A. V2 x3 X' m6 n# R: O& m) u+ i# O9 g5 n( A$ f/ m1 s
/* Write a 0, so that no underrun occurs after releasing the state machine */
' P& S4 V: k! q+ {0 w mcasp->regs->XBUF5 = 0;* a) ]5 |$ m/ O& U" {, _) S
mcasp->regs->RBUF0 = 0;
' [3 ~9 G2 [' @3 T$ {
$ Q3 P6 t8 D; q9 k- [% w mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / n8 p3 }: l2 X# ]# N% o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, P' f8 v+ Y; P# k! Y9 q0 O mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 k3 V0 ]4 ?7 w7 L7 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& a9 x# L+ Y: e
% }; K& D2 ?* K9 `" k9 R% E; ~ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ S+ e2 ~7 s) u$ N1 X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! |7 k+ ?) t* ]- {" K/ \: \
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 W$ d* S' h! s/ k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 x0 i: |2 V. b/ E4 ] [8 j0 G1 q6 B: [; [! U) m& r
CSR = 0x0000;# A, ~1 k, h G. A/ O$ u4 v& }
INTC_INTMUX1 = 0x3d;) n H- {2 S0 C0 {
ISTP = (unsigned int)vectors;
7 k' U5 Q3 W" w# e/ C ICR = 0xFFF0; $ O/ I1 N& M! v1 S- Q+ U) {
IER |= 0x12;
9 ~( }0 ^! \# c CSR |= 0x01; " `9 u! }/ C5 B; f5 ]) k9 Y
1 ]: H% }- H" G8 X8 o% P1 J1 T
5 w- L5 t1 v% A$ b# z$ @3 r
7 y2 H$ Q8 w; _* R还有就是两个输入输出函数:2 j9 D- s- {' m( l* x
void output_sample(Int32 out_data), Z7 E" h+ @* x0 v% p- O, S
{
7 l* ^6 J5 m& h1 w AIC31_data.uint = out_data;
5 R: k0 d3 p/ ] MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 B7 v- ^% M p* K- Q1 v8 U}7 X, n) o. W- n+ L0 G5 j
, T8 F5 q2 K" \ YInt32 input_sample(void)
4 n% |- {* E! k& H/ V5 ~0 |{ 4 p! s( b9 x+ j; X) g0 n4 o! h" j
AIC31_data.uint = MCASP1_RBUF0_32BIT;9 g0 m' P F) Y5 |# ?
return (AIC31_data.uint);
4 b6 n7 i- Y8 q1 U8 i/ u}
1 Z. I& `/ q! `2 W$ Y8 Q' M! \& o8 t4 p2 }+ t0 p
|
|