|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! l- H/ P$ i* [' [) c; Y r" Q
main文件:& S$ k+ N7 k3 L. P3 a
interrupt void interrupt4(void)
. n. ~, \8 z0 \% b) d{
$ O4 G$ }# ]+ R: |8 d' p Uint32 sample;6 N& j1 [1 \7 ^2 \' e; K- K
8 \' P6 \1 W! S
sample = input_sample(); // read L + R samples from ADC
3 Q+ G$ ~: A. v; q( M output_sample(sample); // write L + R samples to DAC 9 [2 q9 L4 `6 g H8 i P
return;, @2 H2 j" I, s3 W9 a+ u) \
}5 f5 w8 ]9 B# \0 T
( P* v+ | H+ E4 ]4 l
int main( void )! B8 c% Q2 y ^5 N! {
{
+ n, k+ |! ^+ L+ q/ S+ e; h, R& J( x* O& K
/* Initialize BSL */
& t4 X* ~5 N6 L" N EVMC6747_init( );) v- ~/ M$ l7 f0 z# [2 b9 ]0 E3 g
/* Call evmc6747_intr function */3 A; z7 g+ D) i2 m' H' a
aic3106_init( );
' K( @1 X1 d9 k' Z while(1);; f$ _ T2 `+ `3 ] Q' G
}
& L% F( W% s. P/ |+ w+ s+ O- v
2 B! R) k- H6 M1 l7 _) j9 v3 n0 {. S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- I' ?( ~" `4 Y* q; i/* Initialize MCASP1 */; Z; r9 v/ y7 Q* u
mcasp = &MCASP_MODULE_1;5 R7 R0 O# z/ q- A
mcasp->regs->GBLCTL = 0; // Reset _6 e) W8 g! D3 M! f8 F2 X
mcasp->regs->RGBLCTL = 0; // Reset RX% S7 |! k6 Z9 P% @4 Y
mcasp->regs->XGBLCTL = 0; // Reset TX6 R) W4 G/ E( S; x* O) v: G
mcasp->regs->PWRDEMU = 1; // Free-running
x8 P! N6 Q& H! l. e) s7 r // configure McASP0 receive registers8 `' r4 q E. P, c) @9 x
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: Q* u" g: Q* u ` mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ b- ?+ |6 Q* @; v1 p2 V mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- }' s4 h& q7 \3 @5 Z# V( ` mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 p' T' |( b% Q2 L: l$ C' @/ V mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
1 d9 I& e/ z2 j+ ^ mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# s& X+ }; Z9 n9 y5 ~' s mcasp->regs->RINTCTL = 0x00000000; // Not used
- M! }8 j- {$ I mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 V1 y6 v, U+ j+ n3 H' R; m0 d0 O! i z( A* q$ O5 R
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 ]1 v! b! G0 h% @) Z
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' v+ d2 I( C+ v3 B/ \9 x mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 p/ f, W$ O% F+ O/ x mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, y U' h, o! j mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 x5 A8 [/ q Y( R! y- V; l mcasp->regs->XTDM = 0x00000003; // Slots 0,1: }( Z/ |9 J/ ^& {% o9 O7 M' F0 Y4 k
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% |5 S& U1 i- F% G9 b
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 S" Z7 o% t: t% @' c. R
1 B$ G* I% S! T5 N+ x& S# Y* q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
9 H6 ?( p1 w) ?# k# A mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 ?( K! ?. X1 ~( K& p4 L mcasp->regs->PFUNC = 0; // All MCASPs
* U6 r+ o' k3 H+ ?7 K; n' m mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 x' h+ a/ K( U, q
8 Q2 d9 `# ^& G. Q& o7 } mcasp->regs->DITCTL = 0x00000000; // Not used# M& L4 }# n0 ~& l U3 V5 `
mcasp->regs->DLBCTL = 0x00000000; // Not used
0 a1 D# l7 m3 b' x mcasp->regs->AMUTE = 0x00000000; // Not used8 z7 U8 ~* j# `3 t) G
# C# o* T6 ~% K" M# w/ U" ?
/* Starting sections of the McASP*/% N6 M$ w% o) K% ^* P& {9 }
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' j/ j' I' A4 _) H' [' R d6 T: {: g1 B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ~) J: N' M0 p- X/ F
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ t/ _0 H' Y- \0 J# T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( H6 Z! G4 z. }; a" y( P9 S: A- O2 V2 p# U1 A" A, i
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 n8 a+ U% b% r! G% l; h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ s+ e' h e U% Y& X mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# f6 o' r* A: s3 x2 [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 `) x6 B1 p) X
) L2 h. K* s0 j9 h0 c% f) M mcasp->regs->XSTAT = 0x0000ffff; / n- a8 a; e4 O/ ^; g
mcasp->regs->RSTAT = 0x0000ffff; 1 P a: U0 q3 ?
, [. y8 p* Y" A" F, a u
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; v% j' O8 X& s1 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: r9 C# }. m: z7 W5 @) D4 M mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" I8 [, k( d& j: C! t2 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 s5 F) r4 Y3 E1 F" T
0 w5 M2 }1 X5 J( T3 o' O /* Write a 0, so that no underrun occurs after releasing the state machine */
+ E9 Y) Q% X, o) p) O; H mcasp->regs->XBUF5 = 0;2 C1 I7 `+ O' k5 _9 x
mcasp->regs->RBUF0 = 0;4 q( p% E5 O& w9 X1 q: ]4 N5 N
6 B0 {5 |: y& ^
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 U6 f; _6 J6 v2 Y% Y: ^& I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 t+ L8 N' B5 m5 X; u C1 { mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 v! H. j" K6 ?: @0 z! X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON ); c+ e7 n7 }& [6 P8 A4 x
% L# o. w4 {) b2 Z6 K6 h
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 l1 k: S. P' K( Y6 X6 X9 h" k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; u: q3 f7 W7 @0 C. G
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( O f: e0 K+ U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 k, ~3 F A. E) K! F) V* n; Y* w
( H3 ~% u, f, S$ ]! |# D7 [9 W CSR = 0x0000;
& E* Q+ _6 \' J$ K( { INTC_INTMUX1 = 0x3d;6 h) R" V2 m, H" g5 a0 [- g
ISTP = (unsigned int)vectors;3 m, E# {4 B; K; a" C% L1 i
ICR = 0xFFF0; 7 h7 G" I& q( s- r) x1 m
IER |= 0x12;
# S7 D+ X" w3 |9 z. ^ CSR |= 0x01;
( G+ G, ~! u# m, G+ F* c( N, k/ V9 h1 v1 v6 w' v0 W& O4 O% A3 X
- \5 S Q+ b* B. m( p' ` g1 m' k
还有就是两个输入输出函数:8 g( h% l3 N5 |! p* n3 R
void output_sample(Int32 out_data)+ O; K p/ _0 J3 }
{
+ o% v4 f* [" _+ v( A% e$ m& J AIC31_data.uint = out_data;
' ^4 }8 t) \, X9 K9 L# D MCASP1_XBUF5_32BIT = AIC31_data.uint;
. |0 s5 v- V; K, P( z3 z3 O$ g}
* h: _5 ^+ A2 D+ M5 \) C6 R1 ~2 Y1 N
5 Y1 R6 F$ y( bInt32 input_sample(void)
8 j( G( \3 p7 \- v- O3 y{
( M0 ]8 ^% ]" p% q) L AIC31_data.uint = MCASP1_RBUF0_32BIT;; E4 N7 ^) q9 ^ E. X& W
return (AIC31_data.uint);- p. N# L! e) Y0 m# g8 b$ l$ ~
}1 F2 h. M- W, N
m1 H; [1 Y1 [0 s- P |
|