|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% ^' m: \( m: R: Y4 W/ C9 |( V% V
main文件:, g. P Z- N1 p7 r/ Z. w
interrupt void interrupt4(void) ' R5 f! f3 W/ n: [/ B
{
& ?% W8 R' ~* v \5 y* i Uint32 sample;6 b, G! ] [# z
' D) P7 S1 l$ q sample = input_sample(); // read L + R samples from ADC
2 ~$ r, i2 ^! {: ~/ } output_sample(sample); // write L + R samples to DAC
, e$ f* m0 i* E return;/ ]( |2 \0 j3 |5 u
}- o" n2 f% Q" D. p& F
$ ?+ Z+ Y' {- iint main( void ): H* h0 V8 A7 u; o/ @6 W
{
6 B2 M! ^+ ? J5 }/ |* u0 W+ r- w
) z$ w$ l1 \( \ S: r' c+ D6 Z* U /* Initialize BSL */
7 Q& t4 e4 C) P; r( W3 B EVMC6747_init( );2 B# H/ M. l( i% T/ u8 O
/* Call evmc6747_intr function */: |7 O" A$ U! ^, B8 H
aic3106_init( );$ G1 G/ `* I; I F. e
while(1);4 Y% Q# z5 n& |3 ^- G$ L5 A
}1 }9 _2 w4 X1 \9 k! P
, Z8 [2 o( f- [- i3 P& n. V; o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 h# i4 o: V# ?' C9 r: h/* Initialize MCASP1 *// D) P6 O; R. a2 {0 B+ l
mcasp = &MCASP_MODULE_1;# n# n- ?# t: `6 Q5 v
mcasp->regs->GBLCTL = 0; // Reset9 d' U0 }" ^7 {
mcasp->regs->RGBLCTL = 0; // Reset RX9 B7 ]$ n: ~- K% a' m* ^
mcasp->regs->XGBLCTL = 0; // Reset TX! x% W1 a& z# r0 L% m
mcasp->regs->PWRDEMU = 1; // Free-running
- H( u1 ?5 H8 m \- J) _ // configure McASP0 receive registers
' p6 \! g, d" S5 M3 v mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( o7 x' E& u5 |$ d3 K% F$ ]( i. Q8 j mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 Q$ \% ~; J4 N- t3 U" I
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word K. O; T% g- M9 u" P" K
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! F! ?, N4 f" A; X6 D
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% m; p7 g8 U' ]8 g0 |* x mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# k) @8 l7 X" I mcasp->regs->RINTCTL = 0x00000000; // Not used1 V& J0 h3 x# _1 q! S3 J6 r
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 h# _; r# q3 z+ G+ C
9 A" Z5 Y# T% b; C- R( r
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used' f' F/ }' ^6 m7 x/ A" d
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( K. {1 z; Z! m! \. x
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 x& ?8 y7 G! N' `4 g6 M
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 x3 D, B! n; } mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK$ \! x" g8 R: S( w0 T) Q9 c3 R1 \3 R
mcasp->regs->XTDM = 0x00000003; // Slots 0,18 X$ D* z, f6 q# S% e* O, ^
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit, H: n) V- f& E: y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ \2 Q N0 X* m. L7 w& a
. l# S! ]6 V6 W9 R; z9 _+ u mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! k5 `/ p) M% ^& D7 n/ C6 k2 ] mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! u5 U$ U7 D7 a mcasp->regs->PFUNC = 0; // All MCASPs
/ u: X1 f% I* J! i mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 M+ M) F* {$ _ \$ q! {) ^9 R
7 y8 H: \8 b! c5 g; {2 @9 |4 Z
mcasp->regs->DITCTL = 0x00000000; // Not used7 H9 y3 F5 X( p+ Y% ?
mcasp->regs->DLBCTL = 0x00000000; // Not used- S+ N1 c& a: \6 S
mcasp->regs->AMUTE = 0x00000000; // Not used2 I& `' c' Q+ x& l) s( O6 g
0 V& }& J1 p! D) E+ T/* Starting sections of the McASP*/3 K- D/ c2 _2 Y
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ c6 z' L8 o# y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
; s# w# b3 ^' P% M mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 ^ A- y5 r$ @. | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ J( P! O1 |% }. U' @' N8 R3 i* M+ N9 W' D7 @1 g+ K7 v/ S
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# [' u' T/ K9 s4 L1 H* D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. L: B0 D: [. y9 I5 ]
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 B. V! Q$ T [ E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ }' V. V' y* N3 g8 ]- [. F8 W0 y* N5 a$ Q. X$ o
mcasp->regs->XSTAT = 0x0000ffff;
& B% H1 ]6 z H2 M mcasp->regs->RSTAT = 0x0000ffff; 9 l* l. j2 o7 m+ }4 T) ?
( H4 p7 A# u5 Z$ y, d) T5 M1 Z
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. ~3 f% A1 C! l, b8 q, b% Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 C0 z. G9 F5 _ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 K: z, f' a a4 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, F. {5 @( m; W8 P, W
7 W: @1 W% t1 F /* Write a 0, so that no underrun occurs after releasing the state machine */
: U' F/ Z) w. F$ F/ V mcasp->regs->XBUF5 = 0;
5 a6 l0 j" \) M$ u9 {- h/ r. F9 h mcasp->regs->RBUF0 = 0;% r3 o. t+ G1 s" T
N9 M7 ?, x+ `4 I3 V) j
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# X% Q# W% ~# ^; B. i2 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 T5 t4 ?/ @- R; _+ j2 n5 ]2 g0 V" Z4 y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( _0 V9 `- W/ t: w$ O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- C2 `0 Y- t8 a
7 L+ W0 e$ _& a; N- B mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & ]4 r ~) m( J% i' Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ D) W; r, V+ B* v/ v. e mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( ], m- }7 \/ R, A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% b+ O2 Z6 n2 X( c7 V& ~7 w& G0 _( f9 _9 ?5 @6 b1 o
CSR = 0x0000;0 J; I8 d- t( a7 h9 Y
INTC_INTMUX1 = 0x3d; W c& o$ Y+ s+ u7 q7 m# A
ISTP = (unsigned int)vectors;
8 u5 q$ w/ S5 ^. m ICR = 0xFFF0;
/ F1 h6 c' i$ r( c+ m; K9 q* |! ` IER |= 0x12; 1 q: a) ^# D" d0 a
CSR |= 0x01; 9 ~: h* U: k3 V( F
% }, W8 E4 A7 L a- `% Q( g8 @0 h( p2 u, n
7 d& ]" G9 j7 {
还有就是两个输入输出函数:- c3 m% X4 I$ B+ L3 k
void output_sample(Int32 out_data)
- d) U6 P3 O; N& \2 @+ ~{- X7 [# I( |" K4 V( W: d4 w
AIC31_data.uint = out_data; ' S( L* p' _# {" u8 i! L! i
MCASP1_XBUF5_32BIT = AIC31_data.uint;- O- I" }% h3 ^: Z# S' x
}
- Q( R7 x- g+ a1 v' k; |. T
1 [% t( N% [5 n$ u0 eInt32 input_sample(void)
0 O. l) R! t# q6 e( v( ?: O+ h{ 1 K- M. ~* p, k/ k+ k" q
AIC31_data.uint = MCASP1_RBUF0_32BIT;$ K4 r6 [9 }* w+ L
return (AIC31_data.uint);; G1 h: c O/ i. \5 R. |6 D5 v7 e
}; e# L$ ~! _* I6 |3 |0 i' ?* T" A
% u! Z8 u8 n7 Z* J6 [2 P7 h
|
|