|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 `7 _% `3 Q9 _5 T9 C: Z9 O. n
main文件:$ b) Y+ I! U% s& `3 o* g" C8 u' e
interrupt void interrupt4(void)
" _3 i, Z2 M/ ?) p+ j{
2 {9 R( p3 d( s' d+ O' |% ~/ b Uint32 sample;
' d3 M& |8 l2 `- \: _* i6 t" `7 z* ~, q$ [4 v" p
sample = input_sample(); // read L + R samples from ADC6 }# o T$ K8 Z% R: R; P, Q) d8 j8 r
output_sample(sample); // write L + R samples to DAC ' L# C: `" T6 h! x4 M5 `( J
return;. Y# g& s( x) i! X! u+ X
}
8 ?1 J# p% _$ _8 m3 ]4 Y5 }. B
% Z2 P* g6 @- u& t; A7 k! q1 p4 u$ tint main( void ). `; m6 B0 S# ^6 g, y
{) l" }3 O* l2 l7 } J
3 C; Y. J+ d, o/ m Y( M4 h9 K
/* Initialize BSL */- S! s y( f, b3 q4 U% g$ L
EVMC6747_init( );
l- w, l9 b# }7 C) A$ t /* Call evmc6747_intr function */
7 a( g6 \: _. W6 Q* o* l aic3106_init( );
) a/ N) I5 ]' u2 M! n, J while(1);4 S+ V( [6 L# }7 U5 L
} ~9 X5 G: F. ^3 R8 ?$ m+ W
: ~9 i" \" ?7 s% H1 b( r5 J4 q4 S! g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, U0 b/ S7 t9 h5 U. H8 S( @3 x, o
/* Initialize MCASP1 */ u% M: c9 B8 x. Y V
mcasp = &MCASP_MODULE_1;* J( a, z& n+ C. _& g2 N
mcasp->regs->GBLCTL = 0; // Reset9 x# U9 l8 a0 Q+ s x# ^$ f
mcasp->regs->RGBLCTL = 0; // Reset RX
2 B: F( o5 A) G- s; p ] mcasp->regs->XGBLCTL = 0; // Reset TX2 I, U* C' L* {8 k0 J" H. \
mcasp->regs->PWRDEMU = 1; // Free-running
/ N3 c0 q" m q4 Z/ w // configure McASP0 receive registers% K1 v, b% u ]7 F: p
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used# N' r" O$ g, ^
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; g2 ^( c6 \- l5 b9 d' ]
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 W; o$ p3 c, Y# h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) o8 P" a3 B, i b2 h
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
* o9 x) x7 e0 D) n f mcasp->regs->RTDM = 0x00000003; // Slots 0,1* Y5 ]$ F* c+ V) u) k1 H
mcasp->regs->RINTCTL = 0x00000000; // Not used- B$ c; I9 ]# R* V; o
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' Y: e: [, s! @8 }9 }; c
# o& F7 {/ s8 j& H8 u$ ^ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 E! K: ~* Y/ } `% a$ S
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 z. r/ \* H7 p; m# c+ } mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 n; w& i5 J) O( s9 d# { mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# t* s6 K3 m; k# M. C" {
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: n8 S N- {* N9 O2 ^- J% @
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ X d6 J4 q: k5 B. X. ? mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
8 h9 B" ~- w) `# S mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 u4 R c' Q5 p0 k! a% O) n% y2 e+ O8 P, E
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 z$ R' I6 X% X mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 L! _5 [! Z+ ~' \ mcasp->regs->PFUNC = 0; // All MCASPs! F' ]7 R- e" Q2 v) d9 l
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* g$ L, V# y+ y6 |
" m% a+ I! P5 S5 _- n Y$ K6 X/ ^ mcasp->regs->DITCTL = 0x00000000; // Not used
6 @' W6 b; T; @1 E* ] mcasp->regs->DLBCTL = 0x00000000; // Not used
' o2 v. q% D9 ^+ g9 K& J; j! `- l mcasp->regs->AMUTE = 0x00000000; // Not used' A5 F( |* o) P) N
+ ]( H& `4 [* K& I1 z/* Starting sections of the McASP*/* w( P, J" W2 y9 \- S, P5 P! f
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) I1 U; E k9 `, a4 s# |8 {7 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); e) D$ _- B+ ^2 q- l6 L4 f* n/ `
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 R. _" u! b; ?7 @- ~( p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 ]( ]) i" P$ i/ `
" U( T8 R; Z* T: T3 i6 f' v
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 x5 U- \: J- Z7 N; o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 d( M$ X5 z5 b6 y7 V& J: ` mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: G; |. E/ I# ^( Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ f7 `" r& A& o( |
! @( ~1 K3 n3 ]
mcasp->regs->XSTAT = 0x0000ffff;
' M* R3 }8 Z. r0 l6 ] mcasp->regs->RSTAT = 0x0000ffff;
2 R: }$ J* _, d8 Q5 u! T S5 D9 s3 z$ m+ V
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' G" N" u n+ ?% m, L" c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 U! [; I& r( B3 P9 L
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 N0 x, G" p- Z- Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 a' L; Q2 x( n4 I! a9 _/ m$ H* Z" T. l% j9 ~) W
/* Write a 0, so that no underrun occurs after releasing the state machine */
* d5 l* K# U5 J# a' I' h mcasp->regs->XBUF5 = 0;6 C; b! \. a u8 A. v: Q
mcasp->regs->RBUF0 = 0;
- o; B/ _2 E* u" u' ~0 T% k; |# E4 B( \7 X
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' b w* Q8 u! g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: m9 [9 v" I- n* |7 Q2 R
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 `0 g$ U$ p# K% v- u2 u1 b8 a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) I, h: A2 R5 J: ^2 A& }
+ B5 i/ ]# r) S! [5 _ X mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
Z4 }: l) o* ?( }8 m7 ^' D u) ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 Z: D& q0 Y' a5 q& M( N
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ B+ {* J' o; l6 I' {. n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 e2 q9 f% Y" R2 H5 s
5 R D1 B4 u5 Y5 h8 K; r CSR = 0x0000; g9 Q0 J% J+ g9 a. r
INTC_INTMUX1 = 0x3d;
0 t! }% ~. V( x7 v" q9 j5 E ISTP = (unsigned int)vectors;! W* v4 o. @# n6 c) c3 P7 H1 |$ f
ICR = 0xFFF0; ) w# n- l; ]0 A1 f
IER |= 0x12;
5 C9 F9 Y( x/ x4 ^6 @: z q CSR |= 0x01; ) |2 o& \* q7 x6 q, g8 [
) S9 K7 d. E$ h) T8 h* P3 q0 Y
; g* r' e2 U" e7 z5 Z
7 ^3 i) m% m" m9 T& v还有就是两个输入输出函数:9 X6 y6 m1 T0 N1 g. T; G, y; g7 ^
void output_sample(Int32 out_data)
: t5 c3 _, T; ~: S$ ^- b, D{
2 S4 A! x, y/ a7 Y- | AIC31_data.uint = out_data;
7 Z9 h( ?. {3 s B MCASP1_XBUF5_32BIT = AIC31_data.uint;$ ^5 r- O M5 b
}
! |; y7 G& \* v8 b' b2 A* [3 }
8 r, B5 r' f' R; I5 xInt32 input_sample(void)
) ?1 C! B; {* }( a) X{
* G+ ?' m, R8 u L5 k, O8 W5 N AIC31_data.uint = MCASP1_RBUF0_32BIT;" v* B2 ?: k! B; g( V: |4 f
return (AIC31_data.uint);
- F7 i2 Z# F2 I. t}! x. u7 X9 i3 B+ }! d" I Y
3 E, e) }+ k1 Q% Q1 W |
|