|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; t/ S; p7 H1 I
main文件:. t4 }, G3 E! L" F) \
interrupt void interrupt4(void) 3 ^$ q& ^4 @# \" @0 o
{/ K3 p& x) t" K( f
Uint32 sample;
- c: d4 E" `9 o+ V
! A( p' d1 Q- l4 O sample = input_sample(); // read L + R samples from ADC' M- w2 M4 \" V
output_sample(sample); // write L + R samples to DAC % k# G6 V# M& R5 D
return;- b5 H) D+ `) j( M e
}
9 O5 M0 Y0 y6 D) }# v% G* A0 R* ?; y% T4 w, D w
int main( void )
; F0 p% I. D' \( @{6 u, F9 v, r M* o) U
) t V& t6 d: T v' B /* Initialize BSL */& @& y' D8 k0 A# Q& f
EVMC6747_init( );
& G: [- U2 |1 a. d) J& G /* Call evmc6747_intr function */
( w& T5 y8 K0 }& r aic3106_init( );
. {* m* `# t; x" K2 n6 n while(1);
* _7 z- D" G3 N- U% a. }7 Q1 }}. l! Z* [* V) e
, L/ t% b0 p# w5 L$ o+ n7 A3 m. ^
& U- I8 K: d5 L: Z- R- saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ F2 _/ z1 X% W( u. }
/* Initialize MCASP1 */5 F* D5 T! Y N9 U' L4 p! l* L* B
mcasp = &MCASP_MODULE_1;
* Y; y; E$ z! H( S* h mcasp->regs->GBLCTL = 0; // Reset6 N7 q- t+ `- Z1 `: [
mcasp->regs->RGBLCTL = 0; // Reset RX9 Z9 f4 q- ]2 a9 Y" H1 H5 N( s
mcasp->regs->XGBLCTL = 0; // Reset TX
9 C8 x5 y" A W% {+ b* Q mcasp->regs->PWRDEMU = 1; // Free-running/ D6 |4 z( [+ k% E
// configure McASP0 receive registers* H2 t( M/ [0 a2 B" _$ A
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ V' I5 d2 X) A
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) b; N O3 B7 m3 ]% N$ ?" r mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 E% R: t% A3 c9 g/ d( {" w$ u4 x mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 j* X6 Q% V2 `/ w( ?) x* t mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 ]$ r5 r! y: P9 _8 m, ~& b7 Y
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 X8 M( i, W3 G A- G. p- ] mcasp->regs->RINTCTL = 0x00000000; // Not used
/ [) n0 l! i! S4 ~& O mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' ]* X1 ~7 I# G9 J* T; i
8 G3 t4 d" W; Z) L2 C7 ~6 G
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) R" I7 \6 }+ r) R# d3 z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- u8 Q3 H; B- n. Q. u6 m mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" M0 Y3 Z( u5 |% `5 B
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ C- M% Z, r. j" J mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
5 R3 R! U- Q0 u. _ u- Y mcasp->regs->XTDM = 0x00000003; // Slots 0,1: S! r0 d# p) h6 ~
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
( ^& D! x+ p9 X7 t# a9 L9 i mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 {7 [0 L& Q6 a8 ]! X8 R. Q2 T/ h, n# S; ?6 s) g
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN. p$ ~" M; C$ ]4 l, m4 {. {
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* Q- K- b% n8 K7 w4 V
mcasp->regs->PFUNC = 0; // All MCASPs
; N* w, h% |/ Y) w6 ~ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 q3 f# C D9 P
" D8 u: O/ w- N
mcasp->regs->DITCTL = 0x00000000; // Not used
" T; ?5 g: w B1 N0 }0 a1 k mcasp->regs->DLBCTL = 0x00000000; // Not used) a, k/ u, |: |# k& K9 v) \5 V, ~) ^
mcasp->regs->AMUTE = 0x00000000; // Not used
; Q# b2 I9 V v. @7 X0 ?3 X2 d. h, `- O/ x
/* Starting sections of the McASP*/
( I, w1 P4 L7 _; |% ` mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 n; @9 o) {8 X7 e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; Y' u3 v8 {; t+ \
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 J. [3 k' x" w6 w+ H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 D& p$ F6 k! [, w s! P3 y9 O, Y$ i% q: E" \2 h
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& U6 j- o P( |3 W: @ C7 D4 e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, [; K0 M& @7 b
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' O( J7 J0 O# @+ G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 ~6 J& z& ^# H1 m2 W
, M8 _/ m! U* r. K7 K+ R mcasp->regs->XSTAT = 0x0000ffff; 8 i/ `" k( n, @1 F4 `
mcasp->regs->RSTAT = 0x0000ffff; , m' t- E& b7 n7 _% ?9 d( q! o. y3 j, O
. Y4 q( Q. S1 Z$ I4 T8 p mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! f; G6 G. N; h) j7 e* ~: w X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) \# M# ]' v) y5 F3 e4 z9 a9 B mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; z; b/ }2 {( ?% l. ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ U/ e" j Z- y5 i( p4 U) v5 G4 j
! e8 a# E( h$ P1 X5 ~ /* Write a 0, so that no underrun occurs after releasing the state machine */! g3 I h' s# x
mcasp->regs->XBUF5 = 0;" s2 N+ t; d0 U8 _
mcasp->regs->RBUF0 = 0;
3 _" [2 @& j9 G8 ?
, g3 G! B+ }. N" z: c a$ x4 r: @ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 v' \& \# D; o/ n. |& r2 y. j, g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 B" w: q3 H- |0 p7 ]+ e0 z
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ e1 T( F) v( r/ }8 ?; y C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" i" g, T& m& Z7 f8 b5 r
: X4 h0 v) c, ^- N! h4 G: r mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* A1 |5 b0 B1 z' X* [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 e' o9 Y2 E: j6 M; n$ I- w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 R9 j+ r3 g# G, u2 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% _" {3 s- {1 ?& Q0 q2 V. D7 O
% M p" q- b1 b, Z1 u
CSR = 0x0000;2 H2 h$ a+ y5 ^' O* \! h
INTC_INTMUX1 = 0x3d;
7 i9 u! O! i2 k8 W$ M1 U3 o ISTP = (unsigned int)vectors;
! c: O6 U) O; Z2 ~" \6 m ICR = 0xFFF0; ' F0 x3 F7 }" y" K
IER |= 0x12; % p4 I0 L1 o) Y+ w3 |8 u% y
CSR |= 0x01;
1 V3 F- P" [, S' {3 X: `: r' g9 A, i
5 ^$ l' j! W0 L3 a; k* ]0 F2 Y9 ]7 {, B, M. b V: x
7 U9 H1 @/ j/ x0 M& z7 f4 s% v% d! `还有就是两个输入输出函数: G+ ^4 O( N$ |" A& ]) \2 T9 y
void output_sample(Int32 out_data); |; p; H: @4 c1 e
{
7 I3 h z9 q& q+ q AIC31_data.uint = out_data;
: k4 m" E9 k3 c7 {) C; I MCASP1_XBUF5_32BIT = AIC31_data.uint; ?" m0 M/ n5 D& ?
}
3 U6 U% ] Q2 ^# o/ P8 O+ @0 b: {9 r# t0 Y
Int32 input_sample(void)
7 e) p: N2 G; y8 H: u; @3 p{
# t% t4 F2 \+ Z! A6 T7 C AIC31_data.uint = MCASP1_RBUF0_32BIT;
# ^- k# B. d3 } return (AIC31_data.uint);
) v% Q2 [; d9 `, }/ |: R$ N* e1 K}
# R7 E: D% Z- n4 G$ Z* l) Q
$ v/ i1 v! C- Q; @/ }- Y |
|