|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 I5 Z( D& x9 U8 `0 Z/ _main文件:
9 W( c% t) C% uinterrupt void interrupt4(void)
9 I) q5 s3 Q' l' B3 i& M{5 N. \# {' i, e8 H; e1 z9 ]& q# w
Uint32 sample;
& O+ X6 w; I) e
+ H. O/ Z8 J8 f0 y" i sample = input_sample(); // read L + R samples from ADC
+ v5 }9 {7 P+ D2 R! i. c* L& x output_sample(sample); // write L + R samples to DAC
4 w& D& `/ R) E! S/ d8 L return;- l' F+ g4 W) e7 G1 y( v
}4 Z' R A8 E7 Z1 l; @
* j# P2 t$ g8 O7 wint main( void )
8 Q2 T, Z Q% ^$ t9 S7 l{
; @2 F' K; U* {& V5 x$ z
& l' o- T5 ~9 r: m+ ] /* Initialize BSL */
7 w! z9 x" L7 M/ F/ ~7 u, d' t EVMC6747_init( );
1 R' h' a" c S /* Call evmc6747_intr function */$ Q, W6 |/ y) \1 y, _% ]6 u* G# a/ a
aic3106_init( );1 C4 o5 Z# k5 C8 n$ K. D
while(1);+ E) F& _9 H/ L" e) p: x3 S
}
! Z- U: d$ {0 G" Z; \' F U) L9 r, \+ x
) [- z: \- I* U8 F! J; J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' q, {: I2 I; F5 K3 u7 q5 o/* Initialize MCASP1 */0 h2 x2 }4 C/ I; Q. }+ X
mcasp = &MCASP_MODULE_1;3 i% e, ]! `5 ^, x
mcasp->regs->GBLCTL = 0; // Reset
I& I! Z3 n2 O, {0 A mcasp->regs->RGBLCTL = 0; // Reset RX6 x& b- a- }. ` ^. x& L
mcasp->regs->XGBLCTL = 0; // Reset TX0 K. w$ O7 C5 W: F9 j# F; c' @
mcasp->regs->PWRDEMU = 1; // Free-running
# \: P. {6 |9 ~& y; t- U% {0 z // configure McASP0 receive registers# K% z$ u% f) K
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 I9 J# ]. {1 x" _% G
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 O4 P2 I$ r9 Q! W4 ~ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 M% T7 Z. a$ C# k5 W7 f1 R
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ D" b- e$ V4 P6 m) v O! ?7 ^
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
* s# m/ P4 B5 ?% r' F3 c& w mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ m4 X' u2 D( ^; R! j mcasp->regs->RINTCTL = 0x00000000; // Not used
: `& T& R5 e: S* {) l. A; {# @( @ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" U" \& ~; Z' _/ n1 F, y. M$ S
3 q3 t; `1 v1 u! e% H
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* }( C$ ^1 y) i mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus Z- z: [0 ?2 M. X
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 T; s& x' k% p. o g$ p mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ z. j% L; \: h6 ?) }
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 D9 Z$ B/ N5 @& J* s mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) h6 Z( {" R8 W6 j1 n mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit o+ b2 q% g6 r# a: n
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 z. W4 b# l- w
+ K# g! {% ]3 @& p) `( x. P
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN7 N5 G: _) |# |
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' U3 A, D! e+ ~. M* U
mcasp->regs->PFUNC = 0; // All MCASPs3 H* e" a' F( j2 f/ V2 @0 L# L
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ L. r1 }5 b5 V+ ]
$ J9 F. }) y8 k3 u mcasp->regs->DITCTL = 0x00000000; // Not used: _: l) K1 N; H v8 _8 P
mcasp->regs->DLBCTL = 0x00000000; // Not used' H6 l3 V5 K4 @$ A
mcasp->regs->AMUTE = 0x00000000; // Not used! K) c. m, i& p" H# B( @; D
S8 r% s$ [/ K2 v# R4 |/* Starting sections of the McASP*/) L, i- h( b. s4 F! y* A
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 z/ f7 s: u) W% D9 y9 K9 W% z& X; c! g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
. ~8 i3 r5 i, {, d mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 ^" X. a# e) }6 f c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 L& n1 { }& J$ p* D8 Q1 P, N& y$ ?. A! U2 I. G& h" R
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 A1 v) \2 o. Q. J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 R8 V; S0 R+ r) @8 L- _8 d) i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / O$ N- t5 F9 l3 v8 L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% l* c6 E* |/ H% g6 Q' X
' L# X0 f. J2 S4 P; _0 U mcasp->regs->XSTAT = 0x0000ffff; + F5 U4 D d' [% V
mcasp->regs->RSTAT = 0x0000ffff;
- v) v+ w+ ?* t( E9 x$ U" {
' \8 Z$ p2 a5 Q8 c5 e9 c; s mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 Y) H2 |7 V" {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: \ D3 F E% U5 w3 J$ o; ^
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; g( S3 E6 G3 Q: f) w% `: [( a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- u7 A! F5 X* q6 d E
g v5 K- j% K3 K4 c0 J: Q /* Write a 0, so that no underrun occurs after releasing the state machine */
9 D8 t( @. [; S0 c* P- [4 K mcasp->regs->XBUF5 = 0;
& l! I) s4 D$ b% _$ e9 O( |- z/ A mcasp->regs->RBUF0 = 0;7 c+ K e T, K; ^
+ k& h7 V5 {& v" {7 v mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- G5 K7 v! n% p/ Y9 B i1 S! w% r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 Z+ K0 n- F* o# y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 n F5 J4 m) n6 e: d; V i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 T5 C7 P8 y5 x7 d! N- j8 G! e# V) L4 K0 X L
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 u% Q6 X6 A G. @+ z# { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ ]8 @, h' k1 w8 o mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 o( { e; M2 s3 {5 }9 h& c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ T7 q" k9 u# g. M2 B$ Q \2 m; _ Z( W& y' k+ B6 _
CSR = 0x0000;8 g) ~& c) q" C$ y! ]
INTC_INTMUX1 = 0x3d;6 B$ d. G* S' Z4 { B$ N; Y
ISTP = (unsigned int)vectors;
! W/ V) G* }% ^3 y. D5 d* E ICR = 0xFFF0;
; J: S7 @5 Y( @ } IER |= 0x12; ' b! Z- s* Y5 \$ e1 g0 e5 @
CSR |= 0x01; , _* S0 ~- N0 `2 y! C7 S
6 x3 R1 g9 h W0 P4 h
7 L* u& K- o% B, m! O1 }
/ m! n% L9 o2 J8 h3 l- Y/ n: {还有就是两个输入输出函数:+ H/ K1 p" t4 R' y
void output_sample(Int32 out_data)
* ]0 y3 c0 Q" N' A: }{
* q. A, }( s6 ~/ y AIC31_data.uint = out_data; - `# Y% ]4 B% L1 f6 R
MCASP1_XBUF5_32BIT = AIC31_data.uint;0 a0 K9 H8 }2 N, x7 z, U1 _4 I+ m
}
0 Q( I( i% d8 j4 E6 \% m3 y: V0 p9 z+ ^: F
Int32 input_sample(void)
; I1 m" `, H6 _. k, p, N. W* R6 `{
- q) D, ~& O& k- P' m2 g AIC31_data.uint = MCASP1_RBUF0_32BIT;; ?/ c1 O. }0 O" X% D
return (AIC31_data.uint);
6 f8 x( O% ?( p9 b8 X6 a- z6 ]}, l( y4 p {! [/ X/ I; \
4 B* t+ @: s0 |7 L# n |
|