|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* _. d# K8 C) ~& t6 A8 u% I
main文件:% ^) S' {1 G n
interrupt void interrupt4(void) 6 z6 r: b& j3 n
{, q2 h, ?: X- G& j! b y
Uint32 sample;% D6 V+ R# L. Q" _8 i
?7 L+ z9 J2 y$ X; \$ _
sample = input_sample(); // read L + R samples from ADC
" |6 |5 v3 h/ d! I5 ~1 L& t6 u4 X output_sample(sample); // write L + R samples to DAC
; h7 A+ u# L/ ~, h: w0 [8 O& f) H return;+ K& P" W$ f8 a0 P, N5 g
}
" T6 t t5 ]1 g& S3 [
& o, t! h0 j6 Dint main( void )+ R! l/ `* N$ D, l4 _+ d
{- [3 y. N3 C/ p, }9 H) e7 K/ W( T
& ?% H4 q1 H- m; x `) H d /* Initialize BSL */6 l5 m6 C0 U) h& A( d# T. h2 h# o
EVMC6747_init( );
5 f7 G6 K9 b5 F- W /* Call evmc6747_intr function */
7 u0 @$ b3 @- `8 ? aic3106_init( );
" L( C; V( T/ s" K; f while(1);
$ ]% B7 \ s" a h6 l}/ R0 c! u `: l' i
# R( @0 i5 s' D& |; d: q' A: i# p0 G/ H9 u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" z& \6 P6 A g6 l1 {& J: R( a
/* Initialize MCASP1 */( z. Q, \; L2 a7 p5 Z
mcasp = &MCASP_MODULE_1;
Z- i' u S) O1 B* J mcasp->regs->GBLCTL = 0; // Reset+ C' Q, H R# y9 g
mcasp->regs->RGBLCTL = 0; // Reset RX
( [$ A' E2 t3 y& ?. ]0 ~ mcasp->regs->XGBLCTL = 0; // Reset TX
" `( v; l. Y e5 U6 [' [ mcasp->regs->PWRDEMU = 1; // Free-running
' X* {6 v/ |. e! z9 Q- A/ U // configure McASP0 receive registers
! e, f! b( @( J. G2 o7 ?8 H1 I mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, M9 @$ d. y% W# N# i! V0 M# p8 M mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 Q5 U7 O% [! X- Q- q
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% i! C" y4 L# z; [: e/ v# @ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), k: \! S" I, _5 o
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ o# M0 @* U% d. h, k/ G- G
mcasp->regs->RTDM = 0x00000003; // Slots 0,19 b9 Q; L' p7 _/ \
mcasp->regs->RINTCTL = 0x00000000; // Not used
7 q" p7 t3 T9 L! V mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 h i/ S* j) F' d
5 e Y; x' r& ?- P' M- v' ]& [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# j4 W/ \! `- F mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: q: g0 ]& a* P; g! ?7 V5 o mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 n8 I& w- z# H, Y1 B
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 s4 L. N7 [! h0 H' Q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( R# j& c# B' h; }+ e mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" u( a( j- O' a+ y# V3 l4 Z- l mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit5 ~- P0 ~% U& y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 H+ s; }- Z. L- y4 q1 r% {/ |5 K. t4 q0 Q4 |+ \$ f" B; f$ k7 k
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 n5 H8 C A" J2 k5 N5 g% E$ S mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 R ~8 L$ |5 O4 K
mcasp->regs->PFUNC = 0; // All MCASPs
: M5 t2 v9 j+ f mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' w& f6 N0 r+ v) D
( L0 K. D; b: ?8 `, ]. V1 Z- k4 [ mcasp->regs->DITCTL = 0x00000000; // Not used. m' R. L3 E3 k2 t
mcasp->regs->DLBCTL = 0x00000000; // Not used
1 K9 A+ U( T3 t5 |' X" j mcasp->regs->AMUTE = 0x00000000; // Not used m B( {3 p6 C% _: K) s' B: h
: F6 l( y* @. z0 B3 \* E+ @
/* Starting sections of the McASP*/6 E( C7 M @) X" p, k
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 M; K! q( o' c; J$ m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 8 m1 R% e8 p; b$ U+ P' {
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! o. V1 F2 N! @+ m& k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 d. ^1 \5 X/ Y% b
: u" p1 L* b0 X; H0 W- u+ h mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - c, S# r6 l5 d4 g2 L% Y3 F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& h! ], g* `5 F' @" J5 f6 N
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 Y6 D4 w% ~* E; b* s" m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 M1 V+ q- c; ~& {- w; p: o. P5 o: |! L- l! y! A6 G
mcasp->regs->XSTAT = 0x0000ffff;
3 l2 i) v5 |2 H9 _0 V mcasp->regs->RSTAT = 0x0000ffff;
8 T7 s1 t' S9 X% J- S+ [* F6 n; }7 e5 S
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( j6 o0 o0 ?; a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 ?0 V: @: K% {' n mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ ?) F, T) N" w! O% a( ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 L, _# ?% V S( l$ X3 j6 K
, \5 D2 i. z) t. d2 V /* Write a 0, so that no underrun occurs after releasing the state machine */
6 K# y/ j. b. {, w# O' b1 j. t mcasp->regs->XBUF5 = 0;
f* D: t- \+ D; t mcasp->regs->RBUF0 = 0;
5 Y7 I, f6 I) N* i8 |0 a) E0 n5 o" `$ {/ {0 K8 F/ ]
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & e6 x" Q( I Y, x% v4 I2 m" Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" c( u: [" V, J3 Y3 J mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 O6 F2 e' i4 |' D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 y: P# q8 T* Y: D; p' v6 t; I
! c; M4 ~. g; ]6 g2 e mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ ?6 l/ _3 f7 T! E, O- b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 B' f/ v, d7 n! u
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 g) L$ }( z0 d1 d' z' O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. `" z: N! Z; l4 {# \5 p1 l" W" `3 T
6 H8 O, M0 M {0 n5 t* C4 l, U
CSR = 0x0000;3 B3 X. M8 }# |! ~$ v: E
INTC_INTMUX1 = 0x3d;
- M0 R* ~3 E( H+ \ ISTP = (unsigned int)vectors;
5 G7 q: o2 D! t# T$ b% N( E ICR = 0xFFF0; : {5 B- k" S3 b
IER |= 0x12; 5 Z, K$ j% Q4 Q9 k
CSR |= 0x01;
- l) G; w6 \0 N4 y6 l
$ |1 r. ^$ P# o ~% _! l" s+ s& g e) C" \% [
/ ^$ ^: M6 o1 r+ f1 y0 o还有就是两个输入输出函数:
" Q( X! |) ]- b! }3 ~void output_sample(Int32 out_data)
k+ L3 V0 |6 x{8 X1 F/ s4 Y$ U9 L
AIC31_data.uint = out_data; ) h4 @1 ?; R/ V" P5 q) z
MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ t, b4 t" }1 b- T}
; N% p& a" l# P( {! I* |1 k
1 c; A. \7 d" i' I5 L( ?0 m/ Y, {Int32 input_sample(void)
7 R" b: t1 ]# Q' l: Z{
. G: x% M+ R6 ~' c$ K' H' u! G AIC31_data.uint = MCASP1_RBUF0_32BIT;/ y5 B0 \! {/ A {- b7 `4 T/ I# ` M
return (AIC31_data.uint);
) P# b, Z% N3 h) C* N}: |3 T5 K9 m5 s( N0 y& j9 X* p* a
6 w9 ~5 L9 P( r2 ~ |
|