|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# x) a. g6 j8 L }# C# vmain文件:5 b$ M3 \( | ^* U( J# B/ ^
interrupt void interrupt4(void)
# z' h7 Z* {. `{0 e* p& i( \: P
Uint32 sample;/ m+ M, B7 B8 C9 E# W) _; ]
6 X/ ~9 K; B8 q P sample = input_sample(); // read L + R samples from ADC
& x' s) _& h: z% Q, X$ h output_sample(sample); // write L + R samples to DAC % Z# e3 c( v* V. r% W R
return;
l* H( v' b# r' U S}
' R# n! c v/ q3 s: q6 g8 J) ?
2 y, S; i7 ~) ` j8 w5 Xint main( void )# d" M9 }# u- a* h6 S, N! |
{6 k% P3 I1 k. ]/ g. V; _" n3 i
2 J$ U3 Q7 \6 Q" w$ A
/* Initialize BSL */
8 ?* [2 K% v; v EVMC6747_init( );1 ?" O' N+ q1 X% Q* x
/* Call evmc6747_intr function */
4 w$ H4 J3 F; h6 a% X/ } aic3106_init( );
5 V2 j) U) g4 V% d- Y$ B while(1);) ^+ V, v& Z- c9 y4 {6 I% W
}
) |* X V5 R9 L0 V$ R# _7 a/ |* |9 S6 i
# L% {# y) \5 p) \; N- Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 F, e2 R- Y ^- u5 _1 Z
/* Initialize MCASP1 */3 j4 i% @- O! a8 W) E2 T/ y* ~* a
mcasp = &MCASP_MODULE_1;
2 O3 b) [+ C4 J4 [ o. Z" O; B mcasp->regs->GBLCTL = 0; // Reset
( z9 U( O5 o* c7 Q3 M mcasp->regs->RGBLCTL = 0; // Reset RX
0 v2 W1 p( D7 E# ` mcasp->regs->XGBLCTL = 0; // Reset TX5 D; f0 S2 t# l) Y/ R7 v9 e& n1 d
mcasp->regs->PWRDEMU = 1; // Free-running
& l# Q9 Y( F! ^- E1 U! I( Q // configure McASP0 receive registers
* {0 ~% S6 p0 ~/ D* ?5 t% \+ H mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% y' X+ a7 z2 T. p2 Z2 p H mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. c: J- P2 w8 P. |) e$ N# i i0 c( ^3 T mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: V( Q/ D& c2 k e3 g/ g% L mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 {5 w. ?) [" B# U
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 S. q4 l( O# Y$ c2 `7 t: \6 Z, Q
mcasp->regs->RTDM = 0x00000003; // Slots 0,1% o1 {9 C2 [' r& R
mcasp->regs->RINTCTL = 0x00000000; // Not used2 T( P5 ~# u, q Q. b
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 r$ ^2 e- |) t5 g' X
& J0 k' v9 E8 [% L2 Q mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. r# ^$ p; E. T+ P; z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( R, ]" J) _$ r: n
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' I0 B% D7 P3 H% J! ]+ D( [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- F- s1 g( @& M$ I h2 L& K j0 A mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
! H x O5 d( D3 ~ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, N* G3 a3 v" |/ e mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
: a& P, Y& q/ w: e0 d u6 v mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 s6 p5 f9 k$ Z/ q/ e) U9 T/ e+ ~7 c' ^& V1 c9 E9 h1 Q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* `6 R( [7 M, M p2 ?3 |0 C* h
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: I+ S) P6 x$ Y# n/ K mcasp->regs->PFUNC = 0; // All MCASPs. X0 V, s R8 O8 U& Y. W* a. B* U
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& V7 Y8 x* V) `( I$ J2 f5 I; m- Q2 v, m# F
mcasp->regs->DITCTL = 0x00000000; // Not used
% J S' _# D, y% G0 e$ D mcasp->regs->DLBCTL = 0x00000000; // Not used
- J. N( D% X3 Y* O mcasp->regs->AMUTE = 0x00000000; // Not used
, J" y9 M5 p; k. i( F2 m5 F) s3 P! s& M# U( ]' B: e
/* Starting sections of the McASP*/( j1 P Z0 c, J) D* ]8 `
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 t1 i5 P7 K9 l6 u8 E7 g$ @- X$ c* B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 _( T; a- o: N6 F mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- u# x2 n8 n! c0 I7 J4 T' A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' ?- I) c$ |% L% U! k, j( |3 }& y1 t0 H
6 S/ L `, V: ^9 c) ]9 { mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " n, d- C4 T' d, D$ _: a1 L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ H9 e0 q' _2 F mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ L& u# {9 @! b! U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 V+ Z1 C! f; T; H% U, i5 {
# S' C' m% ^! N: e. ~6 R6 m mcasp->regs->XSTAT = 0x0000ffff; + n2 }' {6 n7 X; z, E% T
mcasp->regs->RSTAT = 0x0000ffff;
* V j# K( j& {& Y4 @. `- m2 j: v* }& h' r
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, \8 V) s* G" }' F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" g: c: w, V& o; _' F6 W
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; w! Z) F& R: n1 C* \# X# C2 t- {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); B$ b& g+ W R; l, Z, T
3 }+ T: S6 ]* j& [( R$ m1 w- f /* Write a 0, so that no underrun occurs after releasing the state machine */% s$ q) I1 g8 Y6 x- x2 w
mcasp->regs->XBUF5 = 0;
0 b; }2 d8 A/ v% i mcasp->regs->RBUF0 = 0;/ E6 d: I( X. u8 `& Z& C' D
( t; Q! T5 c. y$ r! M
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) i# Q/ `, i3 E" i; g2 S4 y$ f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, N9 t* U' p7 e# N1 n mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , E+ b% X- x5 Y0 M Z8 p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 R+ I9 Z1 u4 P6 _+ @$ g [2 g5 \7 [2 ~% R; t6 f
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. l) A" K4 G4 i R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 q& m! ]3 U$ A7 q5 Z" M/ W mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 T8 x# _6 `: W8 l" \2 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ H7 w( A- P2 P. e; C x% @, O$ J2 o6 u3 X1 v. ~' m2 U8 D- p
CSR = 0x0000; }! U) K8 t9 j# S; k
INTC_INTMUX1 = 0x3d;
8 Q4 ^- L* f! s0 I" _; d ISTP = (unsigned int)vectors;( H% F7 E# {$ j
ICR = 0xFFF0;
! l2 l9 n8 O" n$ O IER |= 0x12;
" e3 S z' b/ U6 A" u, [ CSR |= 0x01;
$ }/ m& K9 ?1 ]1 z0 q1 O$ X/ G) u6 G) o' h% [+ e, `
& }9 S' [# O4 V0 v1 w* C
; T( k$ @: T( f7 _还有就是两个输入输出函数:
- Y4 ~6 q5 g2 F$ W) u) uvoid output_sample(Int32 out_data)' [0 s$ u# \% S/ o0 _1 j
{+ O1 I$ B% K) K# |1 i. L
AIC31_data.uint = out_data; . ]* }7 s/ G ~/ T6 p$ x% P
MCASP1_XBUF5_32BIT = AIC31_data.uint; X2 [4 O* }- p2 r! u
}. `& r+ q) g' }# Y, z: k
9 Z, u0 S. H" b w* f, ?4 f8 z
Int32 input_sample(void)
# h: X; W' u0 ~' P8 o: L" e+ t4 g{
. P' m8 p0 Z# g6 E- { AIC31_data.uint = MCASP1_RBUF0_32BIT;0 R+ i3 C3 c* n- u7 O+ [/ e$ r
return (AIC31_data.uint);
4 V2 @9 C2 R" g' O; K}+ C* y! v/ K" t% {# X" I& m
( c9 i6 z, \) V# u
|
|