|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! Z, A" n3 b/ T% T( qmain文件:' l7 \/ }! `, S" V
interrupt void interrupt4(void) " G6 V3 S4 F) G
{
+ n+ _9 J* g) |& [ Uint32 sample;( w8 m% J V4 q0 A
- \, J% F6 U" S1 x/ S9 ?; q2 w! H
sample = input_sample(); // read L + R samples from ADC$ P+ d: G. D' J @. ?
output_sample(sample); // write L + R samples to DAC
- G6 _# f/ K* f3 F$ G1 ?2 ` return;3 W& p/ d- f h; Z) z, R3 N" n' g
}
: }9 y0 N- E+ d. g! y5 \; A9 |8 h- P0 M- n: [
int main( void )
X/ v2 t; r& H* U9 C0 Z# c{0 u1 g4 C# H! R# Q' N4 G; M
5 L7 `- C/ r9 z5 c0 w% ?
/* Initialize BSL */ o$ n9 x( H( v0 X! h0 A
EVMC6747_init( );
* Y* ~7 h' k1 [9 Y7 G9 P) V5 A /* Call evmc6747_intr function */. Z |9 f( w/ L- e9 A" V( Z1 N, q7 M
aic3106_init( );: o' Z9 P6 j9 E) S
while(1);7 @0 Z! w' Y* u" s' H5 g
}9 g3 r. g+ e2 p, o
, ~) z2 s' _" u8 v# k/ ?0 W( w
. ^7 t* M: `- l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* @$ G0 \, X' [( E3 ]5 z3 B/* Initialize MCASP1 */1 t2 @* v# P p# ?
mcasp = &MCASP_MODULE_1; O3 t7 n$ V7 X3 q1 X1 F$ M" s p
mcasp->regs->GBLCTL = 0; // Reset, ?( ~0 D X Y
mcasp->regs->RGBLCTL = 0; // Reset RX, h* k- I5 O9 g1 |
mcasp->regs->XGBLCTL = 0; // Reset TX
2 ?& }. ] I$ D4 Y) ?/ h+ R$ k mcasp->regs->PWRDEMU = 1; // Free-running" I/ \2 A# M5 U# ]
// configure McASP0 receive registers
) w2 R& |) I2 w7 g( b2 o q0 a: D' u mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 p# g8 Y5 f6 Z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. i+ |) `1 c* J mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word, X+ `; \$ @+ p8 Z" `$ Q3 }! B
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: o ]* W$ A) ~# S* H8 | mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ m/ ], ~ n( e8 S- ~
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) U; X" T8 E6 y, N, Z5 \" _ mcasp->regs->RINTCTL = 0x00000000; // Not used
. k+ I: v% W" | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* `* ]: @$ c- z, ?$ c) O# \. t6 D$ i) J" P4 e" T1 ?
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
- Z- _' J- [2 `- m, k7 z& \3 W/ n mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 k( q' n- D& W. b. Z; z' v7 l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 y5 z: \0 F/ ~ ` mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 p- e2 S6 Z$ G/ E2 ^ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, Y* Y+ b4 f* ~3 D( M" C
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
# f- D: Q% [0 Y9 M$ t; L2 Q mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, d0 Y% T" N4 I. u mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, A' G% R* u6 |1 x
, {/ ^7 {( H2 Q6 W3 q% g% H' l. x$ E, M mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. o; r. q6 H- W2 {, ~2 G& i/ U mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 o# `) a* d+ T; T$ A5 K, E
mcasp->regs->PFUNC = 0; // All MCASPs
' k$ ~! ?* o# x7 D: Q mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; g u: J+ Q6 a$ ~
+ G/ j, X; ^% g, h. s1 Q+ P mcasp->regs->DITCTL = 0x00000000; // Not used
% _* O7 r! }5 Q1 G* u. m% I* X mcasp->regs->DLBCTL = 0x00000000; // Not used
" y8 S$ f# L( B" b* u mcasp->regs->AMUTE = 0x00000000; // Not used
W* y3 G. V8 n' Y6 M9 S- v. p: G: t& n
/* Starting sections of the McASP*/3 Q+ A! O/ S* _* d g% O4 Z- [
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# M! C& u/ S' [5 E/ n' b8 K+ [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" N$ c! S+ w$ T( u mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
/ J; m; w6 }. t" N5 f% F* x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 T8 z4 I) r+ O, g) S# ^& H7 I- k: N
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ }, @# i7 r! o2 h- C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ v# `/ C- u, H. d/ _
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* J) a& e- F- U; W" x; r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* M) p% n K- o
# e& I2 @6 B5 u4 ]8 r* i
mcasp->regs->XSTAT = 0x0000ffff; 9 A. G, e1 J$ @
mcasp->regs->RSTAT = 0x0000ffff;
* F2 `9 G( u* c( Z" p3 D
5 x, _- @/ I, z$ G" r( A mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, v& N8 ?6 B9 K9 Q, o, P# N0 }4 U: b) y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 _' [2 p& _* {4 Z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* |7 A( x/ @$ S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 p: j8 U. Y3 F7 U! Y V' Y7 L& F4 E9 j7 n: y
/* Write a 0, so that no underrun occurs after releasing the state machine */! Z# u: h0 }+ r% @$ n" n
mcasp->regs->XBUF5 = 0;0 I3 i: S9 q/ W) X- h
mcasp->regs->RBUF0 = 0;
1 ]; N5 K5 R$ }2 O7 O( R" c
9 N7 x/ f5 k& m6 k3 g; O5 s mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " l. I6 M" r5 Z; \, i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
_+ C- W9 U3 |6 W; X' |0 N mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 i! i5 g3 Y$ M. A- Q( J' v8 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% X/ a% f/ T2 z U/ Y
p( }5 L* _0 l, n+ f# Q" w mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
f/ D7 Z+ k2 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ ~8 ]+ n0 l3 ^2 G
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 l( W# F. |$ j, i' V9 v7 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 r+ x" v r" a+ B; B9 c
+ P$ u1 I% p8 W, m
CSR = 0x0000;8 w3 a; |; a7 K9 Z4 Z1 b: @
INTC_INTMUX1 = 0x3d;4 ~$ j' {2 y, j' B
ISTP = (unsigned int)vectors;3 g" O% c# n7 a0 i6 W8 ?% }1 v
ICR = 0xFFF0;
1 ?4 R Z; o$ H5 b5 g! c IER |= 0x12;
. a) B$ b- Z* t! I s CSR |= 0x01;
! ]) o* J" W9 G, P2 C% f. w* O& Q9 F9 g2 T2 h' b2 G! L
2 x8 ~7 |% f( G- `
$ k. v4 w* B2 G
还有就是两个输入输出函数:
, R" w) D, x6 [% qvoid output_sample(Int32 out_data), v- E! V( @2 }3 g- d
{6 T6 I4 {2 h6 s
AIC31_data.uint = out_data;
2 D2 [, ~2 |: u5 `& R4 {' r MCASP1_XBUF5_32BIT = AIC31_data.uint;' D' u( [5 X1 p( u, [% u
}
7 k% O! Z/ \. E. C5 d J/ p( @9 ^ e& ^4 P; v" D) B* k
Int32 input_sample(void)1 N& M# K2 o# N* M
{
( x7 Z/ q$ l# w2 d. y/ k/ M AIC31_data.uint = MCASP1_RBUF0_32BIT;/ Y z' o2 P3 q M! }" y
return (AIC31_data.uint);
( i1 Q3 a. |! @1 y! N- P}
3 K4 p, \' U% r: \: {. _! o+ w' I
8 g9 E4 D& T5 d7 Q4 S) U# s' @ |
|