|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. m0 M, x1 V5 B* _6 Vmain文件:% p: q- k7 B+ u& V9 z
interrupt void interrupt4(void) * s" G) k$ ^$ l$ U2 _
{
: @* L( c# V) R' Z Uint32 sample;1 S2 y# U9 x6 ?
j2 o8 C: o3 V& y' Y0 o sample = input_sample(); // read L + R samples from ADC" m' A3 s3 Y3 e- `" y
output_sample(sample); // write L + R samples to DAC * c8 x+ [5 f3 q, U
return;! ]5 h# ~. S% ^! m( q/ M1 D C2 ~
}
7 d3 B% }. [0 [& _9 S) Y5 ^( n& a
/ T# m$ v8 I6 l& _* o0 H$ f( Vint main( void )5 u' N& N3 S) C9 J& R
{7 h! p# [/ } g/ F `
- w* {4 a% G; M! [2 [* t /* Initialize BSL */$ ~" _6 T' x- r6 C- }; k6 j
EVMC6747_init( );
) w9 _. l' `2 s# W2 k7 o( y1 z" [ /* Call evmc6747_intr function */
, F! M- U4 J* u aic3106_init( );
0 X7 O8 p( Z" P6 _9 V R& Q while(1);
U. u6 h. F& J% ^, e}4 {1 z* g9 B' t- m5 g& r; C
6 M, l9 e3 O$ i w+ F, \9 P
$ Z0 K# h" A7 `" ` laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 p$ C7 D3 j' X6 b$ a& l
/* Initialize MCASP1 */
: }: \- a7 v+ V6 @ X mcasp = &MCASP_MODULE_1;
0 C$ E* z- X6 | mcasp->regs->GBLCTL = 0; // Reset2 ?. s+ y5 o! \
mcasp->regs->RGBLCTL = 0; // Reset RX
6 y H/ o: E. j7 u3 t: A mcasp->regs->XGBLCTL = 0; // Reset TX
0 U( M u9 r( a( j mcasp->regs->PWRDEMU = 1; // Free-running6 U7 i; g* B; b* ?) Q
// configure McASP0 receive registers8 i) `9 S. |( I: ^$ ?6 l8 r
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' x' i& _/ I: y$ N) N1 l mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 h. r. p9 w% T0 I. P# L3 P mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; i( G, d4 H& O" w' _8 s: [
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' I' k0 v6 E( G0 R8 U
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 Y3 h- d% u' ~4 @ mcasp->regs->RTDM = 0x00000003; // Slots 0,1. K1 H% f+ W7 w! y6 i4 U
mcasp->regs->RINTCTL = 0x00000000; // Not used
4 C+ e/ J0 E S2 I! d9 X/ Z mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ q& E$ \+ n: v1 e# K7 W
* g+ B6 \: g, I, j, O/ | mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used" i( W* Y& ^0 G6 l; _, }$ w p0 ^
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ a ~- Z2 v9 \+ N3 @# d3 t
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) m0 ~, v0 l* i' X9 R/ F mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
J3 N! q E! A' o: `% H+ I mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 i9 `( e- C0 A) [/ }! k
mcasp->regs->XTDM = 0x00000003; // Slots 0,1: S; V* I& T9 v( v: u5 q
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 p0 R4 h: _( s/ z9 d
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
V) R( S- H: _/ M
; j% }- c6 e4 X; a4 N. n3 T mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: L* y* u' o' Q. `1 d* u mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
7 k% R8 Q- }0 F; H" y, ^& Q mcasp->regs->PFUNC = 0; // All MCASPs
2 ~: L8 {3 f. V6 C' Y6 C% c# D2 Q1 M mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# ~) c0 L! F/ J4 O9 A. t, \, M: f1 ?1 w1 d
mcasp->regs->DITCTL = 0x00000000; // Not used
0 M; K8 @1 W1 z/ f! | U- q mcasp->regs->DLBCTL = 0x00000000; // Not used
3 K/ L6 j# ?1 I3 c+ x. r% u mcasp->regs->AMUTE = 0x00000000; // Not used
) Q; ?% Y5 L9 O3 F0 |" }' N. u
7 p) Z' d9 E. M7 e- v' N/* Starting sections of the McASP*/
1 R' A& v# u# Y2 l! p s mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' E- H+ m8 F1 i6 Q; q) ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); - a. E3 z O" G6 b0 t
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % B; P$ ]% u2 f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 X. G1 ^- X0 n" _
z5 N8 |- X& F! ]4 T+ N2 g3 C mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 ?/ J5 H' H7 q% r) m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 B% _: T! @1 |9 `
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- R9 i7 _ j( c3 g! Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' o1 m* G) ]8 z/ W
* a4 O( R, f, r* O0 y) @! ] mcasp->regs->XSTAT = 0x0000ffff;
7 p! E! K5 w$ e; z. g mcasp->regs->RSTAT = 0x0000ffff; + R! D, F& M. S* p1 `
2 @$ ^2 ]% q! B# u% d; Q
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: l4 |0 A1 E% Y h) q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" o8 J& o) E" l mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 o. h5 q) u! h* U, ?5 b& M4 y8 C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- I) r) [4 x+ i, @
3 s. _3 O3 [5 S# V0 n/ g /* Write a 0, so that no underrun occurs after releasing the state machine */: r& F7 Y$ N0 z9 D- X9 k/ E; t) _
mcasp->regs->XBUF5 = 0;
9 i4 p/ E) Y) o8 E5 z0 e# w mcasp->regs->RBUF0 = 0;
6 v ?/ I7 F. V+ H5 d" n; T# f' X# r: O& ]% G
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; Q7 ?& H G1 o% |! A' {7 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* y9 c6 Y" X2 q T3 o3 v
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 D4 V8 _% V" p1 {: B8 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 @, g! B6 s0 o4 M8 ]
% W+ Z# V3 D; u mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* l. b0 ` t1 K8 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! j( h- x/ Q5 {
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 o; Y+ U( T7 W# Y- }+ } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: X5 J6 C, f G: V+ \( m
7 e" k* T- {5 B3 k! w7 j" C1 |
CSR = 0x0000; D3 [6 w- p4 K
INTC_INTMUX1 = 0x3d;7 J4 K) O/ q7 Y0 [ [
ISTP = (unsigned int)vectors;0 I1 q3 x- h' {) X
ICR = 0xFFF0;
]- v* k) Q; ]" B. @9 T IER |= 0x12; ) i5 j. S. E! R5 K- t) Y6 M
CSR |= 0x01;
) n! L! E! k3 D/ H! U, }
4 T$ l* l0 R2 n9 g1 ^3 O* ?
2 q$ }6 j5 M0 A& `4 r9 b2 a0 A0 R) E; l# z/ n
还有就是两个输入输出函数:
v: l' K r( W1 q5 Gvoid output_sample(Int32 out_data)
. a, k8 ?- h! ]& O{: `! B" S3 J& y8 o J/ D3 w& X
AIC31_data.uint = out_data;
) G: N( n$ P4 ^7 I) I2 X. o MCASP1_XBUF5_32BIT = AIC31_data.uint;
) g* H' ^! Z' u! V}; V( J+ I0 g$ `) t; R
( x/ ]$ q/ C) _4 JInt32 input_sample(void)
+ a, e( r) j0 l4 ~" @ g{
5 X- `0 d1 a& J* O AIC31_data.uint = MCASP1_RBUF0_32BIT;4 m+ [7 M. `* a% @+ f
return (AIC31_data.uint);
6 @4 w$ ]; D+ L' w}
! W0 c& `! ?/ h- b2 K4 ~. \3 u" J- m! I4 B+ G2 Y4 j
|
|