|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 `$ X# A _+ _% U0 y5 n6 k1 X p
main文件:
s9 p- `( Z3 iinterrupt void interrupt4(void) ( b; o& c) _4 t. Q- j
{
4 d5 {* l9 n3 r- M Uint32 sample;
" \* {9 [' {( F9 i: m* w: B4 U' Y* P% o( K+ ~
sample = input_sample(); // read L + R samples from ADC) e2 p% Q8 g# Z( J$ i _
output_sample(sample); // write L + R samples to DAC
7 p4 b2 k0 |! r2 |( z! L4 e return;. D- Q9 f/ a3 t# r% H1 m
}
+ T) e. h3 [, o, y2 m% r
( w [; ]5 R8 O- J- a" ~! e( Nint main( void )& C% F% S3 \2 {5 |1 V! ^
{
3 c8 u) n: O, J+ n! C
8 E" r) g" `! J2 B! t /* Initialize BSL */. s- V0 T: J$ U/ S; x; I
EVMC6747_init( );
4 T: z9 _( b9 \6 u2 N /* Call evmc6747_intr function */+ P5 S! Y3 R7 \; I
aic3106_init( );
7 l3 v( G8 s8 p2 D; ~2 P' z1 [ while(1);
7 B1 z+ ?' O% j, L}
/ F( ?3 A7 k& Z# l) ^+ i
+ Z% y$ p$ Q7 c) k/ M r5 [* Y& C5 x- Q, F* d! X7 Q* W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 n8 ~1 Y; a0 _4 E. ^" F
/* Initialize MCASP1 */
3 a' s5 G# y n& H' N( ] mcasp = &MCASP_MODULE_1;8 h, F2 z7 S0 |( P0 \- l5 J6 \
mcasp->regs->GBLCTL = 0; // Reset/ \) z# h5 ~& F% l$ F/ `/ j" T
mcasp->regs->RGBLCTL = 0; // Reset RX
; n- M/ \& @. ]3 x mcasp->regs->XGBLCTL = 0; // Reset TX
" j: E8 o2 t( E: _% L3 Z4 C/ F mcasp->regs->PWRDEMU = 1; // Free-running
: j. w7 E1 K, s // configure McASP0 receive registers* [( Z7 L. b" ~3 c5 K& \/ H! _8 I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
- N2 V- s/ P8 W1 z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! [% ~2 @- _, |) s$ |
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% t4 h- ?. @1 v% U, Y& o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 X3 z% t' e; F: j( ^
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 j* O8 W8 Y. m; D8 I
mcasp->regs->RTDM = 0x00000003; // Slots 0,1) i2 c! C5 P, f
mcasp->regs->RINTCTL = 0x00000000; // Not used Y8 Z) l( a$ n+ }7 f- w
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ {4 I5 f+ m9 K: f6 x6 I+ p. Z* D) e( S2 Z9 t, @' Q- M
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ U( v) q5 H, ^& w
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
O& n" D) `4 s mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& W9 \' i+ l, |' Y4 R& J5 R mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% T3 I+ R" j7 e* ?% z, g6 ] mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& c7 v' C0 a9 t* h' x$ a
mcasp->regs->XTDM = 0x00000003; // Slots 0,1. ~% |) d0 P" {* Z% O
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. m7 @3 a8 J: J. e+ Z7 m: ~: z
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" y, I6 e9 l* E6 L9 F& \4 e% p8 d7 q7 m) Y) P: l) Q6 {
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ ]! w4 B' t+ B4 ~( R
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT e5 s h% Z. g& y9 c8 h6 x5 {
mcasp->regs->PFUNC = 0; // All MCASPs
# M6 w( E- n6 E+ t+ e( Q7 e0 ^ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ f9 a7 [& x1 X" f9 X
% Q$ h- C# Y; K$ p# w& j mcasp->regs->DITCTL = 0x00000000; // Not used
5 t5 r; u; R5 w3 O+ E4 @8 V mcasp->regs->DLBCTL = 0x00000000; // Not used6 e2 J5 W5 i! `# s- M3 L
mcasp->regs->AMUTE = 0x00000000; // Not used9 E: a) I) O& n) I$ @2 K& [% w: u1 Y
' i+ ~9 c, D' R' Z4 r Q$ I$ g7 j/* Starting sections of the McASP*/% e/ F! Z! C7 c7 W
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * N. s l- b5 R" q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); u; c0 F. j5 B8 A _) ]8 `% n
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 U8 ?/ f* t) M9 O7 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: |; P' i5 l# t3 g+ k% L+ u1 M# R9 u+ A* Q4 C# g8 ?7 H
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ W7 M( l' p5 g* } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% M4 T+ T3 P3 W mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. _8 c* d# Y' N! _8 _% U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) @% z5 S9 a# z& Q
, } L' @! {/ ^) \1 I! n
mcasp->regs->XSTAT = 0x0000ffff;
2 q8 p0 o" W* w) m4 j mcasp->regs->RSTAT = 0x0000ffff; + m& ?2 a3 k; @
; W- z( a% V& X9 s- p mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 Z! N0 d, i; T8 c+ G) ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 X! g# F1 D$ m: M' J mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & T# g/ [- R- ]9 z2 j( @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, z: y; {* [7 j8 M2 ]% C/ ^0 D) S
2 m, G" `$ ^$ F; M /* Write a 0, so that no underrun occurs after releasing the state machine */( s' B U& J' C. A0 a2 [
mcasp->regs->XBUF5 = 0;
4 a7 @% [* T" v" ` mcasp->regs->RBUF0 = 0;
! O: h% ?% \ k7 ~! a
6 S0 k& {! Q4 R* C7 ]! z+ r mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# ?; @5 q$ ^$ X% Z* _5 C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% y- M; N, v% `; c; X. a; N mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 i- c( }" z" H; `% B: E; Z$ I$ D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: U3 X& j. Z- q" u$ C" }" J; q! Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 k; _7 q- W. P, _8 u# F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 y+ \; I1 X- p+ R mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 I0 Q* y* `( |* {9 Y; s5 J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 l! l. [4 H: u7 U0 J) A
4 Q2 v' u* ]+ v9 J+ r CSR = 0x0000;' i4 V8 d( `* _8 z! Q& ~2 y
INTC_INTMUX1 = 0x3d;, U" b6 y8 G5 m( H! g( u0 c
ISTP = (unsigned int)vectors;4 t" ^1 S' |; S" C6 Y0 c
ICR = 0xFFF0;
! X+ d0 w! u* J# t( `9 | IER |= 0x12; " ^* z9 u0 Z0 Y; e" b8 c
CSR |= 0x01;
8 R' Q$ O! D8 k* N- }* T" X9 G+ w/ G6 g
2 R$ I* l. Z( s6 @5 z1 W
2 O8 ?# o) a" l$ e/ C& V5 _还有就是两个输入输出函数:3 P6 Q1 q' S. u1 p
void output_sample(Int32 out_data)' B6 P$ ?0 o9 a8 w- p$ N
{
: V, I# I$ R7 a3 j: j1 c7 {$ o$ ^ AIC31_data.uint = out_data;
& O* q; E9 a3 g. s3 F: j% G MCASP1_XBUF5_32BIT = AIC31_data.uint;
. k/ I# N! J( V6 }5 u! h0 m}0 j0 C3 ]2 _8 s' S9 y* }- g* ^
, i0 l* B, V) cInt32 input_sample(void)
, X$ b, G+ ]1 n9 m* V; ?{
. E0 N0 Y( B+ y4 c8 y7 h AIC31_data.uint = MCASP1_RBUF0_32BIT;% P; [0 V& @: B F l# y- v) @
return (AIC31_data.uint);! N, |' Q: S( _9 h
}% @- ^, ]6 Z- Q" r! V2 |& f, t
- b W8 K3 N3 j3 ?7 ?! B8 |8 _
|
|