|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 G! V2 K& d1 \7 }
main文件:1 W7 S/ J" Q6 X$ {) ~& ]$ r3 `4 a: n
interrupt void interrupt4(void) , \3 C; C: {3 ^; y1 w7 a
{( y/ e8 `" l: i
Uint32 sample;
4 E: S/ }+ B6 T2 S3 j2 k$ ~
) T. ^" b- y9 \% r; k; C( m: a" o sample = input_sample(); // read L + R samples from ADC4 H/ V' y* s, m! p: Y7 ^$ g- Y( L
output_sample(sample); // write L + R samples to DAC . l3 l J G7 [) T+ g
return;
6 d( k* p3 k* |* T$ m. k3 M$ U}
3 j1 V& }% V6 s6 a& c
% M) q+ C3 v+ B$ Y2 h% D' |int main( void )' \; ?# B! z$ A
{
; M, M7 c _6 H0 p- E
/ u/ T k: c- I( u. Z; n) b. p /* Initialize BSL */- K, [9 y2 w @2 l4 y/ e) C
EVMC6747_init( );# f- ]4 t7 f @- W
/* Call evmc6747_intr function */ Z" r0 Y& w3 T& ~4 `1 c5 B8 o
aic3106_init( );+ r/ h3 h$ K6 ^! O6 p6 n% ]; i9 Q8 j
while(1);
9 ^' V, b1 s: r% n1 \0 R& d; ~}. I( e/ P! _1 l" G. e
2 H8 Y9 P' O' V. b2 g. w* E$ k2 j
) `) V" [7 y( {- H9 G4 q6 o9 Naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 N5 R0 H) ^3 z" {4 m3 b8 ?# r v' a/* Initialize MCASP1 */5 v. w! z0 Y3 J7 g; y" S
mcasp = &MCASP_MODULE_1;
/ J/ O8 M- _3 @5 w mcasp->regs->GBLCTL = 0; // Reset3 _' ? u% D% c3 R5 ^/ h. `3 V) ?/ ~
mcasp->regs->RGBLCTL = 0; // Reset RX
9 Z' E) K1 V4 R* a mcasp->regs->XGBLCTL = 0; // Reset TX, A( }7 D4 P3 s7 `4 ^+ X' T1 ^+ G6 m
mcasp->regs->PWRDEMU = 1; // Free-running
; R" Y4 a- f1 ^% c // configure McASP0 receive registers
2 |+ m! B: N# d1 E: S% f2 f- B: w' _ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' B% N% r& m P
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ R8 s1 z1 w6 ]+ p @3 S
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 ?/ {1 e, P+ X
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 E' ]; w K2 C& {3 H% P mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)7 D/ q8 j* Q4 B' R4 p2 `/ e1 U
mcasp->regs->RTDM = 0x00000003; // Slots 0,12 J" z& `, c- ]( [( U
mcasp->regs->RINTCTL = 0x00000000; // Not used
4 g7 Y: Q5 j' }2 s& [ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* n4 m3 w0 u: u6 G8 [) u$ @+ B2 V) D. K1 _, ]! U
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
N l+ |9 _$ @ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 O& ?. ~3 M$ Q2 k7 F
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; X) k# Y. v8 G, d mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 @& N+ J& Y" ]/ ~ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& N# J2 @: |/ J7 f mcasp->regs->XTDM = 0x00000003; // Slots 0,1! A6 A6 X8 T j' i! z, t7 x- Z
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit0 c7 N" S. Q+ b q0 f
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 w$ i3 A; S) X0 r$ X) d% f
: J) Q! D' m1 n9 A. z mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: Q! S% ^* m, n1 B, C% w0 k. ` T4 J. \ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) ?0 W+ v. _2 q1 V/ _
mcasp->regs->PFUNC = 0; // All MCASPs; o, U9 b; }/ W* k" C
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" q7 d8 E; I/ t. e" v3 ?# J& \* u3 [; X: D% S7 P" L
mcasp->regs->DITCTL = 0x00000000; // Not used
: Z) t+ P [% E mcasp->regs->DLBCTL = 0x00000000; // Not used w* e, w4 g5 G( y' Q
mcasp->regs->AMUTE = 0x00000000; // Not used
& S; R. `3 S! I6 c
8 V, ?1 v _/ ~, h/* Starting sections of the McASP*/+ c: o/ R5 O/ k! y: ~: v
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: C; s& n; }& M9 Y' Q1 G- B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- [0 ^& T( d$ n3 {; p3 A; t mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - T" Y6 I5 \1 H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 D, H4 Z3 l' {+ p) @
) z) B" A7 v) Y+ T1 O mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 l+ t+ V4 m) j4 C( |( X' W3 V3 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 M6 H+ F Y+ x0 @: m9 b. N
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 B4 H* b; ?" z. _7 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 ^# a7 x! M$ ]7 O' t! ? ?( j7 x/ P4 T8 k- S& ^" O# f! R
mcasp->regs->XSTAT = 0x0000ffff; ' `3 H* W9 p3 L4 A0 y% V
mcasp->regs->RSTAT = 0x0000ffff; . \) M$ \% \# b* c+ ~2 T6 v0 v
3 o# X4 m& t* _& e" D! e& } mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 C. C6 p' \/ D+ W* h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- ~3 r3 g. q. U" I mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " i: E! q9 ]( O& E; j- y3 R7 G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 G) q; J% e! Y( i2 `
2 z$ l, b) g, A9 ]4 c! i5 t! c2 [
/* Write a 0, so that no underrun occurs after releasing the state machine */
* n2 m* Y! T0 g8 A1 t& ? mcasp->regs->XBUF5 = 0;% F4 u$ {( B7 E. h" T7 \4 F+ Q0 m/ y
mcasp->regs->RBUF0 = 0;0 I, L) f" e5 A7 c
6 q8 Y. N/ I( ~1 N( e! }# V
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 R$ E$ [: k* l: K9 N6 H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 Z% h: b& s2 M6 A @# m
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 x% W. T! W" b8 d( \9 Q# z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 f" M4 U5 [1 z7 F1 }$ C1 i' N, e: |! \) n9 L9 m$ L/ \7 v: X& ^
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! p9 n: r% A8 |, V! V4 g7 I3 a5 N# r+ O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 g5 l( f- }( E( J/ Z5 Z- m
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 F8 N0 I ]3 k: a, x# g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ G" j; x2 T2 A- X7 U T2 a# }' I
. Q0 V% E1 S# E7 I, {7 s; N4 T, A
CSR = 0x0000;- P4 t" O8 S3 H" N
INTC_INTMUX1 = 0x3d;& _+ @% W! t6 ^" D* U
ISTP = (unsigned int)vectors;4 h5 c0 U9 ]5 v8 M1 ]8 ^& |
ICR = 0xFFF0;
- U8 p, m, x7 W" z IER |= 0x12; ! J$ c5 f& Z1 S1 [7 W
CSR |= 0x01; ) s6 x6 E! R V7 q1 x" O
# T0 s8 v3 p1 }' G6 @
- q0 l8 `: V, M y0 Q) }# C. N. _: p# k3 _0 z; ] m' N, z
还有就是两个输入输出函数:9 x, s) D$ A' d' _: z8 m
void output_sample(Int32 out_data)
I! G7 l0 ^, L+ Q; y6 I{
8 T2 s) a- c8 P: R AIC31_data.uint = out_data; 8 q, p8 T8 n" H' o8 j
MCASP1_XBUF5_32BIT = AIC31_data.uint;9 c- Q0 O5 c4 Y, _5 I
}
) E% Z/ T, S Z/ d4 F+ t0 `! V8 X* C3 x: N% b8 \
Int32 input_sample(void)9 f) x. s* f& p2 r; U( M" h% j
{
' y: v( D1 s" E) O AIC31_data.uint = MCASP1_RBUF0_32BIT;8 V9 f* b) x2 K! P4 w
return (AIC31_data.uint);9 n9 {- e! |' |
}
1 X Q% p* C6 V4 X/ M
% h9 L9 k& r+ x* N9 b8 d" k+ D |
|