|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 S8 R U. D( K; ~1 B
main文件:+ W+ y \; E5 [
interrupt void interrupt4(void) 9 M" m- M: u$ C9 ^ m! E* [
{
+ ^2 B; j4 Q) [ Uint32 sample;8 Y+ H, v w- \
$ v4 ~" h- O' v4 P: j& v* k
sample = input_sample(); // read L + R samples from ADC& v n" x, W3 ]4 H
output_sample(sample); // write L + R samples to DAC ) g, `1 @$ X0 R7 A" q) S
return;( c0 _4 r q* L% i5 r/ w" n4 h8 }
}
0 T( n+ |1 p( v: C6 y
* g8 y% O3 ~+ |/ n& Q# R; cint main( void ): m" }; v6 ?8 f! G, k
{
9 V) w+ }* ?; |) x8 m u/ u9 Z5 E5 K8 q+ J1 i
/* Initialize BSL */$ F& V7 K0 N1 B" G* B: T
EVMC6747_init( );
7 R$ R* B5 K& \4 `6 l, e+ M( R8 Y /* Call evmc6747_intr function */+ Q6 y8 z7 \# t7 i7 l
aic3106_init( );
6 o: r( j6 Y G' t6 V while(1);1 Y i9 _2 x2 _# J& e0 R
}
$ ?; T0 Q8 E8 P
& K0 }- X! G' O0 a; H1 U4 c* k2 e. g
3 O3 F4 I5 X- U" d3 eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 [ R2 X5 o$ o }& t ?
/* Initialize MCASP1 */2 \' T6 C$ u( ]' q8 @) a1 b0 b0 w6 ? \
mcasp = &MCASP_MODULE_1;
6 ]6 G# s/ [. _7 V mcasp->regs->GBLCTL = 0; // Reset6 l. g/ P5 U& d( S# G
mcasp->regs->RGBLCTL = 0; // Reset RX
" b6 M$ e3 j8 Q' F( i$ H mcasp->regs->XGBLCTL = 0; // Reset TX
/ E* v0 d. y. p* |, f mcasp->regs->PWRDEMU = 1; // Free-running
9 q* F0 ?* r6 I, y& Y3 y! P6 ?$ F# o // configure McASP0 receive registers( g3 U. j/ X! v/ d w; _
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 t) q% P! x* T5 Q s' ]
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 G! v/ A0 @% s) j7 _" ~& U
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) m) w4 x# d6 L' j8 b, \% L; v ]
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) m6 D: d& X) ^# ~0 y- ^
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 x6 T, b; k; y: l; @7 f mcasp->regs->RTDM = 0x00000003; // Slots 0,1& J9 Q2 T- V$ q- b# z9 @8 b @
mcasp->regs->RINTCTL = 0x00000000; // Not used
. R9 I* t1 z+ N0 J* G [% I: ` mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 j" Z- |3 b0 [$ F* R/ }7 w- n4 O2 Q9 d* N. O
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ |7 M# B2 b% v$ ]& J mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* i+ c" J9 V" F8 ^
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. N* Q* v# y7 ~. L
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, c( j4 `) b. V
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK! j) V9 J; j8 ~' A' T
mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ y8 Q y4 r5 q D+ \9 a" D
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
. M% ]8 F. o% a" p5 x5 R mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. P. a5 s4 h; K: B
- P/ `' y. p C, |! ` mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" ~/ \) C4 K" z& N
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
9 O9 s- F: K5 U3 c" {4 j mcasp->regs->PFUNC = 0; // All MCASPs
O1 x1 M/ ?% m mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 a: Z2 v) g, {! H! T
- R2 M0 p7 @' {+ D4 S5 b1 s! C
mcasp->regs->DITCTL = 0x00000000; // Not used/ m8 C5 g' K$ [8 `6 n/ ^( j8 K
mcasp->regs->DLBCTL = 0x00000000; // Not used! M9 u+ l1 c4 E2 ~' F- J* f! w
mcasp->regs->AMUTE = 0x00000000; // Not used
1 I2 l# v) |" q3 Q" v: x+ \& e5 n' w- _, K
/* Starting sections of the McASP*/5 y/ p- A0 e% S2 _+ Y5 q% ~( K
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* ], f+ F' V2 v) a0 a% \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 2 _& m$ F0 w9 H1 e' Q
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, X2 B6 |6 |+ q. p5 G$ ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 h9 _ V4 H3 p
3 t- V7 e; Q, X/ `4 A mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. u: u c5 K0 b+ G1 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( J7 a& Q# D, Z0 h mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 G0 V0 \ i6 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON ); s$ z( ?! A; R2 f
+ [' |7 O# v7 Z8 W! c8 E mcasp->regs->XSTAT = 0x0000ffff;
! L% h9 s; V% F) i- x mcasp->regs->RSTAT = 0x0000ffff;
+ ~- ^7 R9 B& r' l; O8 W& ^% l, J! W5 I
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 P0 U8 }" c9 h/ f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* ?9 O$ _2 C* m) C% h
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % M8 G( X1 {; F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! f+ R9 L& r) p) r% u
' d. Q6 K0 T2 P0 n /* Write a 0, so that no underrun occurs after releasing the state machine */
( \: P7 ~4 z( |' m mcasp->regs->XBUF5 = 0;! ?; j9 L3 z' C; M/ a# p* Y' h
mcasp->regs->RBUF0 = 0;0 ^! l* N; ?/ U8 k y" M3 D+ p
5 O( t$ Y( S/ W0 |/ c mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- x: h( a5 Q" a; w4 h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 x# Y( B; Y( z P* @; t' p
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' e3 {4 T3 @9 i. N* b& [1 l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 z1 C; Z& ?& m8 z& T8 @0 Y; \
3 ^! j0 R6 e# T* z8 v3 a& E$ Q8 D3 s! S mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. V% ~% z4 z1 q9 r! A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 ?' h) V9 q( {! r mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 }- B) ]+ C6 _, F3 H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( C3 l8 e$ i6 [% \& O7 u, f
! q8 h' F, ]5 H6 c
CSR = 0x0000;; k# o: v! P' l$ [9 K8 G
INTC_INTMUX1 = 0x3d;
$ X- V. m( S$ A9 N ISTP = (unsigned int)vectors;2 F5 f' q2 n+ Q! Y9 {
ICR = 0xFFF0; , F) C- w& a( ^5 k% S+ @/ j' ~
IER |= 0x12;
9 Z9 C5 D1 T( \4 ?* p CSR |= 0x01;
( V1 r- @5 y- v" Q
/ A; W% w" W# w7 B8 t( l0 o2 |7 W5 R Y" t
6 N: j$ n* x1 {6 H+ H4 U还有就是两个输入输出函数:
6 r6 U" T @( b' p! a8 Y4 Avoid output_sample(Int32 out_data)- {2 I5 @- _* k4 N9 z, N# V9 i+ }
{
4 h' b" D- k1 z AIC31_data.uint = out_data;
+ g8 q* k7 R: Y' S" ?' q2 e MCASP1_XBUF5_32BIT = AIC31_data.uint;3 d) V' k, t% l% N
}7 P! D3 N7 A' t2 ?3 M4 _
- }0 K( P# e* {5 {, i
Int32 input_sample(void)3 s7 i! a, P, E( L* r; n
{
% [) R" @4 Y( x5 | AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ D- Y2 l8 Z& h2 T2 R return (AIC31_data.uint);
8 c7 H6 k8 q3 k8 S}
: @5 k ~5 s2 Q4 W/ p3 O
8 [8 E X+ S$ G6 p1 {8 J% j |
|