|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 d. l- K5 b4 u B- ?
main文件:
; e4 i" ~" M0 n$ ` {1 rinterrupt void interrupt4(void)
- n, \$ B% O5 y' A! C9 F8 r{
; X+ T' [- U8 N( C Uint32 sample;; `5 I+ H& |1 T" e& Q1 `* c7 u, Y
' y. r. @ p" F8 b% r0 O
sample = input_sample(); // read L + R samples from ADC0 W1 f6 G( f4 \+ l, e- s6 W
output_sample(sample); // write L + R samples to DAC
- w9 M$ t) I: t0 l, K3 e return;; y" F+ q, y+ D) C
}
( f+ F) l3 K" ] e/ W# H9 S' {. u1 t9 C2 g+ K" J4 ]
int main( void )
/ ~' l! h' D& h/ N" J4 l' b; c{
7 \$ j, g2 j, w( X( m7 v1 V, J# \! A' ?
/* Initialize BSL */+ [- D( \' n; c& r) C
EVMC6747_init( );$ g3 }2 @& v) \) D/ t: X; L% A
/* Call evmc6747_intr function */, c* K: P5 @3 a9 ]1 t6 Y
aic3106_init( );7 {2 U& M) j+ K) U, n
while(1);
6 C, @& q- h' T}
' Y+ c% f( m: N" b$ s, A
3 J3 b, X- c5 g' L& ?* j, s4 l
& ^; n1 p3 {3 s6 ] t3 R& E0 Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, r- ^! g, F$ i1 r% b
/* Initialize MCASP1 */
9 S* N) W! q K5 t mcasp = &MCASP_MODULE_1;
! O" G- I# `+ V- [7 S' ^ mcasp->regs->GBLCTL = 0; // Reset
3 U" v, ?2 c" E5 S& y mcasp->regs->RGBLCTL = 0; // Reset RX
+ K- b. d) t# L; r5 K* u mcasp->regs->XGBLCTL = 0; // Reset TX! T0 K/ ]8 s5 ~
mcasp->regs->PWRDEMU = 1; // Free-running- H8 ^. N8 {9 p0 z
// configure McASP0 receive registers; |8 p/ g% P0 f" U
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" O8 @! v5 y# J' E, L
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) Y1 m4 t) `. g3 e
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; ?: P8 U* z, U/ h mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% a6 ?$ M j4 d2 R) u
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" o" A6 b1 `/ w' S& Y' Z mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 L' K- k2 i9 g( b0 K" z' S mcasp->regs->RINTCTL = 0x00000000; // Not used, L( O) I0 H& q) w! w. U
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- P6 B% M3 M! c
( Y0 x- a+ y* n; [# ~% s; s mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used v7 |0 d& c* }1 A
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 U1 m% }9 B% `6 v8 ^ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- Z) ?: [# B7 P% Y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- Y3 O& B$ Y! W3 C$ [3 f
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" D+ S* j8 p5 m" m% N
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 a0 F% P4 m4 a' O& r! F mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
9 a1 f. S2 l, `) p0 E mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" s. l5 E! }. j* |& G$ a' w, Y0 f! H3 P+ i& J. z
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ `, K. A2 a8 y3 I5 c mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 F& {8 i7 s7 T: B
mcasp->regs->PFUNC = 0; // All MCASPs6 Y% p% U4 n$ `7 R
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 k! E% @$ ]; B8 r# r) {
$ c$ q3 _& i4 x6 p$ p1 W mcasp->regs->DITCTL = 0x00000000; // Not used+ @9 P8 O1 v+ I# N+ o1 }
mcasp->regs->DLBCTL = 0x00000000; // Not used' \+ d# H; f S& t# M' s1 q; k
mcasp->regs->AMUTE = 0x00000000; // Not used
& J( }) q' t; E
8 _2 T4 y/ d, Z' K+ S2 F( j6 [, V/* Starting sections of the McASP*/
4 k+ @" l6 U, S4 H0 V3 `4 | mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 j! H$ Q& e1 g. t6 R* n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
2 B* @, a6 t! I( b mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% A. l M* t1 f. t* t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
v6 t5 W5 C* ^$ h
& c; D0 l' X V% c( O mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - A4 j* p. o ?; W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 A. C+ w& c+ r1 ] mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; w& m9 ?3 i" _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 ^. \7 N: {0 ~# r8 K% W
1 _0 u) |, ~ O# |* O; W mcasp->regs->XSTAT = 0x0000ffff; ' L( r* ]1 \$ x
mcasp->regs->RSTAT = 0x0000ffff;
- e+ u. {3 I2 \7 {/ ` D3 l& L* U; D3 X& U! `& Q% v5 I0 \
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 a; g0 i" b2 A3 V* a5 R& v( L3 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 T+ {8 V! [* ~ E
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ) o- N) J, c/ x7 J% O" Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! G# |# k1 u8 Q5 A2 a1 u
# t& G7 f* W1 Y- r /* Write a 0, so that no underrun occurs after releasing the state machine */) f* Y3 [9 v1 E
mcasp->regs->XBUF5 = 0;5 C- r# e" p! } I9 G# H* U$ j }
mcasp->regs->RBUF0 = 0;0 T' E# O! G; r4 V
9 ?9 [/ z0 s& }! }' |; G7 M$ B/ c
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 ?- n0 D$ J4 S1 ?3 H5 J; `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 B" {! [( t# W) B% v/ s( \0 Q& J+ q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - Q1 u$ W% p7 Z+ f+ V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );/ P+ S* i9 d. s) @7 p
! u+ p% _# ^1 {# [/ ` ?7 @: a
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 P o/ W( }$ q& u; C* p' s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 [8 t; C: P r$ g* N1 x mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : u! p; V1 G/ q1 u( M s- w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ E+ H# B1 ~' _ {+ L+ J* x
9 C* Z {' f9 B+ V' N b CSR = 0x0000;6 f* G# |8 ]( ^8 J* s
INTC_INTMUX1 = 0x3d;
: S I- t4 Y' ~+ _2 u ISTP = (unsigned int)vectors;0 z" R" z. A) n% k. Z
ICR = 0xFFF0;
, I8 c [% Y9 l+ t# M; O IER |= 0x12;
2 y0 ] i/ O, q; H CSR |= 0x01; 2 C+ A+ p1 c3 L7 Q. q7 a/ q
4 z" x8 L4 v/ c3 S
% Z8 r, l( r' z0 s! B
' V% P$ J A: U; O8 S: \
还有就是两个输入输出函数:
9 q& E) a* E7 Gvoid output_sample(Int32 out_data)' M! ], I! R& Z1 z, Q
{1 H5 g$ f) q: W8 O( W
AIC31_data.uint = out_data;
5 W5 @+ [8 V1 U# [. g" k& l MCASP1_XBUF5_32BIT = AIC31_data.uint;7 Y4 A) m8 k/ }+ |2 Y% ?/ W7 A
}1 @8 p) K# i, @6 Z; Q3 o) C
) Q3 C2 O! G5 [Int32 input_sample(void)# b( Y- D, [! T! ?
{
4 Y" T2 o2 ~; G) ?3 K( X AIC31_data.uint = MCASP1_RBUF0_32BIT;; g1 P& s3 @6 L- E. x9 m4 s
return (AIC31_data.uint);) e5 x Z' J- a& }) y" E! X0 Y" v: B. c& w
}
; a i5 n; `: r% o9 y+ W. e3 r3 ~5 [# B& e- U0 Y' e) K
|
|