|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; ^3 b: X9 `6 V7 Q: C7 b6 h
main文件:
U0 N5 Q7 H( a# S4 E/ cinterrupt void interrupt4(void)
j1 @1 D# h+ X0 u9 v( U{: p+ @* P) p7 ~, ?1 U
Uint32 sample;
8 ]' Q$ P. e: `/ k3 W# g
, b% E; {, d$ s/ J' t% A/ F sample = input_sample(); // read L + R samples from ADC
: e* ~0 \5 [* D output_sample(sample); // write L + R samples to DAC
* y& r! f6 Y, V2 x5 b1 p return;8 q2 c& ?+ }4 F; R% F
}
: f- U L. K! K! e( m% t6 M) l% R5 T) c' f. G& ^7 b. J
int main( void )
0 n8 t8 @5 O5 ?# g+ U{
0 j+ H X$ b( l; `7 C) z
! i4 N. H2 k, O! m /* Initialize BSL */
- y U: ? C8 m EVMC6747_init( );
( ^" B7 g2 R) j, w+ b /* Call evmc6747_intr function */
' H8 C z7 w( m& l, A1 z" y aic3106_init( );
) v5 v7 P! f0 k5 F: X- ^ while(1);
$ _ Y; s8 C$ ]% T}( ?( ?; m# j" p& _7 P& B
" L) p& k2 A; R* I8 e; |
" P. E' Q: J% U& K5 }, kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 Y' X6 s" P+ E9 z
/* Initialize MCASP1 */9 y& ^7 j/ g' c
mcasp = &MCASP_MODULE_1;( w1 B$ S7 M: h$ A b
mcasp->regs->GBLCTL = 0; // Reset
* D r7 F M& U- J" P mcasp->regs->RGBLCTL = 0; // Reset RX1 {6 t8 |) n- t5 O1 w& i3 i5 O+ |
mcasp->regs->XGBLCTL = 0; // Reset TX! D. l( O% B/ g8 B: d& J! M
mcasp->regs->PWRDEMU = 1; // Free-running
/ a U+ D! `7 L4 F# p // configure McASP0 receive registers; `/ x9 N; F' [+ k) \2 f# |* E- f) T) y
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 e8 I# Z% z4 {# w" E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' o1 A- T8 R8 Y! n8 a4 ~6 B! v
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word" u3 ^7 N5 x" K
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, F9 |# l* K! m0 R5 _ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 L4 L! p; {& j2 J& x, U; a
mcasp->regs->RTDM = 0x00000003; // Slots 0,1; T+ F. m8 `1 f9 J- T2 j
mcasp->regs->RINTCTL = 0x00000000; // Not used
. L4 ^+ A* }! D7 d; R5 U1 J# l! K9 I" k mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 Q6 e" o& w5 {( j, B6 ^- K) Y$ |( v/ J" O6 Y& I
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used# x$ t+ x( q3 X% N; _: M
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" o7 c2 X& x5 g8 k" g
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; \0 l: |( e! [
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ F- t6 E- B) }7 i mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK# I8 }: |/ ~6 C& p$ c/ u* P1 r' q& K
mcasp->regs->XTDM = 0x00000003; // Slots 0,19 K# m3 g3 u4 p7 \- t
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit5 z2 R! S3 P g; Z, a2 o
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% u7 ~6 s. J" [6 A
$ b+ }! }: z2 I) S
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
; J$ e9 T2 c, @0 w. x$ o mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
- k' l+ M( ^# E( F mcasp->regs->PFUNC = 0; // All MCASPs; T% Q3 q+ J! t; P# l! S* W
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* G, l5 M9 j3 V. U+ g0 U, a- C; v
( p4 O5 X$ ~% O8 Z2 a mcasp->regs->DITCTL = 0x00000000; // Not used6 x4 D' {+ o& F( F; ]8 N" W9 t$ Q/ V
mcasp->regs->DLBCTL = 0x00000000; // Not used" S* _/ n4 K# B0 m N
mcasp->regs->AMUTE = 0x00000000; // Not used: D5 Q) N1 D; X$ w8 v N. y
9 x2 R- j) F/ s% U# ]/ m/* Starting sections of the McASP*/
% P' K$ |. U5 h8 p mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 N0 ~6 g3 k, F" x' K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 J) q. ~" M' t/ Y+ b: x mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; e5 f5 [/ ?7 s) n& n& M5 ~/ X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ R- R) U- x, J/ Q
" v! J2 ^4 Q1 h3 C, e& }: e- z) A mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 i; A7 z0 d @7 z/ G5 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; F! b! g' X3 R% y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 B& s3 |0 c$ E. q O# \& P* N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ H+ `' _' L3 f7 w
+ b i3 w+ H' F! y4 L
mcasp->regs->XSTAT = 0x0000ffff;
3 ]# ~' a; Y) `, H+ A7 I mcasp->regs->RSTAT = 0x0000ffff; $ U, I* @6 Z7 i/ o. O8 B* D
* ?! h8 [; e9 P! l6 d mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* L, E) Z4 h/ x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, J2 W0 `3 E+ M mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ @; D/ @0 e; t+ [; {( {3 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 K# W) Y/ B+ g! Y) V" R
& j) k/ s9 F* {0 S /* Write a 0, so that no underrun occurs after releasing the state machine */+ _, ?; k4 r! ~- r0 I+ b, I1 d8 A
mcasp->regs->XBUF5 = 0; g: E2 [8 w' Q) B8 {' f0 T
mcasp->regs->RBUF0 = 0;! b7 z3 @' c. K& U0 _
* G: j7 j. P _' [+ ~
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 V/ e& a$ _# l4 x% {% R5 L* D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' G q% ^+ v( P+ s& I$ ]" P4 x mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 \- f; o8 P- Y; e% M$ M2 T* [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 g. k. @$ J' }3 ^
2 ?1 ^, e! [9 c7 [) r: m mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
3 @+ n; y9 G a$ \ e; o8 n! q1 A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% [4 A1 Y- z3 q; d7 R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 Z. f7 d2 c0 t9 y2 e. W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON ); A1 k+ I' Q9 ~2 v6 c# A
& r: ^8 l2 M0 @% X( T$ `+ l; O! a
CSR = 0x0000;
+ N9 A; S" t4 Z" ^$ `- p) | INTC_INTMUX1 = 0x3d;7 `7 Y* C: `6 g8 c
ISTP = (unsigned int)vectors;
" X- `( s" I* p) k! m% B7 v- m ICR = 0xFFF0; $ Z0 h/ j" @! ^9 b
IER |= 0x12; 2 }: I4 |) {$ x* k* f0 B. x( j
CSR |= 0x01;
, z9 T5 v2 {! I& w: o& I( @+ A
) J. G7 ^4 g/ M* P! t2 N
3 d% F+ W/ v0 T5 n4 K# N0 [+ @7 c3 d& P H: ~2 h5 a3 H# z5 w- I2 N+ f* j
还有就是两个输入输出函数:
% ?$ p# [- ^6 Y H: y' ^! S: U1 \void output_sample(Int32 out_data). H9 e- j4 p6 y4 \8 ]
{. [5 l+ w5 F d7 z9 i- b
AIC31_data.uint = out_data; # L9 Z6 J" Q7 {2 ~1 @; ~
MCASP1_XBUF5_32BIT = AIC31_data.uint;* }" Q* [4 S' c$ S' y; o
}7 @( J% m% n) Z X. i6 ?: X
( N. A" ^) l) u+ cInt32 input_sample(void)' I I% P2 d+ c) M8 [
{ ) H- _# C- p6 e' t9 [5 J: T( m# z
AIC31_data.uint = MCASP1_RBUF0_32BIT;
; O8 U3 Q0 J `" a& A: b return (AIC31_data.uint);( L5 p3 K4 G% y" ?4 L0 I
}8 w( ?6 M; i1 P7 G
2 ^9 \2 o% J9 G2 F+ ^ |
|