|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 h/ r! p2 l: ?. | h4 M, T! v5 Ymain文件:
: S+ f. ~- L" ]& ~( Y3 S- c- Qinterrupt void interrupt4(void) ; y& l$ M1 k9 Y& o3 A
{. ~- z, _ }& @ U3 ?) B% Z
Uint32 sample;0 C1 J1 F4 X0 u
4 x3 z! }0 n7 c9 { t sample = input_sample(); // read L + R samples from ADC
0 }; N' P' x9 v output_sample(sample); // write L + R samples to DAC
0 k' L0 ^$ p& D f return;
. U; Y* c A# i" X}
7 F' e( i# I, p% F/ e5 X1 o/ _4 ~" g% A; A' ?
int main( void )# O* N4 _) H, |0 ^4 i8 j) |
{
3 q% Y6 Y1 T6 M' J! i0 [7 v5 y
; f% E* |2 H5 A' y: C /* Initialize BSL */
4 |8 ^4 X% b, h' u EVMC6747_init( );# ?2 {5 m' y! s) v/ f$ h+ k/ v6 R
/* Call evmc6747_intr function */7 L \4 X- G5 I5 }( a- B
aic3106_init( );9 l& C! U3 J2 W! Q& `9 V
while(1);
7 ?5 N* Y5 H2 [! r6 g3 L$ T}
: [8 W7 T! U* o0 L/ e4 L/ ?1 W) u
) r" s6 g, ?) w( `- z
l! J# ~. v% ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ m; K" b3 c0 @8 _6 d7 u/* Initialize MCASP1 */; W# Y' N |5 Y. M- h
mcasp = &MCASP_MODULE_1;/ Q T" c( _6 ]
mcasp->regs->GBLCTL = 0; // Reset
2 u5 S, }4 Z; F6 g& u% z, g, K, Y mcasp->regs->RGBLCTL = 0; // Reset RX B9 p1 W5 z% J) Q1 H$ F
mcasp->regs->XGBLCTL = 0; // Reset TX
7 W7 p8 [# P; X4 p6 ` mcasp->regs->PWRDEMU = 1; // Free-running, n$ o0 P- H5 Q6 _
// configure McASP0 receive registers
( s G9 B5 d8 g4 M9 X5 s7 ^ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, E6 {) C# ~" l' Y; W9 p: T mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 t2 s9 y/ D4 n+ o' N3 `9 n8 o: |0 Z
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ s% _& ?! m2 L! b: S mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 w, |7 O5 q- m9 D mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' [- M. ?; ^5 ^: M& _7 p2 E8 b2 c# J
mcasp->regs->RTDM = 0x00000003; // Slots 0,1* R9 D& B* {& M1 ]
mcasp->regs->RINTCTL = 0x00000000; // Not used4 C# }7 u" H' b( `4 U
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& z4 l: [$ M& R8 I7 h4 ?
+ q7 k% A; k# u. Q mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 [' Y& G3 J! W( L
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 B I. U* O( [& v mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 G2 s& J8 v8 t
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. S0 v9 g: M) Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 Y/ ?$ p+ d7 G: w
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 c, I0 B# a6 s9 x7 z' c mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 S% o k! p/ B {
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ l2 ^& U) K5 a" w/ r2 ^1 p8 X% C
$ A* a- d) [" V7 o0 \5 y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" ?) E* Z: B$ W& O, j5 a! a% e mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 q2 s+ W6 j" X& M2 s. Q: [
mcasp->regs->PFUNC = 0; // All MCASPs
! R1 T3 Y* z1 ]# D1 E1 X mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 F( a: Y4 V l( ?+ m2 G- a. |/ d* g' j4 M$ b1 I% M( K
mcasp->regs->DITCTL = 0x00000000; // Not used) j- b! B2 ?/ F% L3 j, D- G! Y- p0 @
mcasp->regs->DLBCTL = 0x00000000; // Not used+ t7 L# M& @$ s
mcasp->regs->AMUTE = 0x00000000; // Not used
* ]+ O0 f3 _# H' V8 o+ U0 z8 K _0 X) M+ g8 V3 r
/* Starting sections of the McASP*/
7 e1 o5 d# y. N2 `* H mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 E# G1 \; D7 g$ c2 i( | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
g7 z3 ?$ h/ f( H; Y. Z& a mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% V6 q* }7 |" B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: @; }4 @$ L2 U; \; h& ^
* q- D4 P6 l7 C mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 R1 I, T6 D9 {+ o: Q, q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) l1 R2 N- u$ w7 M, Y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- G% l" a. s/ _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ S% j( |. ]. N- {
" g' O3 b$ ~7 d; s1 Y0 m; A3 M
mcasp->regs->XSTAT = 0x0000ffff;
) o, S) H7 S# s1 [9 y7 e: n7 T mcasp->regs->RSTAT = 0x0000ffff; 3 G. B& J, Q: k+ N P* `( Q. S' r
8 N: i# A Z9 W. H mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 x" x) X* u# N1 j: p3 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' u6 M5 g7 a9 _( A7 j( A$ ^1 } mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* u9 P4 B8 p6 n; v9 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 c* J% ~ F2 r% `$ @8 n) c. v
: u* ]1 J5 S4 f& x& [: G3 ` /* Write a 0, so that no underrun occurs after releasing the state machine */ V1 [! m" P% b' r, H
mcasp->regs->XBUF5 = 0;, T& G9 p0 Y5 w0 @- F' |
mcasp->regs->RBUF0 = 0;
& i* `5 i+ U2 K/ T$ z/ V+ G- w! U- h5 }' t* K( ~3 b) b$ u( p" j- J
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% p. @4 I2 e+ n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& T; i% Z6 R# x: `5 u- ~ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; K+ i- s& K5 k D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# a3 s% C ^ a* s3 h% t; V+ l0 a4 i3 Y' T0 L4 t0 C. `
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 k# `/ {( M2 B& K5 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! J) ]' H8 l# j+ S8 U
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ Y6 Y! H1 w2 ?! r7 Q/ Y" {+ J! l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ x& B7 t% N0 ~, Z, E8 K9 E9 S- I5 h, ^. I
CSR = 0x0000;, Y/ _5 }$ @0 H& H/ u
INTC_INTMUX1 = 0x3d;. ?7 m" j) T# R3 D6 n2 f$ f
ISTP = (unsigned int)vectors;
% A+ _+ i: u- m/ D$ v1 W' x ICR = 0xFFF0;
" J- z8 N- U) O) n" Q IER |= 0x12; 2 a- {' {2 G2 F9 Z) k! u
CSR |= 0x01; ( U% u3 J* A2 m9 m- m, f- j( v m
, e/ k4 D0 J* x+ S, A$ ~* q5 G8 k0 o) ~- c( j
) o8 O. C) r$ U5 n! H; ^# o/ k
还有就是两个输入输出函数:2 [) G( H2 W) [ j3 {
void output_sample(Int32 out_data)
& e. Q6 R% q1 b( e$ B" e" b u{
" s2 b" I% Z: ]; R AIC31_data.uint = out_data;
8 I( d* a) j2 y @& \, U% W MCASP1_XBUF5_32BIT = AIC31_data.uint;
( e1 ]5 q/ r" J( M) u2 e3 _$ g}
6 y# _1 T' T7 C% s" S, m! |' Y( F
Int32 input_sample(void)
& e4 K5 s+ h. q- X/ a V{
2 Q( g9 w/ L3 e$ r, z! L0 U; w AIC31_data.uint = MCASP1_RBUF0_32BIT;! `, c% q# j) V- j6 i! {
return (AIC31_data.uint);4 R: p! s8 L# Z" E8 U4 \7 q& h: @
}
5 }+ p+ U, s0 a: {, G! ]/ o9 B& T; T+ d* y1 P
|
|