|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! [0 V5 _7 [$ [$ Amain文件:
8 f) ]3 m6 L0 B% b& minterrupt void interrupt4(void)
$ R0 b- z( X) {. B6 R9 k# e- F! U{
0 x# s3 S" n& f% S- o2 Z# r Uint32 sample;) V0 H+ N$ m; j0 @# t! m! _- ~9 r
2 |" Y7 D c& _3 [
sample = input_sample(); // read L + R samples from ADC
( T: z0 e! V7 K output_sample(sample); // write L + R samples to DAC
2 O& u r5 O6 J( l5 T* l return;
3 Z# R7 p; F, Z! X. h7 Z, A7 Z}
S. [ q- o9 [# g
$ V5 k* G R @% @% V; fint main( void )
* Y/ m2 {! O9 l* k{
L: {3 z' ]: B1 y& E4 N! j
% [3 p- z; l0 A2 t: u /* Initialize BSL */
6 G2 ?% a* h, d$ q, w0 \& Z EVMC6747_init( );
, K Q1 u% T" _8 V( j5 \ /* Call evmc6747_intr function */
1 H2 h) R4 k0 L) } aic3106_init( );
! m l E4 S H6 A while(1);
2 a( A$ Z; {0 I# W" m4 _}6 ^- \- L3 `, |' c9 r
; p ]( g% r$ Q) J2 o
1 T) |1 C( W" ~ Z6 E3 \* Z4 zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题 |( e- |- E) a) P# y9 t$ [$ t+ V
/* Initialize MCASP1 */9 f8 i1 U* [( r& k3 @& m
mcasp = &MCASP_MODULE_1;% b8 }: j3 i% {+ y. |
mcasp->regs->GBLCTL = 0; // Reset c3 [, k( L5 J5 ^/ N! s
mcasp->regs->RGBLCTL = 0; // Reset RX
" s) s7 v8 p- A; {3 x" k mcasp->regs->XGBLCTL = 0; // Reset TX, s' t4 G- h L8 Y7 E
mcasp->regs->PWRDEMU = 1; // Free-running! I8 a8 R9 d1 n8 v' c) D
// configure McASP0 receive registers
/ q( l- q) l, F; r! } I2 V+ l. K/ ^ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! m* m* e1 E R4 p/ j
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% C1 W/ V* i6 C' T1 l; L' a4 R
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word. r& r8 C. f# Q q8 l- `; M# l
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): v% }1 M5 h# A6 R+ b# ]- R+ K
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
_, G( A z3 I& E mcasp->regs->RTDM = 0x00000003; // Slots 0,1
- {$ i6 v" L) W& b( q8 `/ s mcasp->regs->RINTCTL = 0x00000000; // Not used
; _; D2 }5 W' s( s3 n& K k* d/ }0 j mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 {: o3 R: H$ i5 A+ Y z
/ N) v9 @1 j6 c/ u' h6 ^7 G. S mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used V- o9 W6 p8 \# z. Z9 g
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 G4 Y& [2 j4 {$ s6 s* i' F1 m" l
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 w7 {& ?$ p$ Q8 S( |* g mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 u1 d0 z9 d! X
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ t% ~5 B' t. U# W7 p' {8 g% P6 f mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. K/ M1 M3 U5 E) M$ y5 m mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! T7 z+ u6 h+ z" R8 g1 P% a mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 Y3 e$ G! d0 R/ i; n
5 ]$ x# V# _: m! c( @1 l
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" a0 I1 G5 T' G! \0 s
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# e% X, j$ J G) M# u0 p
mcasp->regs->PFUNC = 0; // All MCASPs
% o. J0 q: V( J) z. {. \. { mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! q# q. T2 P8 x- n7 T' D: z& N+ Z
- z1 a5 Y% C; m1 D8 {% r
mcasp->regs->DITCTL = 0x00000000; // Not used* H' o8 d' h z9 t+ K
mcasp->regs->DLBCTL = 0x00000000; // Not used7 [9 [& w6 q3 r" q
mcasp->regs->AMUTE = 0x00000000; // Not used
+ a* B, ~! |2 ~/ S4 t* t
0 _1 Z1 s x! P# Q) T! n/* Starting sections of the McASP*/ v8 ?: }4 I! B& r2 N2 L: _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" ]& O, @$ @( B* _; d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 8 A, L! `: _! P2 D F$ q
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . j" V2 P6 z- ~' [* R. Z; h7 ^8 V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 Y9 w4 l: V3 p: z6 i0 l1 `
; k+ E% k5 y1 `0 C3 V. U$ U3 j3 ~ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 l& z$ n# b% F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" k0 U6 h- r* J) X9 y- \6 Z mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - J. N5 ~/ `, @% ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" G8 P+ t& R- h- ~& x0 j9 V. ]% w I: I$ N. B( s
mcasp->regs->XSTAT = 0x0000ffff;
( h$ w) m" `, n4 ~: A8 J mcasp->regs->RSTAT = 0x0000ffff; 6 z6 K% X& H" @ a; O
& f9 U. I1 P# v' v/ \/ d+ T
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) Y5 J$ b; H8 w3 [1 A0 h2 ~0 f |1 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 q" J/ E( f3 a3 y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! p/ K) |: }+ t+ I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 m; [7 o, x7 O: i: S, b/ G
9 q" j; q+ d+ |4 X3 Q: m1 I" t /* Write a 0, so that no underrun occurs after releasing the state machine */, r1 E3 ^' a6 ~$ l7 M* B0 X9 O+ y
mcasp->regs->XBUF5 = 0;9 E1 C% T% g5 U; G/ b
mcasp->regs->RBUF0 = 0;
" b5 L7 C7 ]4 b e! e$ c8 M* p0 _% l3 a. r
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 a0 _- |1 m: p s/ `% \3 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 f* y: @0 G; u9 l) L mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 X N4 B& t+ Z: R) o# [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, g0 s4 ?. U1 n. |5 P( `" x
Q" e4 c. P* B1 V mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 B# J$ E% O5 T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ Z; B1 y9 g# B. O) S! j* N
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & Z! P' _# t, |7 W _: l1 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 C& Z4 l' [" p% Y% D! J# `' q
5 V$ \3 w. A) x( d S5 [" G3 M) W
CSR = 0x0000;! z0 U- H3 W* L
INTC_INTMUX1 = 0x3d;
; q8 p) \2 p1 d: g3 P ISTP = (unsigned int)vectors;- W' `0 }% v0 C+ |* C: T! \7 n
ICR = 0xFFF0; 9 _- [; T Q0 J8 v
IER |= 0x12;
: b0 M9 v% E9 M9 o CSR |= 0x01; 5 d; t' n# F( h
w$ q+ r, F/ g. s* \
+ x( }/ R$ [& L" E: C
0 k5 @* D& O2 ?9 ]还有就是两个输入输出函数:9 u; i$ S4 ]5 Z: e- r ^
void output_sample(Int32 out_data)5 t% ~: W! e* _! A U, W
{' z% N. Q3 A, o* l& L) V5 y2 C
AIC31_data.uint = out_data;
% c& v2 k* S3 ~! @' ~ `, N# c: w7 t$ U MCASP1_XBUF5_32BIT = AIC31_data.uint;
* m- h& O9 _. d7 c0 K/ \7 l8 U( P( z}
) V) x5 a2 o/ j7 c7 }2 R9 \/ d/ I/ o( C+ l z: s
Int32 input_sample(void)9 P i& X; g# x2 @
{
% t: L& W& u' u8 k8 T AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 G3 s/ |# I& F5 z return (AIC31_data.uint);8 e: I/ P( F0 f1 c5 b7 ~" l( ?
}
# X- }1 m: X+ d# ~' B
{3 N" e2 A( v' e( ? |
|