|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* M7 A' A6 i+ n% x1 Lmain文件:
% t: U( c" f* f; O$ f* _4 @/ finterrupt void interrupt4(void) 2 j, |2 u1 b @+ F! H
{
. s% m7 D9 D' H K Uint32 sample;
/ M4 Y" W1 Y4 Z" p# ~. M0 M/ p, j/ [! R6 J
sample = input_sample(); // read L + R samples from ADC3 I' w7 K* W/ q! e) v
output_sample(sample); // write L + R samples to DAC
p+ m* X* L, H o; b& f6 Y5 [ return;
; ?! S% W0 D& P' p" U& w}
C" P8 Z5 ]% d( ~, R
$ G! d H7 @" ~( }- ]int main( void )+ d6 s* K- A: H( @0 g: V0 W5 c
{
- ~( [( [9 f p$ `) I& m4 Z5 h( b1 { l
/* Initialize BSL */" S: k7 \# _4 f0 a- [' }
EVMC6747_init( );9 E9 b Z1 [. F1 ~! V& d) L
/* Call evmc6747_intr function */) `2 z$ m4 B o% z2 k; A
aic3106_init( );
}+ m5 | S* O& Z" P- B. p while(1);# }9 N: v( n& r5 i: ]! r x
}* X n6 Y M+ u; w9 X
/ D6 l; Q5 x/ D
/ m% N9 i% T# l9 {( |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: ~4 P) `( `6 e" G/* Initialize MCASP1 */
2 W) y# f$ ]% j mcasp = &MCASP_MODULE_1;
; F! D. {3 @5 a7 P7 r3 V mcasp->regs->GBLCTL = 0; // Reset
* p7 P' M K" v7 P$ m' g mcasp->regs->RGBLCTL = 0; // Reset RX
. l. I4 f6 p! Y# P$ j- J* W/ S7 k mcasp->regs->XGBLCTL = 0; // Reset TX g2 B) t- `$ Z. w. u4 G: H
mcasp->regs->PWRDEMU = 1; // Free-running- \2 C/ \6 R; n/ ?' e% M- f
// configure McASP0 receive registers
8 D! B7 h' ^/ k+ M) g" H mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: i& p: t. b& p) o, E8 X
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ \5 f3 |, X6 L% |# |4 q mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word& i/ B |2 L0 ~; @
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 P4 b3 }: u! ]# r$ u mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 y& j& d; k5 z" K, {2 H; R mcasp->regs->RTDM = 0x00000003; // Slots 0,1 g- c) B. U& D+ I! R1 Y' Q% K& P
mcasp->regs->RINTCTL = 0x00000000; // Not used
! M$ x% S8 Z) V8 v9 h mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% S( w0 } s' O- ], ~! }2 l- s
5 ]' \: e, z4 h* e
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used& N% g& a& M% L# |3 E8 g; a
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: J3 ^6 n8 ~/ y8 `
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# G& Q6 A+ w) i+ y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; [8 ~+ K4 e* R. } ~' w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
T- h* d' }4 [# W mcasp->regs->XTDM = 0x00000003; // Slots 0,13 W8 q+ o5 ~, {: y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; K# ~) X/ O5 Z8 L
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ v2 U" i6 h6 x |- f
, w" B' B* j7 Y9 P/ ~ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN G# M- r. E4 j; R" O* i- p B
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. {$ V8 s- P' R( f% \ mcasp->regs->PFUNC = 0; // All MCASPs
5 A" n- @! |' Q0 w0 ~' ?- m mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 I; f8 h8 r: g; @
4 @" O+ L) _% K+ @: X
mcasp->regs->DITCTL = 0x00000000; // Not used
; l* m: H$ b1 F U: m: D- ?: I mcasp->regs->DLBCTL = 0x00000000; // Not used7 u+ H: Q: _, e% F; w6 X9 @
mcasp->regs->AMUTE = 0x00000000; // Not used
! i8 {1 c$ c, M, q- t8 G5 d
# [. l' k* y! q! j" K3 _# ?9 O/* Starting sections of the McASP*/! G- @( }7 S0 b4 I2 A( z* G! P
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 k- W8 W6 k! u' L" c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 F, s$ F1 Y6 s, P8 ~
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + t5 g+ c3 |4 d9 ^* f5 y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 ]6 p9 F8 b) ^! q- t. q/ a) l- \* A! |' r
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 q8 _2 E+ n0 N4 ^" C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: ~, Y& p' e, \+ r% X. H' Y mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 G. ]. h, ^! K9 |% ?2 c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 z) Y9 P0 t" H$ }& @
; A; J+ T' S; T a; O" E mcasp->regs->XSTAT = 0x0000ffff;
4 a' t: t) C' [% o4 u# M mcasp->regs->RSTAT = 0x0000ffff; 2 T1 }2 t x3 f5 \$ X) v2 K. ?
2 k: ~. `7 B4 c% e' e mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 @! |* {: A. e' M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! H4 r" k9 g- a
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" I! {- s5 Q F5 t! F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% n: c6 U$ y8 C! J) e1 |0 A2 ?+ P0 ~* x9 B8 z8 i: I. l
/* Write a 0, so that no underrun occurs after releasing the state machine */
, C4 Q5 ~1 q/ ?- K mcasp->regs->XBUF5 = 0;' q5 @& M. }. m9 A: Z' I
mcasp->regs->RBUF0 = 0;* Q& h9 L6 R! J" \! c
% A v; m8 I3 V6 F1 X. @ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) a" r: O/ @! ^& L; C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: q9 R8 G$ w& c$ v- p# l, R0 l6 i mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 `. w$ I8 _2 ]6 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: z9 X' U6 [9 G# c
, M. ~( N- q { O, c
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* o6 }7 H" X* ?) [$ Y6 i. K0 G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ G% ]% ]8 }9 G. Q/ _5 H" w4 W mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 f* @; o p3 Z$ X% s# R- O# i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& t. w4 i: T, \# J% f( z
7 N$ M) v. j2 z% l0 _ CSR = 0x0000;0 _. P5 i5 p4 W+ }; O
INTC_INTMUX1 = 0x3d;5 x/ u* B! N$ ~3 ^
ISTP = (unsigned int)vectors; r5 E9 ^1 z6 \7 N* m4 V
ICR = 0xFFF0; 2 I( \" B' y* y9 w! }5 k$ I; x9 b+ p
IER |= 0x12;
4 r4 X% Z' K( \: g1 | CSR |= 0x01; / j) S! l: w( U# _1 U5 i
2 ^2 ~' x4 L% d) _9 Y* ^3 b, L
& V) B, c) i2 Y2 l1 c
3 H1 w* P" a" i还有就是两个输入输出函数:; D9 o( g/ B' e( o) {' D# Z$ \. d' [
void output_sample(Int32 out_data)
" o. q4 n5 D4 |; V P2 ~# H: N{- |- r9 V3 V! l1 b( `
AIC31_data.uint = out_data;
A: ?) d& X% M' G) [& c: f MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 b6 `) t2 W) B: C}3 z% T' Q1 C* k/ O# ~) N4 X
: @; U$ [! y# f. N# f; I
Int32 input_sample(void)# O, K) g0 s& l
{
, S8 y" Z1 G7 N. N6 I3 ~% g% l) [ AIC31_data.uint = MCASP1_RBUF0_32BIT;9 P( j+ G# l7 m( p2 c! Q( l
return (AIC31_data.uint);
! L/ V. n" N& H" J( q! E! j}
: C7 D& ]: T' [" l: z& V4 z
4 c6 K" r+ u# S& { |
|