|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 ]% S+ c# I. f- o1 X. j( F. E. h- cmain文件:7 F5 I9 j% g& _" x
interrupt void interrupt4(void)
9 c( c4 U2 ]% h# Z! h" S{' e( |0 g3 N) z6 ]
Uint32 sample;
1 H5 k" n3 p9 s
* M2 d) B3 G+ r8 r% h! T' c sample = input_sample(); // read L + R samples from ADC# b6 U7 G5 Z A2 r7 U k
output_sample(sample); // write L + R samples to DAC
. J! S1 G, v3 Q* m( w return;/ H' e6 c; L3 W% S1 x* i$ o
}
- y k U; N4 _; t& l/ U% T) m- Q! n3 g' K- M7 y+ t
int main( void )( Z ?" c; G6 Z# |. A) L
{
& M0 Y* |. U& ^* ]" h) K$ [3 k
" L F" _, c& ^4 a- t0 u /* Initialize BSL */
5 a+ h/ G( k; Z1 U0 N" F EVMC6747_init( );
- l7 a3 y* { `+ p /* Call evmc6747_intr function */+ G- ^' F" S; B0 a3 X% z* v
aic3106_init( );1 p1 A1 H% g9 {5 P, j
while(1);
( X0 ]4 w/ f" G. c9 A}: \( f4 w U' I' ?1 o
3 u6 J1 }, O2 @7 z5 h2 h5 O% d
# A8 C! K& Q- S' u( ^9 b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: S T* |6 I) N4 t! Z& S$ L c9 {
/* Initialize MCASP1 */ }* [2 ]1 k e7 r; ` n
mcasp = &MCASP_MODULE_1;
6 B7 V; O# @3 a5 l V1 X mcasp->regs->GBLCTL = 0; // Reset
% R: U7 n, @* I/ s7 ?; k) w6 ` mcasp->regs->RGBLCTL = 0; // Reset RX
+ D6 C$ h4 ]. `: y' O mcasp->regs->XGBLCTL = 0; // Reset TX
( l- c% L* `# \- x3 u+ J mcasp->regs->PWRDEMU = 1; // Free-running- E3 l7 S+ b: f" p2 ]* M2 B3 k
// configure McASP0 receive registers! ?! w) u$ O6 M2 Z$ H, e5 G% I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) G5 s% l3 z0 q: l
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# C# X2 V( P) }, u P1 h/ D mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ z- x% z# G- `3 g. q* e1 N
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). c6 f7 V) s% N5 u
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)2 s& {+ J8 ]4 p) D4 d
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ @. k+ K9 ]6 s/ b mcasp->regs->RINTCTL = 0x00000000; // Not used- d; M+ Y% U, m0 K
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 Q M5 w0 _8 \) k* Z
/ S2 ?# _: j5 Y3 {( K0 M: E mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: [/ a) u& L7 t' t/ e6 o: K9 P1 j# r# ] S
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 G9 l5 `) L' {; R& I& C) N# k! A mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word _- p" t: p6 K; X3 S$ O! B6 G# [8 m h* o
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 q4 c; B/ n* { mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 {! f1 S1 v/ _) }: g* z5 u" C
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. q# ^$ E4 E2 k5 C. {! p mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit+ D( j% S) J8 p0 K/ i* Z) I" k
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& }4 v' D: W C2 e( h7 H. H7 y
0 y# u' j6 s( x0 t mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 e5 f/ [# Y$ a4 a A; \+ p/ q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( |( L+ i8 A8 F3 U
mcasp->regs->PFUNC = 0; // All MCASPs
6 G, e) P: R8 \/ |' l ?# W mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 _- r6 B9 s+ @! c; Z
$ d5 Q1 m4 A! { H( \0 ^/ L1 i
mcasp->regs->DITCTL = 0x00000000; // Not used8 a5 V( j O+ ]; p4 }" t7 v
mcasp->regs->DLBCTL = 0x00000000; // Not used. X+ r/ }; S7 V& {) F$ U
mcasp->regs->AMUTE = 0x00000000; // Not used0 L$ d0 C) f/ j' `" \
) B' ?7 f0 ?9 d: J* s. K
/* Starting sections of the McASP*/6 Y% _/ U2 [9 ?2 C) v& L- `
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ P3 q& X3 K/ R, f! I6 }% z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ( V" e+ r1 X c$ [4 d; L
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 [ E- w# b' t L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 ?# i2 S* m; I# [7 `$ B
( P) _/ e" D9 {, X
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : D+ k# h5 X/ x+ T+ j% z+ Y1 E' Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 i j T9 X5 @: J mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, d- F+ g* X3 |* c7 n, L0 Q, b) e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& v. N% H7 ]* O+ y+ r
& u) m5 g* {1 m mcasp->regs->XSTAT = 0x0000ffff; 3 N1 g# `! m: d: r. }4 H, D
mcasp->regs->RSTAT = 0x0000ffff; , n* x2 J/ [) _
" t6 J) R- p! U/ _4 k) n: `4 _# @
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) C" R. D8 u+ Q" b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! ~, v2 \ r/ I! H2 x, W$ a
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' g/ c. F+ o/ w/ R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, C# q8 c/ E$ r1 X& _% u, A3 m; l
8 r- \# X6 a U3 n0 I9 Z7 x
/* Write a 0, so that no underrun occurs after releasing the state machine */
$ o. S9 v7 { g( s3 o! N mcasp->regs->XBUF5 = 0;7 l1 p5 Y, S6 U% Y/ i
mcasp->regs->RBUF0 = 0;
- ~) W6 t {$ A% c% `( F
1 n/ n' _8 k Y! ~7 h mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 k# s: T/ E* s% C7 Q7 H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 }- _: i$ u" W
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* T. I) ~3 Q7 x; Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ d4 T7 ^) G8 c8 d
' J+ i- |( p" a& A: t
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : O+ N n+ k8 k: l0 p. p' W6 [7 W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: ?2 c2 n& b# T6 P( c8 }: n, w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " }1 k/ U4 y2 m/ k' b/ {9 {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: i4 ~; ` A3 f! s1 F
; J |8 l, m; Y! K0 C CSR = 0x0000;
( _4 B+ S3 h" \ INTC_INTMUX1 = 0x3d;; ?% d+ X7 v3 T. x6 p( F
ISTP = (unsigned int)vectors;8 N3 k4 D2 M- U) F' p( [# Q, Z4 x
ICR = 0xFFF0;
$ U' I5 K6 \/ A3 a0 S IER |= 0x12; 1 l9 ]2 }" b! M; P
CSR |= 0x01; 6 u% N# O8 N: P8 \# k h
# A* U8 ^, u, ]* k9 w4 T2 _' H
7 q! Y3 D: C B( L
* ~6 {0 ~- ]/ s; m还有就是两个输入输出函数:! V/ v4 l% T2 { M0 ~
void output_sample(Int32 out_data), ]7 Y% K: x8 _, {8 i# O' j
{: O; v, _ ~ E
AIC31_data.uint = out_data;
8 c# Y9 \, T9 V( _ MCASP1_XBUF5_32BIT = AIC31_data.uint;
% \& z9 i6 M( J' A; h# b& j6 K}2 P) s. m( s/ D
4 X" o9 {4 }: @ J: t( g8 GInt32 input_sample(void)( P& |& q) j, \! P
{
) ~0 |* m( s$ ?; l2 K8 A' |; P AIC31_data.uint = MCASP1_RBUF0_32BIT;7 ^, T6 b% N6 x! v9 E. G
return (AIC31_data.uint);4 r( G4 l+ ^" O0 T% B0 {1 p
}6 A* G1 y9 C K! ]) M
6 L0 r. ~- ?) @' E Q, G |
|