|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* V9 s# U8 K$ Z3 J
main文件:
r& X% b0 d4 w8 dinterrupt void interrupt4(void) # x0 j& A& {# V( R+ ^$ J' t
{
; w2 G+ {6 p |7 p Uint32 sample;
6 Q5 x2 V4 h' J3 \" K# w* d' Q8 ^ F, k8 i3 e( g& B6 M: C. E- n
sample = input_sample(); // read L + R samples from ADC
- u' v- H. `+ O/ i output_sample(sample); // write L + R samples to DAC
; R. H, h& Y3 a3 D; A: r, L' O return;
& b" U" N3 b+ n: |- ^}& O; M6 d+ C8 ~5 o# v2 J% `
; u: _$ P0 _$ t6 [8 v/ V% Eint main( void )
: J0 H2 Y Y/ A{# c z# o, V% j- i v$ O
- x! R9 s+ i6 h' l1 W+ y
/* Initialize BSL */3 f, O0 u. Y/ I; d
EVMC6747_init( );
6 i. K- A* w) ?) L2 M /* Call evmc6747_intr function */8 T) F( m1 Z0 C6 j1 B8 h
aic3106_init( );2 T7 j! l1 B/ g3 f
while(1);
1 M# C# o3 l7 m' w# r5 O3 k! {, {}" a: q1 j, g+ t
& ^ w" B# y4 _7 _& ]
; c7 M& @7 p i: Q# w5 f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" D; ^& p7 ]# l( S B( q/* Initialize MCASP1 */
0 r4 E/ h. M: e/ Z% X1 S1 |( e mcasp = &MCASP_MODULE_1;
9 D8 p+ A3 w* ?# j mcasp->regs->GBLCTL = 0; // Reset9 ]" b& ^' x) j: x4 p
mcasp->regs->RGBLCTL = 0; // Reset RX( E" J0 ]! P; n6 Z) O3 `
mcasp->regs->XGBLCTL = 0; // Reset TX" _* Q6 I2 J/ g7 Z, I# c
mcasp->regs->PWRDEMU = 1; // Free-running
1 w, Y# T+ o" f( [: i // configure McASP0 receive registers U: _8 {6 Z- ?4 w/ _! n
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 H, \4 c8 X7 l3 N1 P mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# A; m- i& f% o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 O) t1 ?% y& J( v
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 g8 T8 M6 C4 c9 A, h4 Q5 m' p3 S
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
; _! {- z0 z1 E5 A) t! x mcasp->regs->RTDM = 0x00000003; // Slots 0,1
- z7 f j+ S1 B, S* m) z mcasp->regs->RINTCTL = 0x00000000; // Not used
/ f( L8 Y0 q3 i7 j5 l2 T; S7 b mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 ]. i; G4 K2 j @9 ]: L$ j
+ D8 P; Y9 W8 d9 B! t. z4 y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) q! Z- } N# {, z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
[3 n2 S5 W7 E6 \7 L% k0 G mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 Y$ B+ B6 T1 I( A/ J" @0 W mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( T# \ }/ j& s, k8 i+ t' e3 ] mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: e+ x* s. a' d/ W( a! v
mcasp->regs->XTDM = 0x00000003; // Slots 0,1* J# c9 Y8 D/ d6 O, l4 h* G
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! v* W1 T3 V/ S) l5 T
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 }( [! G- n3 ^7 W1 v7 G
# _- j8 F. z, U: u! Y mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN$ v S0 f/ w5 d& h2 U. A( r4 I
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! _. C: a, Q b& q mcasp->regs->PFUNC = 0; // All MCASPs8 m! ^! o' ?5 d+ N$ K2 P, [/ C8 C x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 j2 ~" }" D4 F9 O
+ U6 s, I3 X9 c3 t2 }* k5 Q mcasp->regs->DITCTL = 0x00000000; // Not used7 z8 ` v& @, @# k
mcasp->regs->DLBCTL = 0x00000000; // Not used& {3 d& v% }2 G# y: a: W+ V
mcasp->regs->AMUTE = 0x00000000; // Not used0 a# b$ n4 H" z# A7 w/ \0 j3 Z& r
+ }3 i8 N+ {; P( I3 Y2 ?/ B8 a
/* Starting sections of the McASP*/ P8 T+ B5 k* y' g' u. d
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 ~8 f! j# B3 ]+ G$ |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
+ Z) J4 \! |. ^# T/ R1 v7 L mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 x5 g" h6 M* J* O& a1 n4 E( v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* D6 x; W l. d- C u' C% v1 l/ n. q
g! C! z- o0 J- z- j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) I. f4 f/ c; a7 g( H; g% x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 W W2 W3 e( r3 v% S3 f# J6 | mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 {0 a$ d0 R y4 `5 N. E8 s$ n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- c& W" d$ { @0 u7 v
5 e' q7 }! @6 H" L3 G mcasp->regs->XSTAT = 0x0000ffff; 3 p' o2 n. Q2 E5 G5 I) i, K# \
mcasp->regs->RSTAT = 0x0000ffff; . e" m" u7 d3 | D* m6 E' M1 L: {
* |6 U" u' f$ I M' o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 J& P! s# G8 X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, ~' w4 _6 r1 q4 M( t# U$ q mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 Z ?- A9 ^9 v D: W" X! ` Y) R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 s5 e! N A- G
2 K3 t- {* Z0 I* A /* Write a 0, so that no underrun occurs after releasing the state machine */& U' r+ R4 k( K7 E, n6 H
mcasp->regs->XBUF5 = 0;
% N. N4 o' S/ Z* d mcasp->regs->RBUF0 = 0;
^4 y2 d. I" Z& C* R; Q, U
# I8 }& E' w1 Y# {; t mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 U( B f+ s# H$ S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 Y" E1 p% p. S8 I8 t' W mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 e2 z" m; c: y- D; i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, F, }+ w; L5 U3 B
+ E" M/ R. [7 s& F mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ h0 t# X8 g6 y3 T: X: t# q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# |6 D( D% h# E) w' k8 r7 O! K+ p
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 j/ r! c0 O# C7 w6 Y% h' X; d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 W" l; {' L* ]0 c+ b. B
) y4 m6 Z; [/ W% c0 w9 j CSR = 0x0000;
! b0 t2 r# d( n8 o9 |/ L INTC_INTMUX1 = 0x3d;6 D {) t3 E) f' {6 m+ ~
ISTP = (unsigned int)vectors;
4 D' i5 C! f8 e2 w" A: y ICR = 0xFFF0; 4 j% ~& h! u9 Z: L# |5 z
IER |= 0x12;
( {, Q" R# y/ m; n' v3 l CSR |= 0x01; . U3 A% `8 Q3 M
% `$ x9 M0 @# u& R9 l+ D
: z9 R$ e2 U& m
* y! G4 I* J% ] R8 I* s( {$ V& v还有就是两个输入输出函数:
* c+ @( |3 a* G! f9 r. [0 Nvoid output_sample(Int32 out_data)
7 I G' L( e9 s& A{
# E' L' O1 w f x8 z4 b+ s AIC31_data.uint = out_data;
3 J, b3 q0 `* ?" R MCASP1_XBUF5_32BIT = AIC31_data.uint;- R9 c% @& } {8 x- x5 S: w% L
}+ s. N. r) |1 J8 A s5 f
. g4 P( g' s' H8 ~" F% e$ EInt32 input_sample(void)5 t* n0 V! Q$ x% {) H
{ 9 G: z1 H6 f. ~% ~# L
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 `6 Q9 E% m- D$ y- D; R' u
return (AIC31_data.uint);5 `! {! W' N* r( E
}
' k( c3 l t8 w+ u" S( c( E4 u2 N9 l2 ^" K0 ], ?; C5 K
|
|