|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ d2 {! g* `/ E) }. jmain文件:* q, J- W1 e1 X* U# b$ y
interrupt void interrupt4(void) # U. [5 W$ I* ^/ I' k
{6 I, _4 x2 W+ s/ k1 _ o0 w
Uint32 sample;" i6 n8 i1 I( g2 P7 Q f+ C* u
* C! }# v" z; q+ L- [& H+ s8 t sample = input_sample(); // read L + R samples from ADC& A7 e- H- s5 O' E$ f) t" y
output_sample(sample); // write L + R samples to DAC
# j9 q f1 s' }, l% J& s; w return;# @& D- E+ L* G7 X5 F4 i9 a9 i3 [
}
* M& s3 h# {+ B! U* P: [3 T0 h0 |3 K7 P% m8 n" C2 y( G
int main( void )) W: ?8 y b1 y+ Z3 k1 K: l
{
$ w$ V. e6 L! S8 |
6 G7 [3 }4 ]! @7 N( y /* Initialize BSL */
5 u8 e1 ]# w5 x EVMC6747_init( );
; |( }' B/ H6 ]9 I: d( h /* Call evmc6747_intr function */
! k; ~; |8 [8 u: f aic3106_init( );
+ g5 v. } t d' Z: a while(1);2 b/ ?: v9 L/ O5 x, ^! L0 N
}
( Q4 I z" e' e2 k
6 b; L- [! F) V$ n0 y+ E
& `, g( M6 t- \; T6 caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- |9 H/ I8 A) y* f: x, F6 [/ p
/* Initialize MCASP1 */
2 J8 t5 T$ o; \$ W' @3 z* l' G mcasp = &MCASP_MODULE_1;+ X% F4 D: W7 y6 d h5 c! \
mcasp->regs->GBLCTL = 0; // Reset
/ |$ x0 M& D" F. B6 W0 m3 [ mcasp->regs->RGBLCTL = 0; // Reset RX7 s, i/ K2 G8 P- y. C
mcasp->regs->XGBLCTL = 0; // Reset TX: Y% l1 B5 u0 x6 _. f. ?0 w
mcasp->regs->PWRDEMU = 1; // Free-running. O( `! f, W) x0 C; d
// configure McASP0 receive registers
! P+ d6 h3 i/ h2 D2 N" s$ e mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
7 |5 p8 p% [' p mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 u* L9 S' i- |
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ a. f$ a! _ l. f) \( _2 L, ]9 q mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ @. A: V# R8 s, C6 f R mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- N7 B% n0 Y4 h- X2 i/ b( ? mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 `# X0 f* H6 T mcasp->regs->RINTCTL = 0x00000000; // Not used
" }& Z8 p+ z! M* q* G mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: V( y3 g: d8 t0 r @( x9 X" Q
. d. [) u$ C* O. {& k& |: J) T) G6 n mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
/ W( U$ A" p) `: P$ v% H4 F2 h mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 g2 ^/ ]2 R* W4 T/ i: p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' W0 k n+ p1 |* g( `
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& u5 Y3 O7 Y# Y$ j mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ H3 d6 E) p6 @2 w1 w H mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% N, L% }! x9 k4 P$ v9 Y3 d N# p8 r- q mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 f2 `4 K( m1 c4 ~, d: b V+ E( f
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) n3 X0 v8 f5 X7 r0 i. }
. j) n7 Y, N2 w5 @2 f- W. z3 F mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
; `2 X. _7 n: X& e: k" a mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 a% C- o' l4 E5 k8 t
mcasp->regs->PFUNC = 0; // All MCASPs6 X n, @. e2 j5 L1 U( @
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ ]4 P1 ]6 s6 ?2 f7 z
9 S/ X2 \) Z1 h! W mcasp->regs->DITCTL = 0x00000000; // Not used3 W$ s5 m' |0 r2 J5 r! V( p
mcasp->regs->DLBCTL = 0x00000000; // Not used( R8 Q8 B$ X9 w% G
mcasp->regs->AMUTE = 0x00000000; // Not used/ H O/ K8 h3 Z
# _4 @! K9 d/ b2 m& {0 v/* Starting sections of the McASP*/
$ J' u! O7 K) y5 j mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' j/ k0 B1 ~5 f( _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; k: T2 k' f2 C
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# _) G: y: j7 I9 `0 i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" V( ?1 A* L2 d( g8 p/ R
. p3 E2 Y/ h) E5 h
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 p/ S3 ~% i. X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. M- F8 O* @3 Z; d
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, @2 ^/ N$ x4 L. [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 p+ y3 ~; j+ \* Z- W$ l6 ]3 I2 X5 p
& a6 s7 r Q k mcasp->regs->XSTAT = 0x0000ffff;
: R, u3 \3 ` k" `8 E: Q mcasp->regs->RSTAT = 0x0000ffff; / B$ c5 u0 K, O) r+ s Z
# }2 N$ U8 L T8 l mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 ]& I8 y/ `1 Z# A# [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. e1 S+ Z; s/ |9 |
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; f7 q' p: P; _' J; }8 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 v: Y1 K: \4 Y o: a
@, U7 J* U8 F9 H2 F" ]$ _: Q /* Write a 0, so that no underrun occurs after releasing the state machine */
5 H, m0 G, N; P- C- L/ B mcasp->regs->XBUF5 = 0;4 w" i/ U" {) c& e4 b0 O+ e5 e, r# u
mcasp->regs->RBUF0 = 0;6 W3 v/ G' b0 e% W' i7 x( r
" p1 h4 a8 d! ]2 T mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- ^3 O }6 F7 `- a% P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 z8 F8 X) E0 U @1 I) h( M
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 p \5 b% {3 M3 I, M4 g6 p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- a) D5 M7 q/ z" Z# X& u- ]
; D+ ~/ y2 C" d6 R" V+ ] mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & u0 v2 Y" V. k7 @4 \' @4 T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& ~: K, M9 f1 [# F0 h2 V% z) G mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , o+ E& k8 l' Y% g7 n! ?8 ]4 l$ _# p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 \" i' ^* b+ K* @0 a, a1 |9 K" O1 H
CSR = 0x0000;
. y: c/ b5 V2 e9 V3 a INTC_INTMUX1 = 0x3d;6 O4 H1 F4 K1 o" @
ISTP = (unsigned int)vectors;
, w1 Z5 Y# o9 x5 ^ {# N- B" ^& R ICR = 0xFFF0; 1 P1 r T( P: O0 z+ r4 \
IER |= 0x12; " ^! V: b7 C6 b1 d9 s
CSR |= 0x01;
2 p0 S! R0 R7 ` s. y. O. n2 [- s8 g. {) v# n
9 w- i# D. v6 r" A/ J
/ T; H$ b7 `% r# ] v. ~. Y5 a
还有就是两个输入输出函数:( K3 F; U. v7 x
void output_sample(Int32 out_data)
6 b2 p4 P K4 O{
4 @+ @) J( d! `% O% ^/ v AIC31_data.uint = out_data;
0 e0 D3 d8 o! t0 u/ {+ Z MCASP1_XBUF5_32BIT = AIC31_data.uint;( f! C! F4 y, {$ X+ r' j% I
}. h6 D" }, V$ p. P4 g2 Z. V/ F, L' o1 F
: l/ x! C+ i% A9 l7 kInt32 input_sample(void)
) a. [0 f/ O* L# [& |5 X! j{ : d3 C" B6 J) [5 @- O9 R) _
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' {+ q5 l8 q5 U, e' B5 i( U return (AIC31_data.uint);
0 }1 O% S9 l' q5 S/ x+ Z# r0 x}
5 }2 l8 C1 ~5 `) \ h+ x
% A2 e' K3 }$ V3 r& v |
|