|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* N5 Y' H* _0 M
main文件:
, F+ |) `0 _6 `) M5 ], f; Q2 D0 V5 Ninterrupt void interrupt4(void) ! ]- C# z# _1 g0 t* h8 A
{
1 L# _3 t8 T+ } w9 l( B Uint32 sample;8 g0 m. u$ r( X. b
% w$ ]: C. _1 Y" l' J
sample = input_sample(); // read L + R samples from ADC
0 @- \$ H/ i0 c4 j! q* \1 G5 _ output_sample(sample); // write L + R samples to DAC
( g+ ^9 _0 @- L. G# m* W return;* r$ k) C- f J" N7 D# `
}
$ s- Y/ a1 H/ `: m
8 |* Z c% w$ s! h4 G+ b( w4 M3 hint main( void )
7 h8 A, E6 w7 B: ~{
X* A1 C3 ] `3 a! f Z* E6 T! Z, W/ I9 ?4 U$ t
/* Initialize BSL */
% s6 K) I, W4 s* c: R1 w EVMC6747_init( );8 H) w' D$ Z o( L7 l& S
/* Call evmc6747_intr function */0 Y& x2 L, D$ R( z( U- {6 k* x
aic3106_init( );
! R7 h9 r% `# v: i while(1);; v+ Y' X' x/ h7 o G5 q
}) m/ w* P5 z8 j2 ]$ o' l
0 Q j2 z: d+ V0 F0 K# j5 t
! p3 \. {% i W" q2 N% \; B
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 A7 r. M# G+ C1 s, \0 F/* Initialize MCASP1 */
" A' @9 x% n( \5 S* D7 r mcasp = &MCASP_MODULE_1;( X. I, q! S3 b% }. Y( B! t
mcasp->regs->GBLCTL = 0; // Reset3 n. [% }8 R+ b% ~$ y- h: n# u
mcasp->regs->RGBLCTL = 0; // Reset RX8 j3 t; v* a& F$ l' A3 f6 `& R
mcasp->regs->XGBLCTL = 0; // Reset TX
* s+ D. L5 `! h8 N, N mcasp->regs->PWRDEMU = 1; // Free-running% y3 o/ Y9 `* t* {
// configure McASP0 receive registers1 f4 J9 r! [1 p- v
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' Q/ ?+ {* G9 f1 @
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 W5 i6 g" r/ z2 h; T. J# e mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 @5 ]- I* ]' L% r mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 V) U7 c& G C' J: B: D5 l: Q mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' q4 W* k8 {! k& B7 k
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
$ Y7 C- d: P6 h& {" t mcasp->regs->RINTCTL = 0x00000000; // Not used2 S% ^3 ?/ a/ c* g6 g5 p' s
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. E) H4 M9 z2 [( F) ~8 p, k
, A. _9 z6 g# v% ^ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 J* d1 `* q8 I2 n% N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
u! t5 T5 G3 ?; }, W mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 d) s: }4 }! M W' `/ D
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 A7 S6 {. y! e6 p6 x% q$ C* } mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
2 L/ A# F; z& v' Q5 }3 o9 b mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% c; n% o- K9 y) u2 F7 ~' g2 } mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) c% \2 B; y& A- [6 S4 U
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- F9 X6 l; h& D c
8 q0 Y: H K' H0 g5 U! @ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
; p! t! C1 ^; I) k0 Y) f; C mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* g( V( N; ]: U2 ]
mcasp->regs->PFUNC = 0; // All MCASPs, u b% b. P0 v
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 J5 e' }8 e" K: |: U
1 A" v" n9 q; h% v6 W, p9 i mcasp->regs->DITCTL = 0x00000000; // Not used8 _6 x, \$ {' G& B
mcasp->regs->DLBCTL = 0x00000000; // Not used
! M9 D" T9 A9 C) ^4 g% I4 ? mcasp->regs->AMUTE = 0x00000000; // Not used. W6 o: o) q" m9 H c2 `7 N I
8 Y: O0 H) b! V8 I
/* Starting sections of the McASP*/
& |# Z5 v1 w9 @$ ~& u7 i1 O mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 E& ]# ?! x4 O, C* V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 D( U' _5 _$ M ~, S1 d$ b3 l
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# d$ R9 D$ M8 f! `; i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 F9 g' f: D" V* j4 `! @- Y5 ?0 V( f
8 G$ X7 J! ?6 \, B- z8 W/ \9 a mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 g* h* b R. i4 ]" [; |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 O. I* `$ R) G' ^$ z+ k# w: L
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 Q5 f" a- W, S! B) Q: @; v# j( h& }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 U3 J: G% N3 e0 f$ g$ ]/ N" A9 o5 t$ H+ `0 ~" z! T
mcasp->regs->XSTAT = 0x0000ffff;
! ]- K! |, d8 }& S8 N mcasp->regs->RSTAT = 0x0000ffff;
' b h9 {8 ~3 |( ?0 |$ B0 y1 D0 x P2 B' j2 n" M: P
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* Z' D4 D) O1 G. O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. O6 Z/ o4 b4 G9 T0 d- C mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) Q- H; {4 n2 l1 a0 O0 X( L5 {4 c/ h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 ~7 P: u. I+ s: R
" W" ~6 X) l8 Z+ a. a! J! P! q. H; Y
/* Write a 0, so that no underrun occurs after releasing the state machine */- n; I* Z4 L* Q
mcasp->regs->XBUF5 = 0;
, ^9 ^1 w( i1 `0 l9 Y$ \) a- v mcasp->regs->RBUF0 = 0;! t! [. |9 A3 ?. I5 k" J
8 ^- a1 v0 ]$ m* V# @( w: S7 @ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 p; C9 o" X5 b0 q2 ^$ `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 c% z7 g! w9 a
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 n3 S- n. }) C1 o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 t) N$ i- z+ }% H/ s: Z( z/ p
`5 A) l, A8 D mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 O9 A) j- H8 m3 r/ l. u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ J' O9 r* M4 A0 T9 N" ~. W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( n( Y& e4 Q- }+ M: m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, W/ A# |& o* S
! G0 U/ ?" p: b8 g D) E CSR = 0x0000;
& R# w% x4 y# N" L/ h: X l INTC_INTMUX1 = 0x3d;
0 P$ q0 n$ n" m5 ]% w ISTP = (unsigned int)vectors;
9 A, | I3 u6 a6 m: w) `) l5 j: I ICR = 0xFFF0;
1 |& |$ t8 {( ] IER |= 0x12; ; ]( |; j6 I$ D( Q0 o! E/ D
CSR |= 0x01;
/ @/ D1 q8 F) B( q6 ~# V' F: w6 C5 [4 R4 Z8 L
7 D! k# u% k3 R8 F4 o
+ k% N+ h; m `! @- G$ Y还有就是两个输入输出函数:8 g/ h6 J9 S: V
void output_sample(Int32 out_data) @$ P5 j5 }% S: t, w9 D
{/ {- l4 r# _# i1 {
AIC31_data.uint = out_data; # _+ V2 ^& G. X0 I9 A
MCASP1_XBUF5_32BIT = AIC31_data.uint;4 j& E5 x& U) z- i
}
: d9 Z0 F g. H& m3 h% y9 m- C4 A
: `/ C6 Y' D0 L( Y$ x3 RInt32 input_sample(void)
& L3 H% n! t5 [, X4 u4 G2 C( R{ 2 o; e7 l( D; q' r0 L
AIC31_data.uint = MCASP1_RBUF0_32BIT;: a% Y; n9 W' W9 S$ V, K
return (AIC31_data.uint);+ ?4 B& s1 V! l& I; D: F4 R* `
}
' \7 W0 l1 v$ O/ v3 l
* o1 L2 g6 J) h. E! i |
|