|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) U' T7 F. T6 `4 e/ Q. e6 n
main文件:8 ]( O! G# q% p b: \
interrupt void interrupt4(void)
6 ~' i6 _" G2 _+ l# h{9 g' j0 x0 U* i% B# a
Uint32 sample;
! F6 n" g' z. D5 K# ?
2 K$ r' Z3 V3 q5 z sample = input_sample(); // read L + R samples from ADC! B: ~! }. a# T8 j( B6 l" G
output_sample(sample); // write L + R samples to DAC 8 N, K9 m& k! b. o- S
return;
+ A' i( M+ @' _0 W* o8 u2 O}
# q" \* g7 W+ g( Z1 g }- \/ z5 M% \# ]5 T. R% @. ^. w
int main( void ). c' b' \* u6 X6 v* I
{1 |. F' h# a) ?: A5 D
( r$ F) l% V* r( E8 T /* Initialize BSL */
* M% o) n3 [: I EVMC6747_init( );, d; A- y9 I" c8 S4 d" b3 \/ n
/* Call evmc6747_intr function */
; L3 C2 ~; c% G$ l! ` D aic3106_init( );
4 m* _' ` D9 R9 K7 o while(1);3 l. `+ }2 D' D- B# \$ O8 `
}
+ R8 @; H |0 T0 E* C7 c$ {- F5 R4 V* v4 t0 c0 P
1 p: I3 d1 x' ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 T2 F, J. [ B1 S/* Initialize MCASP1 */
1 `1 K) `; L% f9 o9 _ mcasp = &MCASP_MODULE_1;6 V8 B" Q8 q O6 b, Y; J! l
mcasp->regs->GBLCTL = 0; // Reset
9 U- n* g, h' U% L mcasp->regs->RGBLCTL = 0; // Reset RX6 H/ V& A2 n6 F- {/ Q' A7 s$ l
mcasp->regs->XGBLCTL = 0; // Reset TX, z! Y8 N: Z$ H' H" Q7 v
mcasp->regs->PWRDEMU = 1; // Free-running0 J; s+ X& l% Z
// configure McASP0 receive registers) Q9 P* O. B2 ~
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used5 R. D2 E/ Q, q5 b) H( W7 ^
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 F' d$ S3 T( O& X- O, t* |6 p mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: ]# D& g u) y3 [5 a mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( q0 }) [/ J; Q1 y5 I4 d3 \ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side), X) Z. j1 x2 d X/ q
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 B# g1 r, Y1 B+ ~. ]. k$ C. T mcasp->regs->RINTCTL = 0x00000000; // Not used
0 e! c, e/ H" _2 E mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( v3 a1 ]4 F% j; F
- ^0 i; N, D: }# G9 t; ~+ t mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used# @& d1 V( u6 H+ U) U
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 E, Z. A# S0 R! C0 i
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: Q* W' C N* \( d+ x/ v" U
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 \9 Z& ^$ X6 O! W
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 |+ D5 M' p4 `) {- Q5 q mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ J! G* A% }4 S6 O2 @- l" E; R mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit* `$ G3 ~, ^. u. i1 L1 {) t
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& } B; g+ r$ q1 |. F: ^! R2 j# Y+ }# `* w1 w* o- y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN K3 O" i# P" |8 K0 f0 t
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 y5 V9 o2 }, V7 b2 C0 l' s+ }* ~2 g
mcasp->regs->PFUNC = 0; // All MCASPs
V+ x0 G% [8 Z! V \ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: K) y& o2 e. B3 u
M. K+ X0 ^, h& R' f9 c mcasp->regs->DITCTL = 0x00000000; // Not used
- R' j' B- b9 _ ~; o @ mcasp->regs->DLBCTL = 0x00000000; // Not used
9 l2 @' [+ [: P mcasp->regs->AMUTE = 0x00000000; // Not used% {' S3 m/ y9 w C) J
% u4 w/ `" G0 I) \/ \/* Starting sections of the McASP*/+ g+ U, L7 F4 j7 I8 r
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 N% P% r" v% a. i$ C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& D x8 S! U4 S% { mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 y0 k2 X b$ D6 D1 c( [* P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 S0 c$ H* M* m/ y; }
& M9 ~+ d: o( x5 o @: ], S mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; u x- `# `4 o: h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: k" W4 E6 ~9 {7 X" ?+ i* T- t mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % z( ~0 G+ Y' R! y1 j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ G/ J& b2 E0 K2 ? q# T! l
8 U8 H6 Q! a0 L0 X mcasp->regs->XSTAT = 0x0000ffff; , Z7 K% l& l3 R |+ q9 ~8 s1 @
mcasp->regs->RSTAT = 0x0000ffff; $ V' ~7 @% x, v7 s6 l
3 A8 L& s8 i2 f' _ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 p" m8 v \. ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" s5 B5 i. v4 D4 u; f5 [ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
^/ M0 J3 a q" c9 F$ S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& }+ N2 k6 N0 l- \ m- Q; p* J' m! Y1 U2 M
/* Write a 0, so that no underrun occurs after releasing the state machine */
, K& @- p( I3 { mcasp->regs->XBUF5 = 0;
% o) S% ?+ V1 k+ r mcasp->regs->RBUF0 = 0;$ i1 q' e& a/ l2 ]; D
( y& h, S) Q( h; ?% Q% a) J mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * r0 m3 g |# T9 b( f! {% Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 c- m3 L* M+ D! T) [2 ]" b# [; v
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 e: C. E' @9 @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 S9 b: T$ h: Y2 f7 e: O L- `9 O
3 z8 c6 Q$ j S, m* [! f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. N4 }5 _6 x9 W* L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) Q! c& K4 c* y- a8 O2 Q E- a mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) D; q% |$ T" \- B2 D' R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: ~8 f2 e J! }8 k/ b. t/ U6 R0 @
+ [. @; t Y, K6 P( @1 T7 U% y+ ?) G CSR = 0x0000;
! X& z, t7 l& q5 o INTC_INTMUX1 = 0x3d;
; g8 g% A2 j) B+ {) g# D" [% l ISTP = (unsigned int)vectors;" W% T2 S" s- C% J
ICR = 0xFFF0; + O1 }& ?+ Y1 c0 d ?7 w0 u+ J6 J
IER |= 0x12; 9 {, H( u: a( C
CSR |= 0x01;
4 D: e8 r) h- S4 H
: s' t/ }* d8 ?6 U' K0 U. e0 W
# r& c0 E7 n* p; s" F0 N# M' p2 g3 H
还有就是两个输入输出函数:
8 h5 T a K+ U/ F) Gvoid output_sample(Int32 out_data)! A2 o' [ g! U1 Q2 z
{
& L. v [* {# [- S, } AIC31_data.uint = out_data;
/ e; S6 ~0 O2 [) z/ C/ S. p, r MCASP1_XBUF5_32BIT = AIC31_data.uint;
% C' e- d7 T8 I& D5 d}
& y, w; q+ F0 J7 a/ r$ Y* l# C" L% w2 X- ?: Y' ]
Int32 input_sample(void)
3 j, d* B+ v; \% v2 q6 q2 E{ , P9 H% r8 M$ Y3 P. V) R- l
AIC31_data.uint = MCASP1_RBUF0_32BIT;$ K3 r/ k( \7 H) Z0 w8 d, n
return (AIC31_data.uint);
. I, H6 x; H$ q! E}
% z) j c- x1 h& [0 N+ x6 L* V
$ \3 [6 ]5 g7 g X' O7 b M |
|