|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 e% A4 ~& q/ p- g6 k4 A/ ~
main文件:
R0 H9 D: N6 N* n" P5 B7 y' kinterrupt void interrupt4(void)
5 W5 d: r: F% ?- o$ h8 c{
: D8 D6 D- f' V+ R2 { Uint32 sample;
% r# E0 l+ S: Z, I7 x' a. {; ]6 c7 q
sample = input_sample(); // read L + R samples from ADC+ ^: I+ P8 h1 Z5 g9 L" [/ I
output_sample(sample); // write L + R samples to DAC * _- A6 w+ w# X" H9 N- t# c7 G
return;
% R% D2 p$ \5 y# \; E}6 l9 m* P- U, R5 G$ G
! e# b* O/ s) [7 {
int main( void ). n$ I: s! [; T% h4 J( O# H& U
{! u; x) |, s( n. }" Z* \, y7 D
6 ^( k+ B2 D, T% i) J; D
/* Initialize BSL */+ ]0 ~5 {) B1 r, e0 x
EVMC6747_init( );0 L- G/ }0 [: p( H+ W, D
/* Call evmc6747_intr function */2 ?, M( g, B& o5 v- H
aic3106_init( );
4 j5 A {* ~' U- N# Q+ R while(1);" s7 d/ Y& l* m9 @7 |, P* s
}
! ^- K8 B) E" o
1 a( w+ H) |/ l* d W9 ~% o0 a& d4 d" W* B0 x2 k
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: d5 l* X- B3 _( k" ]. \* ?
/* Initialize MCASP1 */. T$ m: @, A. k& q
mcasp = &MCASP_MODULE_1;- S) t' {$ m w/ S$ V! U7 h- p
mcasp->regs->GBLCTL = 0; // Reset# Z1 H- n2 P' ^ S7 Z
mcasp->regs->RGBLCTL = 0; // Reset RX c$ \3 P4 \# d( ?, F
mcasp->regs->XGBLCTL = 0; // Reset TX
6 H4 _7 a# n) a) C2 T mcasp->regs->PWRDEMU = 1; // Free-running
% c) X9 i* S q' m G7 { // configure McASP0 receive registers
) R2 z0 C% J" G2 Z mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used* o) {) l1 i) ]$ u! C
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, [+ q k) S3 A6 Y8 q5 R6 A9 ^ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 b, \- w4 m. A( W
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* M' c+ B; \2 Y& ^
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
! M- \- K8 |0 f, j+ R; F1 G mcasp->regs->RTDM = 0x00000003; // Slots 0,1
$ P$ j( d! J6 A mcasp->regs->RINTCTL = 0x00000000; // Not used% S- T. N @# d, i
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; h( a8 N# P: X2 P
! r n4 n# U0 M2 R+ V mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used* Y* t6 i, B/ `# I$ ~
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. ?" ?& z: I9 }$ Z, @3 ~* i/ j
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( @; U# Q! [; \
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) D0 _) q1 \! V' P mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
) @8 C. V$ t1 M i mcasp->regs->XTDM = 0x00000003; // Slots 0,1
* t& f C5 i* @( A% L T3 F mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# _- ~0 b* Y. f& c- r Q C a
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 v: m$ w _$ p9 V! P- V/ w
9 l* j4 i% H$ x
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN! f+ k. z' \& Y- t8 j
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 F$ Q- X! T! H6 s) O4 m" Q mcasp->regs->PFUNC = 0; // All MCASPs/ O1 H3 T2 K) W$ x" ~" j( d; C8 x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
c( a# ?, n7 o2 O$ i- n' t% w6 m2 e2 A7 u
mcasp->regs->DITCTL = 0x00000000; // Not used/ ~3 V3 J; y/ `% c' r, U
mcasp->regs->DLBCTL = 0x00000000; // Not used0 s8 Z9 z. V6 {. ^9 U. r# L2 Y( D
mcasp->regs->AMUTE = 0x00000000; // Not used& I/ f' [4 O4 {0 X' \5 a T7 x) B
N7 D4 p2 j6 J. E! v U
/* Starting sections of the McASP*/: x+ @5 |: m1 ^# _9 |) \
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / \* Z/ T% v9 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 \( e( A, p3 L5 l; T9 ~ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! Y1 K4 _% ~. F+ y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( a5 R6 Q8 A" M( w
8 A& @% P, t# t! z8 Y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " h7 m+ i" Q- L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* Z; v6 o) c7 Z- Q9 A' S( i( H mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 z4 _6 K2 _7 B1 ]8 ?3 i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );3 z% R! \" V; l1 J; `
9 B2 X8 Y& z _: G6 z* _
mcasp->regs->XSTAT = 0x0000ffff;
+ ^/ L% C5 T$ ] mcasp->regs->RSTAT = 0x0000ffff; 0 u6 ?% M, z, X% z2 w7 X
7 @* l7 l+ d5 m
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# |8 _- R2 y, m) a6 a" D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% L0 k/ v" u5 Q; G3 |* c: x
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 @1 N$ I7 S! l8 J" Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. i% d% ~0 d c) a+ V7 [- b
4 F* q q9 M4 G' g$ P6 W1 a; Q /* Write a 0, so that no underrun occurs after releasing the state machine */
0 y" Q/ `) @0 V+ u N4 P) D mcasp->regs->XBUF5 = 0;
# O& f k+ X$ I mcasp->regs->RBUF0 = 0;( Y8 p- d3 {) E- E
. U1 B2 r! g6 x mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ u9 q) S6 T* ^3 P% B% h7 `/ g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ G' T# ]! t# y8 W mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % p3 M& r9 N0 y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 `9 X4 h& T/ ?( k
) P; m7 z' b" g5 V% m. i mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' P" l. @* h) ^+ x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% z' L' t3 z$ T& Z+ c2 p
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' I: ?/ `9 v8 T' D3 s- w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 o8 { @( U2 I3 m7 ? _4 W8 d
5 S6 a- I6 Y1 P
CSR = 0x0000;
, x7 R3 l6 H: P, @ INTC_INTMUX1 = 0x3d;
. i( w: t2 U; f7 p5 d ISTP = (unsigned int)vectors;, t+ f& {# ?, _6 I2 Q B9 @2 J
ICR = 0xFFF0;
3 s* i5 P# i+ c4 d& b& e! L$ B IER |= 0x12;
% T9 i( a7 u. n% g& n& D CSR |= 0x01; + J7 L7 g5 g: U: L
0 D7 H: v0 b$ s6 N: N3 a) x2 n+ Q4 o! P7 c( O% f0 X1 B
0 O* o$ z% q @5 x! k" _# a! i
还有就是两个输入输出函数:( n& t, x! b1 e7 V: G
void output_sample(Int32 out_data)5 ]8 K( W6 M- ^
{
+ L4 e8 ?* V6 q& \. E! L1 f/ w AIC31_data.uint = out_data;
0 q$ {- o2 h1 J: M MCASP1_XBUF5_32BIT = AIC31_data.uint;; \2 ?0 V& c9 `1 h6 T7 H8 \! t+ q9 c
}& J: F p: F9 A( i
3 H4 f. D# J; q/ Y# N) BInt32 input_sample(void)
3 q1 ] ~8 M8 d, ~/ n6 t3 E1 k{
2 k1 P, P9 x/ E; i AIC31_data.uint = MCASP1_RBUF0_32BIT;
" z5 ]9 c. J% G6 q) A; \ return (AIC31_data.uint); t4 J& }" \, e, e- L) H
}- s2 F b g) z, b$ E' E$ Z. N) ^
. n6 Q0 p' f! D/ E
|
|