|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, V4 J- h Z- v7 q* \8 Imain文件:
( b% T$ x/ N4 D/ ]9 H' v7 kinterrupt void interrupt4(void) % j* P6 b9 D% ?8 a5 i1 y; q
{9 W% I4 h1 l+ R1 Q$ N0 V
Uint32 sample;( s: N5 r$ d- N7 C- i
! M6 \# v; Z6 ] j7 i. \8 h sample = input_sample(); // read L + R samples from ADC. l9 {& n2 d5 C+ A. h5 k
output_sample(sample); // write L + R samples to DAC + q* @" x. R/ ^
return;! ^2 J0 n# y+ w$ l$ j, E
}
) N3 i% x" y/ Z, T1 Y) p
/ W9 Y/ Y1 y' }- p) ^9 o, aint main( void )4 ]6 `; c: _$ K
{
' q' h$ Y0 v, N8 @1 _" J+ n$ a% B2 H% ^: X! ]4 e
/* Initialize BSL */1 F- {: e( J/ C1 _
EVMC6747_init( );
% U+ l4 s9 A! ]# C /* Call evmc6747_intr function */
/ P, {1 M9 R- p- Z( E5 t3 q% @ aic3106_init( );
a7 d* v9 b4 n8 o; C1 _ while(1);
1 Y2 n5 N- k9 d9 p/ e( n3 T}
4 E5 b- K4 D- `0 Z% e5 X# [; s- p0 M) W% T) d
3 p; p$ r( U& z: N7 R0 Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 b' e, r/ \" V% {( S
/* Initialize MCASP1 */- _5 T2 Q4 [$ h; Y! s& M
mcasp = &MCASP_MODULE_1;4 p8 F x$ S0 A; c# m. J
mcasp->regs->GBLCTL = 0; // Reset
& |: ~! u* q; t: y4 ?) s+ m mcasp->regs->RGBLCTL = 0; // Reset RX
3 v3 `% j% j5 C4 |3 [2 u6 ]0 j; F1 r* J mcasp->regs->XGBLCTL = 0; // Reset TX& J; @. V6 e, U2 @( k7 |( n7 t
mcasp->regs->PWRDEMU = 1; // Free-running
: D/ a: F0 y5 f! B9 R O7 H // configure McASP0 receive registers
. I n8 q+ i% i, |+ z mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 R; M; \- s8 Q+ q mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* g$ M& m, `9 T9 k
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 R. Z: U8 |4 s6 Y6 W+ L mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 Z T2 A1 {3 V2 @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& {# N# T7 F. Y4 a, r* y7 \
mcasp->regs->RTDM = 0x00000003; // Slots 0,14 w& G5 C: n |4 F+ Y" q; _- y9 C4 ?
mcasp->regs->RINTCTL = 0x00000000; // Not used
: h* b) Z+ ]5 Z) d7 [: ? mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. T* d7 z# V9 X6 a6 ~+ M
3 m& G' \2 G: x; | mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
8 @ _6 {0 c1 b: x6 T mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 y. g9 O9 [7 m) ?
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 W. E! A; Z2 m* X- k
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 H8 P0 M0 V; C
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: u8 @. ?! ^, J- Q$ f% J! i0 J
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
4 }. F/ ^, k1 h. [! g/ X mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, B8 c! @' N& C3 K mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 q" m3 \, O5 q4 O1 ?
4 v- K, L) b; r+ j' I
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN, G2 x' ? w6 m; g: Y' ]* ^/ L& |
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) R6 i' v, Y2 O# Z+ F
mcasp->regs->PFUNC = 0; // All MCASPs9 }% Q+ x0 u- D6 N) v0 X
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( h6 ^) c4 q9 V. {' j
8 x. t5 c1 `' t& q& a mcasp->regs->DITCTL = 0x00000000; // Not used2 ], u5 j2 p$ e6 b* v
mcasp->regs->DLBCTL = 0x00000000; // Not used
W/ W, e1 C! `; j: T+ ~ mcasp->regs->AMUTE = 0x00000000; // Not used# ] D2 l+ L0 }7 W
7 c% a- p! K0 U& E/ |/* Starting sections of the McASP*/
8 X7 J) _- h4 L, R! M7 f mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 d3 E, s! J1 d7 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! j3 H7 x4 j8 z9 I& { mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, d* u% `" t6 Y( U8 J0 t) V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 M8 I- n9 o/ i2 Q& [$ h% P
& j9 M% B2 x" I. j8 z, A) J
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( v" y7 p M4 E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' ]: c* x' M; _% ^ ~( J' w$ S) o" ~9 ?
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : i1 y. S- U% R: }/ C! K$ v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 Q: u/ g' t' j1 C T1 {: u; ]
0 \ Q: p6 L/ ?' v; U7 ] mcasp->regs->XSTAT = 0x0000ffff;
: |* f& y9 d M2 p7 Z mcasp->regs->RSTAT = 0x0000ffff; - T# O0 _) m5 m7 b5 E+ W
6 D% ^! c$ A8 ?" T2 N+ ]
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" u5 g6 D ?8 \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON ); t" L) C5 N0 k' _' t. `
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( }4 I5 s2 s& }- k8 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 k5 X1 |" }& M6 R) T" Q) n* w
" O4 R, u1 a! }; r( S /* Write a 0, so that no underrun occurs after releasing the state machine */
) g6 S+ g) S" l) Z! k mcasp->regs->XBUF5 = 0;
. X; D) P/ }) L9 X. [ A0 Q mcasp->regs->RBUF0 = 0;) k! Z7 `1 e8 S2 u' c
) H, ]$ P3 k8 R: e* p6 S
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 N( Z! _9 {% U4 Q! @, E I3 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 y2 f/ a3 t! }, r0 d$ d5 y& B9 K mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) R! N& k) G' k0 C3 K1 L! y6 u# W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. Q5 J# M; ^' l: n9 `
1 Y$ Z: T+ ?: Q& s mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; ]4 `& S) L, x( x/ x/ i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) ], D) u' E2 C" a: l2 f
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# O l4 T! f; a6 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' s/ M/ {& P% k. B/ n
# y3 J2 a5 P0 l. P$ r' y. ~5 \ CSR = 0x0000;9 z* q& `, b, |
INTC_INTMUX1 = 0x3d;. w, ^0 C9 A* G& h) r2 U! l
ISTP = (unsigned int)vectors;1 q. }$ p" F V Q! Q
ICR = 0xFFF0; : k* u: E4 x' ^ j1 [) g
IER |= 0x12;
" b$ Z N, K! c u2 V CSR |= 0x01;
0 n+ n& N( }* T- s9 I" z
9 a% c2 P+ T1 s; e& j; o1 ]- w+ a
9 C: g, Z& }+ a6 t+ j: U
- }3 W$ F: y; B& ~5 A还有就是两个输入输出函数:2 n* {6 Y0 Q, U
void output_sample(Int32 out_data)
9 M8 |* \' B( F) f6 e! S{! q. O2 s8 ~# A1 p# E$ u
AIC31_data.uint = out_data;
9 F5 l5 e2 k" w5 ]8 J# q MCASP1_XBUF5_32BIT = AIC31_data.uint;& I N, ?3 Q& @. l
}/ U8 B1 U, s; U
+ G8 j( @7 Q" k7 [4 g+ l8 \4 j2 lInt32 input_sample(void)
# n# ^0 p; ~$ I# E1 {% H{ 9 Q0 o5 E; Q8 B1 k& {
AIC31_data.uint = MCASP1_RBUF0_32BIT;
& D# Z/ n% U4 U7 ^9 R( m return (AIC31_data.uint);1 s0 D) x# m7 d( S8 t
}
0 p' W5 @' K" ]6 q8 `9 w0 h+ d6 g9 ?( U
|
|