|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 Z+ B" R# E2 L4 ^7 f; f
main文件:
, v% G/ C9 H5 y( cinterrupt void interrupt4(void) ' q2 B& _4 O$ q( u1 m# I r0 b
{0 H' e6 D( b0 |: P0 {
Uint32 sample;7 j: w. Z# @& c, i0 J7 n4 ^; E
2 x( w# F8 \& T, Q sample = input_sample(); // read L + R samples from ADC
/ [" p' U8 c9 m, z( o output_sample(sample); // write L + R samples to DAC 3 l8 r' G( I: H
return; ]( Z: B! j& ]2 O3 w" ]/ _
}
: ^) G5 @& Y" c
9 c2 A( f1 O8 P; Q- lint main( void ). }! r8 J$ T, l) {
{
8 g' C; `" W4 ^; W0 a0 \: z; D' U5 x0 _
/* Initialize BSL */
- P! S, }& |, d' e8 D" o EVMC6747_init( );
* `) |8 ?& G' _. T /* Call evmc6747_intr function */! y. ]2 B+ |. r- u ^
aic3106_init( );
! ~+ ~1 {+ q6 Z% H# L while(1);/ f2 f; F# v' V$ {% v
}
3 P9 ^) p8 F6 z( p2 o7 `# I, v
; Z. H$ s9 B6 l* D8 l1 ?$ F0 O, ~
8 x" V( S2 c$ }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) E& j" X+ U! N ], S9 g0 u* V/* Initialize MCASP1 */" F) H+ g' P# }/ [% i; p& u6 g
mcasp = &MCASP_MODULE_1;+ n5 g, o* `, b7 H9 s
mcasp->regs->GBLCTL = 0; // Reset
' f; J" \- O I6 [* l! L; ^ mcasp->regs->RGBLCTL = 0; // Reset RX
6 f, E$ s3 `5 Z5 A6 U b. K2 E mcasp->regs->XGBLCTL = 0; // Reset TX7 z' u( A) @& H) p9 U- k6 v
mcasp->regs->PWRDEMU = 1; // Free-running7 d$ Q, S2 f4 K5 R" E# j7 I8 d* Y
// configure McASP0 receive registers) G9 q2 Q! K& V
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
2 t* ?' ~, o1 V; @ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
H6 c. g& |( R) U' ?+ d, n mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 ?% M; C% K1 A2 L. n3 t
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ y) {4 @) e0 i4 T; b% x mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, K* {& Z- J; e) X- y mcasp->regs->RTDM = 0x00000003; // Slots 0,15 w( ^9 m, o) k" W x1 c
mcasp->regs->RINTCTL = 0x00000000; // Not used
2 J* I- T( B4 j mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ l6 Q, @/ c0 c4 S
4 U, O. p. Y7 D# s3 p5 y, h1 V5 V1 `3 X
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 D7 w) H! @) ?0 ?
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 e, i1 r* e. I8 ~) j, N mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: W3 w9 i/ E" ]
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 l* Z5 W5 v8 m* ^4 F mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
1 F$ ]3 _- k, s9 W& |5 @ mcasp->regs->XTDM = 0x00000003; // Slots 0,1, q7 c! }6 N) X5 l
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# f- ?$ K! L' A
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( X+ k/ j, W; E+ W1 H( d/ F/ u
8 \. d% `: {- G: { mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 t9 C, X0 g% x8 D7 D3 b H# u mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 n7 ?4 {' b1 p
mcasp->regs->PFUNC = 0; // All MCASPs
" a* g8 Y* {- r mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& i4 p3 k) ?5 U6 V9 `9 b. b$ T$ T, [% J4 C2 u4 G+ f- n
mcasp->regs->DITCTL = 0x00000000; // Not used3 F6 b) j$ z- B$ c
mcasp->regs->DLBCTL = 0x00000000; // Not used
4 K# W I' d% K8 ? H; G. t9 n mcasp->regs->AMUTE = 0x00000000; // Not used
6 a. ]! _# P$ Q' H. o5 N! P+ i0 }( t6 _' g Q- h
/* Starting sections of the McASP*/
: m2 G2 ]4 n* E# ?! f5 z O mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 b0 {; r/ j9 [2 y8 `' P- j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 j6 B: L5 J' F: O/ `; d mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' x6 h4 |3 H4 u2 c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ `- ]6 x/ L. {: w" ^4 _4 M: i
* w6 V' J6 M7 G2 M6 A c$ B) T# i mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 \8 o# @9 [7 |; [$ s/ q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 G4 A- P, e6 T1 k* ~ }: N4 g5 L
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & ?9 s% q8 L, P; Y/ ~8 Y; u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 i) ^( V+ w8 O# e Z
# f( r8 @- D ~& H. e' z mcasp->regs->XSTAT = 0x0000ffff; ) ]8 @2 P T/ R8 L
mcasp->regs->RSTAT = 0x0000ffff; K* S+ s" ?9 Q: Y
% N, F- W6 _5 M2 t& | M0 D0 e
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ z1 s t. i1 I1 w7 e4 S: W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! |# p( A! z. S( M" @
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 D6 L' {) Z( F" e* d8 L, z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% S1 ?+ _* r* j$ H" B. A. M' ]2 h! S! B% B6 B4 h
/* Write a 0, so that no underrun occurs after releasing the state machine */. U$ x! f9 D( S7 i* b5 r3 Z& n7 k6 h3 {
mcasp->regs->XBUF5 = 0;/ \, L0 Q- y' |" K Q8 G
mcasp->regs->RBUF0 = 0;
9 H2 y( B: e; Z `2 ^
+ d2 F! B# c! C$ g: L. I mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / o* U) K/ T1 @3 B+ M& r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 ~4 T: m0 x1 N6 O. z$ r( L
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " I+ `! ~* \ w0 G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ t% {! c8 \2 n+ P& L; N! D" { F2 ^2 r, x
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 h8 ~+ f5 Z6 @5 R1 n' @! ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. y) s% _1 J5 V8 | mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 Y9 ]9 V" r' u8 y0 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% B. O) P1 L" {2 {* N( C
4 M" Z8 V4 n0 P- o3 n# B
CSR = 0x0000;; t+ b Y w' E! _, C
INTC_INTMUX1 = 0x3d;
( \. i% T! W" V0 Q ISTP = (unsigned int)vectors;
3 Z m' V4 j i- Y1 r, K ICR = 0xFFF0; 4 \, M9 S! O$ m
IER |= 0x12;
, N7 Q9 r4 y( l" f6 s CSR |= 0x01;
. _/ C6 r8 E' M3 ~# [
* B; D, n$ v" l/ y. ^ r0 }- U8 j5 r- x* Q$ T, e% T/ M" Z
7 P( R+ @4 O# u# p0 o- ~6 N) e
还有就是两个输入输出函数:' \( p6 {! m: u7 `8 \* b: Z
void output_sample(Int32 out_data)+ O( G0 Y2 ]8 t" Z. v4 q
{
) r' F" _$ w& s- Q AIC31_data.uint = out_data; 7 m/ G* Y3 g; l* [- O8 @
MCASP1_XBUF5_32BIT = AIC31_data.uint;6 p4 R8 ^+ \7 h4 u- w/ U; y3 d
}3 d9 o5 R$ b. q* V7 w
( Q2 r& @& d: \Int32 input_sample(void)9 m2 w* d0 S; ?0 W( m
{
( f: H+ i0 c5 x5 Y2 N: m5 _# { AIC31_data.uint = MCASP1_RBUF0_32BIT;8 B, }- H4 K: k; U$ {4 ?
return (AIC31_data.uint);
0 s% K( `9 a# r5 o; `5 K}2 Z' x6 T" }" r
; T# b: l$ S6 t4 e3 G% E5 _ |
|