|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ S. @6 V* y& Y! E) e- k+ ^) [% u) \main文件:$ o# I$ ]+ m" e5 C H
interrupt void interrupt4(void)
, K. g0 j2 c2 W& O{6 H: L+ \7 Z. X* ?6 h
Uint32 sample;
, ^4 W, @% m4 N5 @4 A j
4 B/ Z" U, N# D+ R3 _ sample = input_sample(); // read L + R samples from ADC
9 M1 _+ \8 ^$ D' B output_sample(sample); // write L + R samples to DAC 8 _% e3 x2 y' W5 D0 X( S$ q
return;6 q; C1 e/ ?0 q; M6 d6 o
}# A% U. }1 _' P6 h+ z* T
$ U, o% o5 N4 h/ jint main( void )+ @# g$ ]7 E) \( `* E! ~& I
{
* C7 `' m( ]% Z9 y2 A$ L' Z' P; X, P; _9 \% K
/* Initialize BSL */
1 m, A. [) S$ l# x EVMC6747_init( );# P: T: R) v+ J8 Y& }8 O
/* Call evmc6747_intr function */
3 H1 Z: R/ L. k5 b3 ? aic3106_init( );% ]6 U$ e5 C6 k$ n# ]
while(1);
/ x8 p9 J% o1 s9 z, l" N}, u5 ~7 V, Q; V0 r# R: v$ b
5 F( G( M3 k) ~* X- x% b* Y9 s7 A$ T1 @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) n. y/ Q8 w: y$ `2 M8 z f& p, a/* Initialize MCASP1 */0 e. f) h9 H" I8 w x' n- \
mcasp = &MCASP_MODULE_1;4 ]# _. V$ y* i5 ? x$ p6 e
mcasp->regs->GBLCTL = 0; // Reset
# B+ U) J, u' \( X0 c mcasp->regs->RGBLCTL = 0; // Reset RX
; t, z( ~! ]. y0 Z1 m mcasp->regs->XGBLCTL = 0; // Reset TX
* Y3 s- u1 m2 Z& o# _' E! Y7 b r mcasp->regs->PWRDEMU = 1; // Free-running
$ f4 i0 a; v* k, W5 g- a" ~4 N1 m // configure McASP0 receive registers# K- `+ e- l5 U6 e3 x
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% V$ D( I; L! v( [ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, f R1 {( N2 @7 D$ k) L mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' r) X) ~) T/ H& f o mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- } P3 r5 ~: l
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side): D. f4 B: _8 U
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 z7 e0 k( D, Z z mcasp->regs->RINTCTL = 0x00000000; // Not used# z% f$ G6 ~3 e) |9 q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) ]" F1 L+ K4 w# G1 h% c; a W9 A: {9 Y5 u F
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
" N$ n5 p7 Y3 G$ y' v+ Y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 F3 p6 R: n/ Q, ^7 k ~4 h7 B6 A0 ~
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 G6 F' S" A4 z
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& F2 u1 b' n }* T
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) D. d% x6 g- K. A) |4 F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1" r: Q4 H" o# L2 j9 y9 o9 F1 V% q( Z. B
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 w4 Q! |4 z1 W
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% ~; u" m) e. Z' A5 n/ b. m* K, T' Z
* y" h0 ^' f; o3 ?: `: a# Z4 p mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* B+ r r$ D# ^7 ~' m$ C# |! J
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! U; }& u7 e. `+ J0 h/ J" T mcasp->regs->PFUNC = 0; // All MCASPs
; h# L0 ?0 ~4 q mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' ~2 C- \8 j2 L" ^) V1 K
) N" \" }7 r& k$ X" | mcasp->regs->DITCTL = 0x00000000; // Not used6 C) c$ b. f! W: R! {. ?) [4 i
mcasp->regs->DLBCTL = 0x00000000; // Not used" a) h, G8 R% s
mcasp->regs->AMUTE = 0x00000000; // Not used8 a) X( P# {% ]) x2 W* Q+ s8 C5 z
: U. Z" M' y; S& v# k( `6 L0 W
/* Starting sections of the McASP*/
9 B1 {" J9 p Y$ ~0 h N y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 g- I, a7 {4 M' k( X, x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ U- w; V K. ^. u mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" s& e5 R' ~/ I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, W7 y( [/ W u7 a9 q# E& ~, i6 j' `( _6 h9 e% d
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) I( z) }5 H( [1 ~6 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 p0 `7 ?& E z& e$ n mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! P2 N& e& ?1 V6 K/ Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 d9 k# ~6 K' f% u$ T3 ]" G7 {' }1 g) f" M0 O# D# r
mcasp->regs->XSTAT = 0x0000ffff; 3 r- q) J% ^. C- Z
mcasp->regs->RSTAT = 0x0000ffff; ) r: h( R' e" S, \. B
; s/ J2 s2 Z& S: y$ z0 F4 a1 V
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) p d# k8 ?* o( ?1 t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 [. Z9 O( L! h% p' V" t$ A+ W
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! W: S; G1 O0 K& x R$ N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# a8 [4 x- B! p& c9 H" N
; o N) M; F% ^2 X& _3 S {) e /* Write a 0, so that no underrun occurs after releasing the state machine */. M1 j9 n% w7 R
mcasp->regs->XBUF5 = 0;
5 }+ Y; u0 r2 F; ^4 y8 ^ mcasp->regs->RBUF0 = 0;
2 T' C9 A' Y4 m8 [2 R" q- R5 I7 z- P. N- A
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + W- t2 o# B* U$ L5 k* ]% H, U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 V$ v3 ?7 f0 B8 s8 J" T mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 h0 U: h h! v! `+ ^- z5 k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% Q' ^! q+ ^* r# B; f; s0 w- K
: _( k# C+ U" M+ y5 s mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # V1 @+ w3 Y- ]! Z! F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. `/ K H. Q/ z7 t mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 Q$ H. X8 o/ `" V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 ]- r1 U) j2 u- R* E1 A7 l1 D1 F- W2 B
' A" T% |& L" q" g z( ]2 `' [ CSR = 0x0000;
9 Z# D# Q; w! e5 e( _$ J- u INTC_INTMUX1 = 0x3d;1 L" e; r; g. }' o
ISTP = (unsigned int)vectors;
5 u: P+ t6 u3 w Z8 ? t5 p0 W* A f ICR = 0xFFF0; ' n; I# ?% {* r" y, _1 K
IER |= 0x12; ) `) z) v! k% p% B- T2 A9 _/ B [
CSR |= 0x01;
; U8 H$ f* d+ N1 ^+ o8 V3 E u( C! |0 E @) b& K$ p
, H' {9 _! X, _( J# ?0 E
4 @; Q0 o: K4 [ |% I O4 O还有就是两个输入输出函数:5 P( _, H0 Q( i3 x
void output_sample(Int32 out_data)- f9 B1 V. Y9 x1 X4 @$ C
{3 Q4 N1 k4 t3 H7 w" G. b) f0 `, D
AIC31_data.uint = out_data; O" p, u1 w) S6 e% C
MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 S2 \9 k g6 ~; |% R e& ~}
9 Z+ t6 X1 _7 S! y* H+ x& v7 S# s- x0 M1 E
Int32 input_sample(void)5 H/ ]$ a1 R) w8 J
{
; u* b8 J4 G1 `: e AIC31_data.uint = MCASP1_RBUF0_32BIT;3 G6 ^) {( h _ V% \
return (AIC31_data.uint);
4 G! N% l ?) Z4 I& F0 v u}7 S; B; c* n) t$ ^0 A3 u" p: K
7 L/ Z0 O( q" z4 K |
|