|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 |3 s* {6 a& B1 l% i) u
main文件:' ^7 D$ V' i& e: b; B
interrupt void interrupt4(void) 4 ?1 C( z# w3 e$ k/ X6 P
{
! ^& ~6 K# A8 `4 Q' O# U# g Uint32 sample;
2 G1 A% _6 \* R# O
9 k% `" Z9 [8 J: t: ^" m5 b sample = input_sample(); // read L + R samples from ADC5 C1 v! y7 P0 \' G1 S5 U
output_sample(sample); // write L + R samples to DAC
: N5 ]+ S8 A8 f* R1 Y% j: a# ~ return;6 e0 Y! K2 N \2 _
}
0 j- o. g. H; P4 A: w9 P/ \* S3 `9 y& f* q% u
int main( void )+ q s# m4 l4 T- m
{
/ }, O$ X1 }9 J3 a" ], A; m7 h
; I& e) U# z( k$ o7 j2 p /* Initialize BSL */- P: D5 p+ K% X2 Q/ n/ ~
EVMC6747_init( );
! W0 U2 c* {% |+ {8 M /* Call evmc6747_intr function */
- ?. {) Z5 E' h3 } K! O aic3106_init( );# j7 v7 Z- q. `, h8 Y0 B& C
while(1);+ `" D8 l" T. g/ I3 N
}
3 l* j8 J2 }( S5 C9 t2 h9 b T/ t" J) K$ K3 r
6 W+ [. U0 {8 l1 i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 N3 d* A) L& ]/* Initialize MCASP1 */ P9 G7 X z/ A' X
mcasp = &MCASP_MODULE_1;/ K, s# v2 T3 h+ s$ J) B
mcasp->regs->GBLCTL = 0; // Reset- Q- ~( l& A3 F& c( [3 q) [
mcasp->regs->RGBLCTL = 0; // Reset RX
1 i, n; @& N9 `3 |5 Q mcasp->regs->XGBLCTL = 0; // Reset TX
1 T$ t2 F) G4 X6 r% Q mcasp->regs->PWRDEMU = 1; // Free-running3 a7 y3 z" N! [! V( h
// configure McASP0 receive registers' L3 x2 T, m( u: p( J1 u/ ]# J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, W1 c a; Q7 I7 H/ o mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# a0 A7 V& R0 ?$ `2 I' P8 D5 E mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% v$ a- o# d P" K* q% L* W
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" w) Y, M' S. B5 b6 h& }8 X+ a- U. w$ y
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 I; M" m# V: h# }
mcasp->regs->RTDM = 0x00000003; // Slots 0,17 M( b% _ ]& Y; v% @& l6 j3 t
mcasp->regs->RINTCTL = 0x00000000; // Not used& B1 s! S1 s. _- N. ^$ i
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; q* V% `/ `" C3 b
) O! V0 Y+ d1 O/ T. i5 m5 H* s mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: H* o6 S! E, X! J* x6 G' g
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# ~0 _ }8 p7 X2 P# g mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 v8 ~% X4 n1 d% s! m H mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 {; c! z. L5 d2 a4 u mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; A8 M* s% Q+ V, f- x; B& I: E, r
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
1 {; V. ?% A8 J1 X9 f3 r: d7 Z, E mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ I- O, S- w2 x' f
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 C6 }: p+ B+ r; W5 ^8 \
: w& ?; b1 _- v mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ M+ D% ^ X" B, }! z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 M: j% L- [( s' @% l mcasp->regs->PFUNC = 0; // All MCASPs
% f3 ]2 O, k# l, x8 P1 ? mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" i' [- @& o( I; w
5 e! F2 z9 ^1 K" {# M mcasp->regs->DITCTL = 0x00000000; // Not used
% R8 n% H3 P7 W& x mcasp->regs->DLBCTL = 0x00000000; // Not used
3 A7 _9 {/ Z! m; [9 z1 Z. f mcasp->regs->AMUTE = 0x00000000; // Not used
2 P1 l5 R, [, H% H' W, B$ V# P( G: K- w" K9 d
/* Starting sections of the McASP*/" t3 j9 U J2 b* i6 [1 h1 r: G
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : ^, ~ U: J2 B4 U3 r5 U& h8 B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ ~9 ?& C7 V, [! M4 T0 ]. s mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 X% I9 B2 ?1 |9 e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 _, ^. C( \( w' H
: p2 Z2 e( I. z( S% K9 m5 v+ x
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; [( d! V- k" p9 h1 Z% M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 ?! A( M# R$ N5 I0 w% w
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 D8 \5 i9 Q# Q6 e5 Y3 x1 a; J. A8 K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* G8 }0 A; v4 F! @1 r
6 m# u& P. k- L& m! ?% D( P
mcasp->regs->XSTAT = 0x0000ffff;
: Q1 h" g( S% p' y mcasp->regs->RSTAT = 0x0000ffff; 1 v3 B) L' }, s( Q4 K
0 ~1 f, _) A7 u6 P4 W
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- U2 x- u; @7 M- U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' q$ V8 s' m6 l5 d
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & n3 q) b" @# A- i' r* K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! r& u, \3 W ]2 C. w2 @- @: @# z( j* J( `/ t4 }# t
/* Write a 0, so that no underrun occurs after releasing the state machine */' A6 `8 g! }: F6 A" z5 |, R
mcasp->regs->XBUF5 = 0;: O9 I$ x2 L; [% \4 h1 Q
mcasp->regs->RBUF0 = 0;
) i" K3 `- m5 c' M) @* q4 v) d' d% B1 l& A
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! q2 r1 S" G9 p+ ]8 W. b- Q- U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 L, [1 E+ n+ \. H) w2 N7 M mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , p( a3 }7 Q8 H( t, m) N( Y0 ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) o5 K7 N7 w, j3 b* _% l, P3 \/ w9 @
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 n' J7 ?- s; D, z2 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# _: k3 \ ^, F8 Y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( k5 T+ {) I" G- P( `( ?& e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 c- [# I1 S5 [/ _* `
" v. K/ t5 ^; d7 K" z CSR = 0x0000;+ Z2 r' R! ]) r. g( G0 J- a, v; i
INTC_INTMUX1 = 0x3d;
, [* ~4 y0 H# O3 |2 F2 z ISTP = (unsigned int)vectors;
9 ?/ n V' d' {3 n! | ICR = 0xFFF0; ; v/ ~$ t/ n# b; Z5 C& r
IER |= 0x12;
" J# x6 k% d5 g- h0 k CSR |= 0x01;
/ h: U/ t* @: T" B/ P9 g+ F0 G# T$ }) j3 n5 p5 {/ j# T6 {
$ }( V9 ], d1 q1 G1 i0 i
, r) q$ Q" a& N0 C) |( s* [
还有就是两个输入输出函数:3 _5 ]3 h: p4 j6 q' I! }9 N
void output_sample(Int32 out_data)
8 N8 w0 ^6 I3 e7 n{
r4 P! N4 _* i- V AIC31_data.uint = out_data; + Q& h) a1 i! e
MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 i, i; j5 ?9 o4 u( s0 g}) E) p0 i; v8 N6 W
6 S, q. l. Y* d4 u, f- ZInt32 input_sample(void)2 V+ E& E6 J. s1 Y/ y( }7 t
{ ' G5 U; Y8 l+ l9 J' |2 h o9 E3 q
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' |4 ~" h$ b# g5 h0 o5 o( }9 h return (AIC31_data.uint);
9 p1 t4 Z$ X4 C. T; R8 T}
' ~% O& f& L; \: v
8 n( }; f/ W' g2 G6 v1 i |
|