|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) |$ }* r' _1 H, W7 r' V
main文件:+ w7 f. F7 x3 Z# d% K* `
interrupt void interrupt4(void)
; n }7 B- j7 X; A: K{
- C3 L, W x. n" q1 H Uint32 sample;
" k* E5 ~( |! L9 B$ @1 ^( x* i% o, l1 ^; {
sample = input_sample(); // read L + R samples from ADC
5 n( ]" H- y: ^0 \3 i$ P output_sample(sample); // write L + R samples to DAC
/ N# R H1 l. |5 j return;6 L" G/ c7 N( C
}
0 f% z$ b! V* m$ ]- n7 `1 e
' s( D* V; [, C$ q; d- Gint main( void )1 r" E6 h0 @ b2 K
{5 j# S3 }' c, B4 N0 [- u/ M
5 ?4 P4 ?2 C N
/* Initialize BSL */
6 ^" z, M3 C( A) q: u W! @ EVMC6747_init( );% k+ G0 v2 S8 `" E
/* Call evmc6747_intr function */' B9 G4 @1 u/ x$ g8 H5 m9 r
aic3106_init( );
. `. v; X& a0 u. k while(1); \/ u1 `9 N I1 r
}4 n) K9 O2 _# H
; `, B. q5 g# _ I9 G( }) v% O& ?5 s6 e. i6 O$ A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: g, T. u3 f# A- P$ Z+ m/* Initialize MCASP1 */
4 r3 g" U- e9 C; I mcasp = &MCASP_MODULE_1;3 q3 M5 q6 H9 e
mcasp->regs->GBLCTL = 0; // Reset8 @9 f# [' p5 X
mcasp->regs->RGBLCTL = 0; // Reset RX! U K; O4 W$ R6 c( F2 T. l' m
mcasp->regs->XGBLCTL = 0; // Reset TX; I6 D6 y: r5 N ^) N
mcasp->regs->PWRDEMU = 1; // Free-running' g v1 \5 y0 O* b
// configure McASP0 receive registers
( I' y! g- R$ U; W) t i; [" C% {5 Y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' b0 [6 v. O# b0 e' H/ _
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% r9 `4 H! S4 J: ]! X mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 C0 f5 m. ~1 m4 h) L0 [
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 e1 n8 a( O \* _2 B
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side), ^. D) }( H) y4 U' j* k0 c
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 B! h) Q0 `6 p1 @1 O mcasp->regs->RINTCTL = 0x00000000; // Not used! u2 O5 r6 G7 H: H7 e
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% a9 k. [* D$ j
9 x/ P* J( X2 n4 i
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 o% A0 d6 O; g; r0 X
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" C- K" \4 V U4 D) o* O0 x1 i# C' f mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) K3 r1 O: w; A3 j( W0 m mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ `( ?+ k+ I2 l' j0 A2 g6 V6 k mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
3 v$ }4 c) R; x( x0 y8 F: r! k mcasp->regs->XTDM = 0x00000003; // Slots 0,1! U. c- T" y8 D5 A! \
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& [, J2 p7 J- c2 R; L C; ]
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 m9 ^/ h( u, n e7 l. v, h
, L5 u+ e6 ]: C0 x0 l/ l/ g3 j mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
, t& _! @ {1 m7 U3 }; E4 T mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 Y9 ]' O3 b" x
mcasp->regs->PFUNC = 0; // All MCASPs; ~8 h) T+ @2 Y, y: B
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ E% r! @3 s, ?+ I5 ^7 K5 n
7 Z1 ^% i. i3 D. ?8 }/ r mcasp->regs->DITCTL = 0x00000000; // Not used
6 ~6 f! q8 k: f( p2 {' c mcasp->regs->DLBCTL = 0x00000000; // Not used! `& P6 T A6 t1 l4 Y! B+ Z# E! L" E
mcasp->regs->AMUTE = 0x00000000; // Not used, M, n# s" x1 g0 `$ z8 L/ f' P+ L
# ?3 J) i% G# f; Z3 g/ y# S0 B/ u9 z/* Starting sections of the McASP*/
* E' V7 W9 p6 i9 _ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ E9 u! ]3 X$ V* q( ^: j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 g! c: Q/ ?9 ? mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; }! B/ x' V5 h% z! A) `4 o) i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! `- n$ N" [; K, k! F N8 ^7 D3 ?! ^% O- R% ?# y
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # U0 k' F" ^' Z5 c5 J# f5 \. ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 t! z2 e' C2 E A9 [
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . N9 D) \ k( |, @6 w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 s7 Y+ s6 d. f( V
0 F- f1 m e, O& c& M; W mcasp->regs->XSTAT = 0x0000ffff;
9 U5 U& j S" w, H& {' [ mcasp->regs->RSTAT = 0x0000ffff;
, n# X/ [# y- b! r n0 K: w0 t! I# @- d
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' }' ^9 n: o2 ~1 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! p" G. b% S& n2 N/ s mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - G# b" O2 |: v! {; Q/ k; q$ M1 V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" Q, i0 I2 _5 d4 f" S9 B' ~
3 N; I4 o/ y6 t# E) i
/* Write a 0, so that no underrun occurs after releasing the state machine */! l) Q/ Q8 `0 E1 R; i+ _" ]2 F W
mcasp->regs->XBUF5 = 0;9 P+ X1 N* h* L6 l! |1 Y8 Q
mcasp->regs->RBUF0 = 0;1 Z/ F {0 D9 s, r0 z
9 d/ N* j3 s4 V( k0 |8 o8 e6 `! B mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 x/ N% r8 i8 @" t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 L6 i# `5 h$ a" |; _
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 W/ e% H, W% C9 E) T4 v* V- b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& x% B: d4 d) u) X. I$ }. |1 _
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! y. g2 o3 H' M# {7 V6 W7 m) K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 K# G: l2 Q+ N6 ^( U# p mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' g, I# \/ I9 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. t6 L" v; t% W/ I4 Q( Z0 i& A$ I4 H: \0 {& L1 F0 |
CSR = 0x0000;7 w+ x+ i7 E0 _
INTC_INTMUX1 = 0x3d;/ N" X. \+ b* Y4 }- C5 e- F! [" [2 B
ISTP = (unsigned int)vectors;
; m/ J( K; N2 H! Y P ICR = 0xFFF0;
( W$ ]( ?2 g" O- g' W& d( m5 a IER |= 0x12; o; L: y% V( R( G# _+ O" N& c
CSR |= 0x01; . i7 w) R0 _2 z2 R
0 K( f% ^* y2 c, g& H% K: c Z; C1 ^! E' u) e+ E: ?
- p/ Z/ C$ s7 c3 p; V/ A还有就是两个输入输出函数:; @, C) w; N' v v5 U) `
void output_sample(Int32 out_data)1 b% j( s8 x4 n, l! |! p+ u& m5 }
{+ `- Y, J Q1 v: [) K
AIC31_data.uint = out_data; 0 T/ b( t( U! H. G
MCASP1_XBUF5_32BIT = AIC31_data.uint;5 n' h' @' W* n" e
}' ~* f- l# U: L$ M
+ I9 O: }5 A! V. S8 R* c% K
Int32 input_sample(void)
2 |3 ^" W/ T/ H/ K7 k. P5 E{ 8 ]! `- P4 r/ u/ A @
AIC31_data.uint = MCASP1_RBUF0_32BIT;' n/ H/ f% w7 g
return (AIC31_data.uint); P. Q5 x( R0 Z
}
: s6 ?3 T ]. m" _6 I
' W4 W7 X0 a3 w" B/ y# e/ ? |
|