|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! x9 B# I9 a/ Z5 }: y& K) U7 ymain文件:
3 L+ G1 p5 V5 {4 W( B2 U4 b, ointerrupt void interrupt4(void)
: _5 C' y6 I7 Y" `0 J9 }{
% g1 H- j6 x" X+ |" [ Uint32 sample; z, @7 u0 ~- s
5 @2 R% F' v K' R sample = input_sample(); // read L + R samples from ADC
6 x; Z2 u% v Z+ z output_sample(sample); // write L + R samples to DAC
3 H9 y% w# o. C8 G! s+ X* r! M+ y5 J2 B return;
! n$ C7 Z- _# _" F1 q& a1 T}2 D2 E8 K: R4 u# S. n5 p* o" m+ h
2 @ d$ Y ]0 X- A* F: _
int main( void )- s. j8 u) o8 h6 ]9 q
{
7 L$ W3 S% |! _& q% {# M) w3 u$ v( _1 e; p
/* Initialize BSL */
3 @7 g; O4 ^' t" B9 O2 Z$ ] EVMC6747_init( );7 K8 [1 F* T! Q [3 m) I9 S
/* Call evmc6747_intr function */
- s( L6 O- W9 J2 e& K aic3106_init( );, v) n5 G) k! z- P
while(1);# W2 m9 Y: S6 e- |, a
}
* A6 g6 e# C% x$ W9 a4 n3 N- }/ _1 f0 ]& Y
' a8 i D6 I$ c8 L/ V4 kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& I4 Q% | D0 j+ T; y1 K/* Initialize MCASP1 */
$ x4 p& Z: r* [4 ? mcasp = &MCASP_MODULE_1;( r/ V. V) s% \6 P+ d
mcasp->regs->GBLCTL = 0; // Reset
. P- t, k* R( ? V e/ ? mcasp->regs->RGBLCTL = 0; // Reset RX0 \( A% _! S# g [; Q6 V
mcasp->regs->XGBLCTL = 0; // Reset TX$ r' J- R$ h( F1 v$ N
mcasp->regs->PWRDEMU = 1; // Free-running0 s) f B' w( k" v4 v2 T
// configure McASP0 receive registers3 w, n( ~6 \* U% x9 ], L
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 S$ B: X& i' b0 i/ I8 }, | mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
_6 S) A3 P4 H6 j& A4 e$ \; N0 q mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 w/ S8 ~# h1 w0 \
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- u. t+ v, p2 B w mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 |( ?6 B6 r5 l: F; k mcasp->regs->RTDM = 0x00000003; // Slots 0,1
( D+ a; k7 R/ D4 p1 f! z( k mcasp->regs->RINTCTL = 0x00000000; // Not used
& M5 E0 o9 u! R0 {; z2 { mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% F# l( A3 b- U
' J @0 s3 b l, {4 q mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; f4 y+ b4 M& n1 G: z6 i" U mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; @4 q& j F- F9 H! T
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ o6 z$ q0 l; E- j6 Y, R7 Y( F mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 a1 j) \ i8 v. d0 g mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; X- [2 p3 H" ^/ S2 B
mcasp->regs->XTDM = 0x00000003; // Slots 0,1! t4 A2 F( B; y0 W: Z
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
2 g$ e! w0 v" U8 `: j mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 d$ z) O' ]0 U! @" k. j* D
- {+ G8 x, b9 W% n8 u/ ]2 e2 K/ i mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 c+ S% ]+ ^! u8 p. m$ i0 x
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 K9 p# \: U3 w mcasp->regs->PFUNC = 0; // All MCASPs7 {. @4 ]" n& j k8 g8 _( I% L
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, u0 S7 k2 ? f8 @- l! J, A
+ d8 \$ C2 Y: Q+ K8 G mcasp->regs->DITCTL = 0x00000000; // Not used
/ ~# ?3 L# t ]5 ?2 j) x# b& I+ r mcasp->regs->DLBCTL = 0x00000000; // Not used
2 D# ^: u3 M* g" e) z& Y& `, V+ Y mcasp->regs->AMUTE = 0x00000000; // Not used
! }3 b Z9 v+ j* B. n N3 L' o; a% n' [ b+ K- H! \1 p% y% l
/* Starting sections of the McASP*/. M- ^5 r' V' S; k& |
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ e/ U; V+ |+ q' D3 A) N# T) R8 _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 3 q4 l+ Z/ D% b. \9 Z; D. I
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) ^/ K) l3 | @, f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( C m8 @" i' {5 \3 w
( H; D% f% z- M& x3 h p4 x/ M
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; h# ^+ c* F2 J; f* C0 R2 E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 K6 K) q3 ]% F! c$ m4 ~
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / n$ Y# `% a3 w9 l: g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 a3 ], L8 V" P/ i n4 m6 d+ N# _% x6 _0 k+ q9 ~6 Z
mcasp->regs->XSTAT = 0x0000ffff;
9 T7 R! Z+ u. f+ @- z3 x' C mcasp->regs->RSTAT = 0x0000ffff; : ~; J" t6 U! D: E h5 q& G$ E. I6 p+ f
7 _! g& k& b R3 J' e/ D: D mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 w. w! t$ G/ Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 \- L! B# P, b& o3 U+ L
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; }; o5 X* U1 i3 [( y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 n/ n+ y# m! c( P, ^. w; v
6 R! p6 x0 ?# t" z6 Z3 s$ K
/* Write a 0, so that no underrun occurs after releasing the state machine */
- m J2 I5 j4 U' ^( L% Q$ m& `( j5 ~ mcasp->regs->XBUF5 = 0;
/ S T! I9 s! b6 w mcasp->regs->RBUF0 = 0;! C8 y$ ^7 h$ ^# B y6 K6 A' d
4 a& \7 O2 w7 \0 B( A mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 G& h# ~% p; V! e( O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* M( U4 Y* X. |/ g mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # t! q$ Q2 u+ ?; }. |1 Q9 L. t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: e6 G8 k& @) b) d8 ^) W v T. _6 J I W4 P
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 b) [& K* V0 c, ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! u) s, U6 D/ p) N! g& @
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / _( Q9 i% L/ n" u6 L8 A0 p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; @( E: p) H) h6 D, n
3 m2 r$ J! }* U3 }: e
CSR = 0x0000;
3 c9 Z2 A6 R$ O/ G) G5 T: S* Z INTC_INTMUX1 = 0x3d;7 W/ ]3 ?7 _! `7 h% r6 Q
ISTP = (unsigned int)vectors;& i" s# s- x# u7 g& {
ICR = 0xFFF0; - P- o5 l1 l6 W- Y6 m
IER |= 0x12;
" C- z/ U$ o7 N1 [ CSR |= 0x01;
9 b5 q! p1 j h: }& _( S* a( G% ?) m, a" @: J8 j: C
+ _5 M' D! k* u8 c, Z) a2 F+ `. r' |) o$ |# B) v, _: K
还有就是两个输入输出函数:( H/ w) Y/ U4 }* `4 c; Z- |, G1 o
void output_sample(Int32 out_data)
}' p+ [7 A1 q{; V, L* }! x0 E) b- G+ C$ l
AIC31_data.uint = out_data; 9 V* w- w2 Q4 l
MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 R/ [# E) c, s. h! a4 A5 _& y}7 N" o, j4 {2 P& t% g* Z* |
2 D- l9 A. \& n+ D; w1 E5 \
Int32 input_sample(void)8 k+ K' L4 q8 K7 Z* g& L
{
3 V0 A+ X& e8 I: k AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 F1 i& r$ n% b return (AIC31_data.uint);" U9 e/ h( S* c0 e+ ~) q
}+ O& e- u3 a6 e5 L6 m- u
) ?; W @+ N% Q2 t9 q |
|