|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; F5 W' j9 Y" Z. W, _- x; {# F
main文件:
4 z4 V( S% G! N7 ]$ Iinterrupt void interrupt4(void) ' n7 w' B# i# }+ M5 ~
{' w" Z; E6 m! K3 |% F
Uint32 sample;
# F" K, e/ Y! V, _/ ?4 o; q }- j5 F; Y, a3 O* v
sample = input_sample(); // read L + R samples from ADC
. H, T; f2 o3 e8 [ output_sample(sample); // write L + R samples to DAC
6 m+ N6 i* {, C7 y return;; L* T0 _9 T- M1 O4 _
}
& b, v- K- \$ F+ L# a+ k7 k( J; f; u4 Z6 A( ]
int main( void ); j* ~/ w% I! |6 ~7 {, e3 V% ~
{$ ~& a- ~) Q9 f/ E4 G$ a5 q
% _9 I+ \( o" Z5 y$ q /* Initialize BSL */
: A: r" G+ l, z- D. e* S( a EVMC6747_init( );; z5 A2 X$ [" o
/* Call evmc6747_intr function */- ?0 K& x0 i8 K# z6 C. a+ ~( T
aic3106_init( );1 z" I* C% c& {9 J
while(1);" P( h, |+ L% J' ^$ t% C
}) a; A0 ]9 A q% r9 ~
0 y7 c9 Z1 X5 J
' j% L% {) x! Q/ [7 F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ @# Q6 M4 s7 p& Z/* Initialize MCASP1 */
) V) v' S* u8 d8 N* R mcasp = &MCASP_MODULE_1;) T% O2 {3 h2 [, ~" k, }1 g
mcasp->regs->GBLCTL = 0; // Reset, {0 O- k8 [/ i* C" e
mcasp->regs->RGBLCTL = 0; // Reset RX
) l- z$ ~3 }! {2 {& }9 N mcasp->regs->XGBLCTL = 0; // Reset TX
0 w+ r# n5 Q9 E mcasp->regs->PWRDEMU = 1; // Free-running1 ]8 w6 h. q3 B8 n# `
// configure McASP0 receive registers
3 \1 y" G) r' O' T mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; @/ u; J# P ]0 ` Y
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) @/ U/ `$ t6 N2 n2 ]
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! r. k% z7 a% e$ n0 K5 ?/ Y% K) e mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) |; i: Y9 p8 z% J3 v5 p, g/ A$ K
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' _8 E+ E5 K, p7 d1 k) c% `3 [. e
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
. l. C- Y- k' P' a$ S' c" b mcasp->regs->RINTCTL = 0x00000000; // Not used
Y) Z8 e7 K6 p& Z mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 c. ^ l+ ~& K2 j9 ^( a* D
0 c3 F* }- Y4 z# \8 X- }2 @ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used! C- E5 \. S5 c( V; I
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* U/ L8 }4 w G- f! Y1 C; Z6 E5 a mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) s. n. ]1 Y ~" h2 d: F5 m& ` mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 O( ~, n, C# o" @- U mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( m$ v- s2 ^6 ]; u+ Q1 p8 W( C$ k mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 E8 l, n' v& f4 w4 Y( S" g mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& {0 d5 D- z I, l
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& D7 X9 e$ D% ]6 D+ q" w* J8 Y1 t, j3 H& _9 g9 S/ h% k
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 F1 G) D5 ]+ a; [, x mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! Z; d+ @+ `- H2 w' t1 o3 K mcasp->regs->PFUNC = 0; // All MCASPs
( V' [- J7 p8 H5 ] mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 v2 J1 I7 y3 N8 J
; {+ ?, v) {5 o) D5 E$ W$ B$ V mcasp->regs->DITCTL = 0x00000000; // Not used
* j9 m6 Y# u. n+ P* P mcasp->regs->DLBCTL = 0x00000000; // Not used7 S% y/ L/ Y y( v& U u7 R8 _0 ]
mcasp->regs->AMUTE = 0x00000000; // Not used8 Q; e% L6 Y- N6 ^9 j7 @7 ]. p4 a H$ G
9 \" c2 e( V7 ?! m
/* Starting sections of the McASP*/; T3 T) h; E) S* i3 l O0 j
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 o6 I, T: L- T7 i( L. X6 D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
+ q- h- w- m( y' d: r mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " A' h* D/ ?, f( l8 D2 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. H2 o+ T( @% t4 u1 F/ {
/ H; K+ ?* p1 P6 `/ j( e
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 a7 a1 k! V# v6 D+ s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 Y4 i1 T4 _/ ]7 i( Y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# k1 g: C$ Y8 k! Y, o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; T) V2 d9 W; l2 l" V, v1 x8 x
5 i8 T( d2 u l6 c, W( S& R# ^ mcasp->regs->XSTAT = 0x0000ffff; ( l# G! p( O/ H5 w& u
mcasp->regs->RSTAT = 0x0000ffff;
8 L p" |# M% u4 H& [/ X5 V0 E: D
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* t6 \# X s7 o! j& W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: k, j, s* y0 v& y( Y7 S' v2 z0 S- ?' F5 L
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 Q! G% ]) G6 ? C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. k1 b1 I* K2 ]- f/ e* V
, X2 t& E- }! I3 D0 } /* Write a 0, so that no underrun occurs after releasing the state machine *// i) U# |% m! I# I; R
mcasp->regs->XBUF5 = 0;
) a! Z/ M1 |9 P# e+ D- ]5 Z mcasp->regs->RBUF0 = 0;9 `2 ~# S; N2 x7 d
5 ?1 y9 |" x" ?# [" p, J* b- J, z
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 `1 N0 x2 ~3 m$ \" i3 s) Y2 j. m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
Y/ W2 h# z, H! g. F# `! V3 s mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ l: d; m" P: e6 k! H' k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ F) ^! G6 t+ h; F
O! S9 G/ d/ l! w5 `+ e mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 c# ~4 x3 C" i5 Q0 F' n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 m& q6 V* P: L- o, D# O3 W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 l% ?6 D g; [( R4 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* B; w b8 e# ^
1 [! K6 M/ ^$ r* t# E7 ^
CSR = 0x0000;
2 j. ^( j, ~; A0 _$ p INTC_INTMUX1 = 0x3d;7 I7 B; {, A4 Z" `" q( i R3 o
ISTP = (unsigned int)vectors;5 ]$ v _: n# n) P9 P
ICR = 0xFFF0; / l; d6 }0 S. M6 k, {7 e" G( e0 B
IER |= 0x12; 5 X6 N5 T' w# }
CSR |= 0x01;
' o1 O: C6 n/ U# Y; \" d+ ~% V/ q& ?9 M) x! m/ D
0 K5 G7 U9 ]4 c) X/ P g# ?8 ]" r5 a y7 K) T
还有就是两个输入输出函数: K, n% U; f3 `' J- P/ @& m$ N
void output_sample(Int32 out_data)
: s$ `4 M6 j7 d0 ~{4 I9 ^7 v, ^$ `$ U+ D0 v' C' _# F5 F) T* X
AIC31_data.uint = out_data; * i; i4 R3 T' v/ Z1 S( B$ v
MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 g6 n% b7 a1 f" ~& ?9 t; e8 C}
Q6 J- v3 t r7 s: L" O
# W0 w* E' \ {) |9 w+ HInt32 input_sample(void)
5 `# ~$ `5 X% i0 G{
' q7 h* C; }) Q2 l AIC31_data.uint = MCASP1_RBUF0_32BIT;, Z4 a3 X( b* q! v( |3 I4 A7 F9 d
return (AIC31_data.uint);- X3 r0 Q: `+ |4 \, c
}8 Y# f+ c5 h @7 p2 I
% B1 b- b0 J: |$ j/ v# V. N |
|