|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 c- v) E& u* {; g, mmain文件:, n' l9 v4 }9 ^: u0 ]
interrupt void interrupt4(void)
7 d3 F. z1 g5 R{
8 i. e7 E T H& s/ W; U Uint32 sample;
- Q& m" ~- i' n5 P6 q! F
/ B: O# B$ p" v( B- ? sample = input_sample(); // read L + R samples from ADC3 g K) Y: g& o: Y6 {2 u2 L
output_sample(sample); // write L + R samples to DAC 7 n; q% J4 U* W$ e( Z% h
return;
6 B1 O4 Y/ I# R4 l2 f7 l2 |}+ F$ H& Q2 X+ ?( k/ S6 C& M8 |1 {
* l4 w# }. q( {6 ]6 v( _0 |
int main( void )
- L! e) l' z5 r# e{
2 T+ V7 B! [- T; N( `: h
6 p6 z( W7 Y+ H1 r) y0 W /* Initialize BSL */
, Z1 B L) b7 ?1 ^% { H! h4 ] EVMC6747_init( );
( _! H8 m* S. Q3 E- f" Z3 D /* Call evmc6747_intr function */, c) |7 r* ?: x) Q; }. n
aic3106_init( );! B" r4 ]+ j8 ]( e2 I- r E
while(1);1 G. z( r' c2 v2 l+ c) c
}
( t5 m/ }2 |1 X" {* k$ Z( d" O s
5 ^1 t3 Z7 R" F) M0 w
6 _; m9 v% J0 laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 @6 w/ |; h1 e x0 ?/* Initialize MCASP1 */
( U& y' h( h6 d7 @# g mcasp = &MCASP_MODULE_1;3 N- z d& m* j
mcasp->regs->GBLCTL = 0; // Reset
8 \6 Y: p( S+ V, e0 u3 c mcasp->regs->RGBLCTL = 0; // Reset RX. Y7 H* X: m& A& N
mcasp->regs->XGBLCTL = 0; // Reset TX' c k- ^5 w, e" y3 `- @/ z
mcasp->regs->PWRDEMU = 1; // Free-running
) n+ O3 F8 E5 [; h8 b- ]' W6 a // configure McASP0 receive registers! W+ H" ^ `3 n; A
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) u1 E; M( b, R
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: v4 a7 W6 N6 d( K6 Q
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& z/ }8 E' H8 u; f mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( B# W1 W4 S% ~) ?* ?+ [; L+ E3 G mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)2 p; b- h( w; I# ]0 c2 N1 f
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
( D; l& l' v4 z+ ~ mcasp->regs->RINTCTL = 0x00000000; // Not used
( `5 r* ^2 b7 H$ m mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. T8 x5 o# Z4 R5 g" c- F
9 l7 k. L$ T i; R% x
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( W0 Q L1 E- X' _( ^# C$ r mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" h* i% W3 e8 T) h; e! k
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- V) s2 E$ P; x0 F" `3 D mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) { N+ i! _9 n& r( O0 X mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 n* W0 T9 ^3 Q% A9 s) x
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 X2 I8 ?: F" W- R mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% O# g6 }( z8 \+ p mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' j F6 \7 n6 b6 `8 A7 }& g+ p3 J; ^' q( Q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ b' u8 _# g; P# `* @3 K0 y
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 _" D+ B6 E+ w3 P. G
mcasp->regs->PFUNC = 0; // All MCASPs
1 o4 V# j$ F, W, ] |# G5 x mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 ]# C- O' j/ e0 [( Q
1 A, T( X( K1 w7 u/ J! J6 H9 y4 O! i& L mcasp->regs->DITCTL = 0x00000000; // Not used
$ _6 [# k1 b K* O# V( e mcasp->regs->DLBCTL = 0x00000000; // Not used( u# T; A o: y5 L; E
mcasp->regs->AMUTE = 0x00000000; // Not used( j3 d1 K. V( r
1 y( L4 j1 T4 K: {, q
/* Starting sections of the McASP*/
% O" u6 h1 r% h* l1 C3 d mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ [# E2 y' W& Z5 N3 o& J! ?# t5 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" P$ H/ g3 s1 X& W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ k) S; r2 J3 p/ n+ m" ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. Q8 t9 _3 {# h+ z% E
9 ` r5 W: Y2 Y7 y" S
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, P! C, }2 K- b7 `& s9 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 b& X" j$ M! U/ S mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 \& N5 z6 F4 A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# _8 _) N, M( v
/ {6 N# n0 n5 _3 S; T
mcasp->regs->XSTAT = 0x0000ffff; 1 F4 c1 D# L9 p% f( ]* }" E& d b
mcasp->regs->RSTAT = 0x0000ffff; 3 o9 t, ^! `& C
9 c$ f, {4 r. V. h" @. O mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; [& f$ v/ `; ^! Z" |7 b& m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* N; b5 T4 W. D' t6 h! F" P mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 |9 S9 J7 i- O/ C$ V/ {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 {. W3 `/ `( N# Y' A
; ^* P, E6 A+ G) n! \9 a, Y /* Write a 0, so that no underrun occurs after releasing the state machine */
$ u9 [$ A; \- O! r/ o, p5 t mcasp->regs->XBUF5 = 0; r# ?% ?5 S- p% _- B- T
mcasp->regs->RBUF0 = 0;
/ Z/ C" ~" [. ]$ a3 Z' b5 Y5 U5 A' f5 E. ~
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! Y; ^( r) m* ~# J% M( P; [6 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, B, N- ?1 R; x. g* c9 H& K
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' t e% v. T j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' O% p9 I# e7 j: |
4 r' R3 a+ m i4 r8 ` mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 c c( l9 b/ T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& w7 I3 v* h) ~: y# K3 G5 q& H# Y
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( g8 _0 v8 v+ X' p+ z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" |4 L' |1 R1 X; p' m
/ B+ n! r/ I' V3 L& c5 _7 t9 P CSR = 0x0000;
/ f u" G* M# n1 E INTC_INTMUX1 = 0x3d;
X0 i0 e G0 g2 R0 H; Z. v ISTP = (unsigned int)vectors; G$ ^, L. [. Y* p C6 G a0 r: ?6 p
ICR = 0xFFF0;
{2 I o1 R V IER |= 0x12; ( J$ g q* J. E) W" m, h
CSR |= 0x01; , ]# N q2 N5 g" f! o2 H
& z2 ]8 {. ~* [2 n0 R
( _" a+ k. s5 r! S! S& {4 C* t8 O# Z+ h/ R6 G9 ?* r* e
还有就是两个输入输出函数:
$ C, ^6 z' G( B% ]1 Dvoid output_sample(Int32 out_data)
- ?7 ^' x; J( h" O4 U4 g{$ A' T3 \; l m$ ~. M3 s
AIC31_data.uint = out_data; % d% Z8 K7 I" V/ G/ x. j
MCASP1_XBUF5_32BIT = AIC31_data.uint;, n0 o1 [" q% l' \0 u7 Y
}
q! q/ K% }8 h8 {- R1 `- q" _4 G6 u3 G" U ^, f! z
Int32 input_sample(void)
/ R2 K$ G' b1 R* r9 \5 _{
, S/ o A O# \/ _/ ~ AIC31_data.uint = MCASP1_RBUF0_32BIT;$ W; u/ a2 t& ~, H* V. X& G
return (AIC31_data.uint);
& c3 V8 t! O4 e, F* n! C) T* j" A}; R: m0 M8 k: b% [+ E/ ~
) f2 K4 K/ j* d; P* s5 c: V3 v! O: F
|
|