|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 U/ c# d3 W8 [9 n3 F3 }2 ?: Hmain文件:; I8 F" Q- w1 k; ^7 h
interrupt void interrupt4(void)
) I+ z l, W, K4 T% O1 C{6 ]# V4 y- Z# [6 k3 c
Uint32 sample;) y% D4 k, G2 m4 p
6 R1 A7 m5 I9 C7 x3 i: F
sample = input_sample(); // read L + R samples from ADC
" V, S7 h* `9 S Z4 h2 A0 Q+ U output_sample(sample); // write L + R samples to DAC 2 v& ^) E3 m0 J4 J1 }9 a$ z
return;
+ W5 ^2 H9 C3 Z}$ l, |$ ^* g, K8 r6 x1 s* R
3 }2 d# x$ L* G- \6 Tint main( void )5 r$ q2 V U8 Y- T! D- R
{
) }( f- U+ Q" [3 F; C8 @% r
- z" Q7 b) b# Y! T+ n% t# E /* Initialize BSL */
, i$ R! m4 p" V3 C* D, C EVMC6747_init( );- }+ s: ~( F- C. y3 D
/* Call evmc6747_intr function */* f& B: [1 K0 i0 L1 Q4 O6 U; O
aic3106_init( );. b$ E& h; f& h# N- S
while(1);
) k6 ]5 |( B- t, B! L}
; n1 q: d# x8 ?4 k5 f% J* r. n5 Y4 `: o! J. r" D. c
: d7 T3 k4 A4 P z2 Z6 O* A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 g0 E; _ q, D! |$ F( i$ P/* Initialize MCASP1 *// v U6 w v. {% \
mcasp = &MCASP_MODULE_1;
6 ?# k: A: k8 w: z7 u mcasp->regs->GBLCTL = 0; // Reset8 [6 v* [3 j5 G* e! q# s
mcasp->regs->RGBLCTL = 0; // Reset RX1 y$ U% Z3 P8 J8 r k- i
mcasp->regs->XGBLCTL = 0; // Reset TX# N) ~' K/ m" s$ B7 e) c3 I
mcasp->regs->PWRDEMU = 1; // Free-running
) r8 w" G" |( L/ e. \: b // configure McASP0 receive registers
& ~" f. \+ \# b c* i! ~ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used2 Q h2 A8 ~' l* L1 I% |
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 Q% a& k% y% d( }0 U mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word, X. z2 B2 E/ x$ d* v5 `( o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: M7 M5 O; v+ k X mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side), m M2 W6 M: q4 R. z
mcasp->regs->RTDM = 0x00000003; // Slots 0,1% k) ?6 r' r: ~& s& v
mcasp->regs->RINTCTL = 0x00000000; // Not used7 |6 @9 |5 T* Y L/ s Q1 p
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( F7 v `7 s) k% F# t% O
" d: N0 l/ ~1 E* t mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 {; O9 A7 o* c; s3 f1 V
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 K& d, W* L4 L7 M! W# l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 h2 d& l3 }" ]2 ?# F/ n mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ Y; \# n- c% w' B7 L
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 N% c6 \) g: a3 W; G
mcasp->regs->XTDM = 0x00000003; // Slots 0,1& J: G2 T! m- M5 o* ]: q+ W5 R2 }
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit0 w L! e% P% L+ k/ I2 n( ]7 j
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' M: t7 @$ `+ k( X4 [' @3 a" S
$ ^, r- X( d6 f( O6 U8 h- i9 W
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 S" A, Y# \. a% A5 A1 { mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 B+ [% s2 j& Q0 T; g0 q mcasp->regs->PFUNC = 0; // All MCASPs, Y7 q. W. U( d. g T4 s
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 ^+ g, k( a8 L9 H4 l
1 E/ g! k3 o4 p) N! ? mcasp->regs->DITCTL = 0x00000000; // Not used# w2 N7 U0 _5 E1 | S9 L9 X
mcasp->regs->DLBCTL = 0x00000000; // Not used
+ K3 k! M X# X" U mcasp->regs->AMUTE = 0x00000000; // Not used* @# a/ q$ a0 b- c! W
. E& W. m2 Q- E6 ^/* Starting sections of the McASP*/$ }$ X7 n7 p7 S6 [% `$ K. T
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 V3 J% _; p9 m' @% L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( Q2 k. [& P$ J7 z/ l mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 y/ H/ g* F% @/ ]% M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, ]3 ?) s1 R( `) K9 {8 |, a' h |
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 K" [% W" p2 d2 y5 N' ]) e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 y2 Q6 ~7 \& W8 N+ r+ C
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: I$ Z% R8 w3 W- d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ |+ a2 t- N/ b. M
6 ?1 i3 k2 }. w+ ]$ p( e/ [$ L
mcasp->regs->XSTAT = 0x0000ffff; ( @ \9 f( s1 @2 R3 k5 x0 p
mcasp->regs->RSTAT = 0x0000ffff;
: W" h% H3 U0 y* N7 z& P5 ^- F! C
( i3 `/ p$ m6 x' r" b mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! e" U4 c, o8 ~! `/ p k3 \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 t$ j0 t8 ]# |+ b( A" z
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 A# Y, {) w% U4 Q5 @) \- Z" C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' a( h* c) k. H5 w' i7 ?# l2 W% ]( L% ^" z9 ^. p. y1 I1 l
/* Write a 0, so that no underrun occurs after releasing the state machine */
7 s! w. f4 z2 u9 C6 d mcasp->regs->XBUF5 = 0;
8 M$ B3 D/ ~7 `9 X mcasp->regs->RBUF0 = 0;' B0 Y' E6 s4 L |; J z
' V9 K: g( c# n2 X: ?) @: C
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 |+ B* P' a7 C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: g4 V/ A0 N& E; \/ B4 m# ^$ q: |$ w, m
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 E, i7 c) z6 T* I- g# c7 k+ m! j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' N4 h* Z$ f! B1 K2 I
8 e0 t. Z3 G; H& x2 Q mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; i0 j0 K4 [) {5 j9 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); B" ~6 y" }8 Z! N* H3 i* C
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : n5 U5 S0 w; }3 a e/ N. |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 W$ o X9 Z( [' e" m* y! K/ t* I* j1 q
CSR = 0x0000;
' ? t& Y' f9 I7 E( P4 H INTC_INTMUX1 = 0x3d;
+ k1 X, \2 R& Q, o; J ISTP = (unsigned int)vectors;
7 U9 n2 E6 L- A! D5 b7 ~7 h% }- J ICR = 0xFFF0; : n- b3 }+ N6 K2 I2 c8 i5 W
IER |= 0x12; ) r) E: e% j' z6 v5 A3 k
CSR |= 0x01;
" J0 R e1 S$ ]# I6 N, M4 d# a- y0 h2 V6 \; J9 B1 I
; J- ]1 w& N2 ?( s) q) e1 I9 j
2 m% I* {: h6 O- V
还有就是两个输入输出函数:
: |8 y: F6 c0 E% Wvoid output_sample(Int32 out_data)
) R- s9 F' X3 x, n8 r' z{
! [" V! x4 @9 E. }3 W$ P! l/ v* r! Z AIC31_data.uint = out_data;
; q6 E5 D; F$ }3 x+ B5 L MCASP1_XBUF5_32BIT = AIC31_data.uint;5 i; p2 W( ~+ y( Z
}8 i2 {6 {, z# Y i
- i r/ F3 B( Z, | N
Int32 input_sample(void)
; z* }# Z. y- N) n( l& x{
e5 P5 ]/ A9 V! b' _3 J- q" E AIC31_data.uint = MCASP1_RBUF0_32BIT;+ Y! Z$ R, F7 R
return (AIC31_data.uint);
; g- L, i. T4 ~( V$ U8 `: u}
0 |4 j% `, L1 U+ Q" J6 a T
. t- X. Z6 t1 K- H/ y$ ~( o1 m7 S |
|