|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 y, ], n4 J/ I9 jmain文件:
: k7 e8 O5 y* l* _0 e) | pinterrupt void interrupt4(void)
3 J) F3 q5 G: I{, E$ {. E0 }$ O9 H# ]/ X; Q) k$ Z
Uint32 sample;& q6 B; `+ }6 \9 T( X
9 B% C j+ g- D
sample = input_sample(); // read L + R samples from ADC: I5 |4 P% P( C
output_sample(sample); // write L + R samples to DAC
- M3 l5 q6 ~: X' C8 q return;
5 I( ^5 H5 Z/ o# q! r/ j7 E* w o}3 ?# B" E. J9 S# R$ M
) K- t/ X! V8 b! [9 O& m! Iint main( void )- l0 I# z% N- J
{
* m5 _) L# v" f* S9 G: X6 d" F; g
' i- n9 j5 [7 t7 j4 n& x9 K" o: j; s /* Initialize BSL *// C1 o" l9 A0 H1 \
EVMC6747_init( );6 y& H: t n/ q$ Y. q0 k3 @
/* Call evmc6747_intr function */
: N5 ~: f% J. {* t1 ]/ B8 p! ]$ b aic3106_init( ); g# S/ w, g C7 z8 w
while(1);
+ o# v2 e7 F5 m4 y}
" A7 v: V. m) i l* P. o7 O) I9 Y3 A) ~" A
; b* b2 F w: ]7 a* @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 R8 Y0 s7 l8 Z
/* Initialize MCASP1 */
* e& I* r6 d G* v& x' p mcasp = &MCASP_MODULE_1;
& _& v' G; b+ n mcasp->regs->GBLCTL = 0; // Reset5 a$ V1 a K+ N- N' l, ~- N" `/ D
mcasp->regs->RGBLCTL = 0; // Reset RX( D9 c- v2 v1 O
mcasp->regs->XGBLCTL = 0; // Reset TX" W( R! o: o" e2 ?; m
mcasp->regs->PWRDEMU = 1; // Free-running
Z4 [1 i1 K4 B9 Q // configure McASP0 receive registers5 e: {/ A, K( f2 V1 l0 n& |7 }
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
1 X r# P$ n& g mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 T7 r8 S0 S0 u% _6 @" n, Q
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 C9 @4 D5 m2 v8 D8 B8 S mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 _# I2 \+ G/ h* g, V
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 S [& t! n/ @, f; l4 P' u mcasp->regs->RTDM = 0x00000003; // Slots 0,19 B2 a# ^: v A
mcasp->regs->RINTCTL = 0x00000000; // Not used
j3 m k4 m9 ]! I( c' D9 g mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- M# W+ B2 Q& T8 p
9 E* k, C/ [! h: M: C- ]4 u ] mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) i; W- Z6 Y: b% h9 ?, J- [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- n9 q8 o" z2 R! d4 m3 `( h( w
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) l6 b4 R/ H5 g2 b( Y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 ]% N' H, U$ u$ a' W mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK7 c( T1 L1 }5 a
mcasp->regs->XTDM = 0x00000003; // Slots 0,1. t& g8 C8 n/ Z) c" M
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 d6 q6 E# ]0 g& O# b) v, Q7 T# k
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 g X% V5 ^0 J, H1 `7 c
6 Z u @: D2 r$ ]: V7 L
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 a# {; j# q9 F) E- G/ D mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; B7 x$ P2 N. m
mcasp->regs->PFUNC = 0; // All MCASPs
. T/ ^' I6 q E! E& F, {& W mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 K1 o6 K! [3 f/ b
A) S5 S1 }4 h$ j mcasp->regs->DITCTL = 0x00000000; // Not used
7 t2 e# t" \. P( W0 ~ mcasp->regs->DLBCTL = 0x00000000; // Not used- |/ G0 B3 l$ |7 o. O
mcasp->regs->AMUTE = 0x00000000; // Not used
; o! c9 s+ W' t+ z% B, j4 B
0 K5 H# B, ]0 V3 b/* Starting sections of the McASP*/& g; ^4 y8 C, K8 L j
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, V" E v9 s/ W' H$ r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
n! U$ B7 s" m. F4 o mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( `9 ~* E4 b7 e" V- ?( R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; }+ E- { n$ o+ A# y: d, i
! `& X4 y$ u4 L) a3 D" t$ [/ Z
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; E3 |5 y8 v; W; n' F2 V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 y/ Z/ d! o3 R+ X, R5 F* g/ T: n
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' |. t0 u7 ]1 v) m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( _! f6 l4 q x. j: d3 U& F5 l6 ^: L6 p) x x
mcasp->regs->XSTAT = 0x0000ffff; & W& J3 v; }3 O/ G
mcasp->regs->RSTAT = 0x0000ffff; " o; k8 J& f O- i! I8 Q0 n/ p! ^6 S
: @& }/ d; f' L; \& t; w7 R ~
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 f" X. ^+ ^0 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; ^$ ?5 N8 G8 X5 E0 H* ?
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / [7 Y1 ~, M/ ~+ G* W& R9 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( l) m$ A7 R r
" C+ b4 j Q7 ^ /* Write a 0, so that no underrun occurs after releasing the state machine */
$ I" f& ^% |: E mcasp->regs->XBUF5 = 0;, j, z# G: N3 }) [" j# ~2 _
mcasp->regs->RBUF0 = 0;
, F% D7 a+ q! [* _* w5 B5 O! F$ ~8 x
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - |0 p: ]1 Y9 @# A6 i9 a+ P1 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 f8 }$ ~' T; I. P2 F6 ]
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! z! a% E" Y4 @0 Q( c* o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 |9 L9 g7 x4 F- U2 D, w
7 |) S* S4 F* V1 A1 z& g mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 @5 j8 D$ `% N4 ?' j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) E' m- O z; D. z: N
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 \ H1 s" t% {4 P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ u! o, W z% ?1 q% Z% ?( h
m; j( s2 b, E9 w
CSR = 0x0000;
* v5 q- S' W0 S. C/ F6 R INTC_INTMUX1 = 0x3d;* E* x" J# z+ T' G
ISTP = (unsigned int)vectors;4 G6 v( y! r) A6 }& [3 \
ICR = 0xFFF0; & Z$ T |4 ^5 v K% o/ q
IER |= 0x12; * s2 o: |+ r/ `! ~
CSR |= 0x01;
! h. N* S9 x# F, k# O5 P! n g0 y( w% B+ a: Z
1 q" k0 i8 _) t- k( }8 p# |. {( K4 N, v3 A1 T: Q; x
还有就是两个输入输出函数:4 p9 d4 Z& U/ y- z ?. S0 a/ C% W
void output_sample(Int32 out_data): ]& N( ]! I f8 k& R5 z
{' d( X$ s9 u c1 ^4 ]/ c5 `
AIC31_data.uint = out_data;
7 N" Y+ o" H& Z, h' L MCASP1_XBUF5_32BIT = AIC31_data.uint;
, x3 Q6 ^0 b. R: Q( r$ O, R}
3 c& ?$ [- [0 k; A) A8 C
2 _7 _* b* v TInt32 input_sample(void)9 c* o6 T6 U0 Z1 C
{ ! g7 O( s. Q. B2 o2 U: @4 `
AIC31_data.uint = MCASP1_RBUF0_32BIT;8 ` ]9 g2 z! u1 }! h
return (AIC31_data.uint);$ L. t+ r7 O4 Y
}
6 W+ x3 j5 S" I* p2 E2 o" s) J' s P5 Z/ o1 b# {( q+ m
|
|