|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: g+ t5 w$ v/ ]) P0 ~
main文件:, {& L6 ~8 A# G& M6 g
interrupt void interrupt4(void) 2 q' ], U# }, ^- c- J% h( j/ {9 |
{: a- {9 N$ Q) D% a; R8 j, ^
Uint32 sample;
! V5 Z* `# F" K1 R* q/ ?, w' v* i: O+ c5 V/ K! R
sample = input_sample(); // read L + R samples from ADC, W: B8 q3 e& q3 h
output_sample(sample); // write L + R samples to DAC 1 o/ i7 P: k% z( L
return;; M% T: U" ?! W( ^- N$ q8 ?& r4 w
}; t9 o; |& X6 }. y! [
& M1 B) [. ^5 ]" Q
int main( void )
4 i F4 {, h. `1 m0 ~0 B{
7 e6 T9 {( {; J& X9 Y2 p3 F9 x. D& k$ f# l2 Z
/* Initialize BSL */6 Q0 V- r0 u7 X4 ^" X3 S: O
EVMC6747_init( );; H+ @5 A& A: U
/* Call evmc6747_intr function */
1 S' f: W" n7 b) G) t5 z aic3106_init( );
. y4 E1 L* E' Z" |% P% m while(1);
) _9 Z ^# o6 X7 N5 l0 O}
1 B( H+ q4 @ G: S; P2 M/ o' f& u
! H$ b+ N# U8 v8 ~* q; e7 F7 F- s- ^+ K
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- v" ^1 s8 d- A- |/* Initialize MCASP1 */* l% f& r( E$ f7 V9 W: }2 M# }
mcasp = &MCASP_MODULE_1;
' A4 ]* ~" g. m2 z, k mcasp->regs->GBLCTL = 0; // Reset1 v& O! @4 P& I8 z5 [6 L1 m2 `
mcasp->regs->RGBLCTL = 0; // Reset RX* q& c$ r" T6 e% y2 e4 i( W. b
mcasp->regs->XGBLCTL = 0; // Reset TX# j$ J% ~1 u$ I7 S+ j
mcasp->regs->PWRDEMU = 1; // Free-running5 [# ]3 H5 D) v8 {; {+ K$ K
// configure McASP0 receive registers
) I' R4 p( c5 V. c* X+ F) I3 i) t mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' p9 Q) C% G. x! S4 \0 ]
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 ^) a: E$ z, w9 W! j' o8 S- @: v. r
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% c* D q$ S% }' v" k mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) c' n' u' J! b5 d! z5 ?
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! D7 x% l! M4 X( z! L
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* I- O9 z( P8 V; b9 A8 W6 i! d mcasp->regs->RINTCTL = 0x00000000; // Not used/ X" v& n4 r! F$ z/ E
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' N6 W& A1 [0 {; M' D/ m% y1 o
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' h# ?2 b1 s2 F( g* g4 f* w% [3 \ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 N$ [" ?% ^ g! l: U0 D" d2 w0 x
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( k1 P/ j1 p9 e
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 J$ D ]4 r: i) l mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* \/ A! T: q0 k mcasp->regs->XTDM = 0x00000003; // Slots 0,17 i* k5 Q5 }6 b- j! u
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 A0 u# K R2 _- C8 o+ M4 A
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* B- l( ~( [: L/ D" n
: r v* h- B2 M' } mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
9 Z6 d* O7 O5 T9 h6 U/ V mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT5 }( g& @& ^: G) O. x9 y
mcasp->regs->PFUNC = 0; // All MCASPs( S. m. |! b9 S+ d
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) q9 |) M. ]3 v" S% B' g0 ^! M# T4 ]' o6 a' f* o3 S7 v5 ]5 @
mcasp->regs->DITCTL = 0x00000000; // Not used
' _/ E1 U) ^8 z5 r mcasp->regs->DLBCTL = 0x00000000; // Not used
3 e. V- x- B. p w* N mcasp->regs->AMUTE = 0x00000000; // Not used( s2 m# v9 i8 g; v
* }8 w0 [$ [( }$ F
/* Starting sections of the McASP*/
0 `7 j }/ \6 _' _( l. |" ~ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , I0 n5 |9 s/ _( l' u1 \) P4 \& [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ P& x/ z+ v( O3 H J# m mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 H7 C* X$ M% H3 d/ ?) N/ k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' t/ X5 B+ j9 l, p! {
) a) Z, }; M0 B' s, r( G4 t# P, ` mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' \( S' ?. Y8 O( T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# |) c0 N, F6 S2 O+ g3 q
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 G8 V- k& C( t( _5 k$ o) @. c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 I* u: ~2 J0 }) `& P( m
4 o! B6 p( N8 Y mcasp->regs->XSTAT = 0x0000ffff;
' \5 k. v# `) h( X% a8 U mcasp->regs->RSTAT = 0x0000ffff; / ^! R- a2 F4 `
0 \, Z; _9 V8 _8 V) v mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 k% ]5 f" }5 U* T( t$ @- W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
G/ c# y* K6 P+ @: O1 t: B mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( U9 h# O2 I& e) c& A, J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 x! k8 T2 k# S7 k/ S5 F6 N
* U; M' q; N, p. t" J /* Write a 0, so that no underrun occurs after releasing the state machine */( ^7 ~) X9 P$ m$ z
mcasp->regs->XBUF5 = 0;$ a7 P1 V. {( a A. ?2 \
mcasp->regs->RBUF0 = 0;6 w( {/ M& A6 G" O# i9 M
' p1 }. m! C) [$ u4 g
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) h$ r6 g$ ~/ w0 B* o: H/ N- s* `- U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 k: e1 ]9 z5 ]& F0 {
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % }9 K4 |' H7 O; f+ Z# x8 m1 O( g' d& v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 o! a/ K o, D o. a
# M3 g0 P+ `+ Q, @& e
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 u. J2 A! H% L0 o( b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% @' u) J' Y$ K* X( M; B( J" W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 i, l+ y7 q- W( V9 }: Y8 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 y+ {. |$ o5 S' a
$ z" }0 N3 C) T' S7 u; o CSR = 0x0000;
# I/ v+ u0 o2 J) i* c; U INTC_INTMUX1 = 0x3d;# `% t% |$ X7 X+ {& e
ISTP = (unsigned int)vectors;
; _, u, e \3 a0 I( B) H$ q ICR = 0xFFF0; 5 w/ r, G" q% q3 _( Z
IER |= 0x12; . p' R* O+ l) {$ ~8 ]! `
CSR |= 0x01;
7 v- l0 D V/ s0 I6 ~( R
3 F+ }" @$ l, ~+ M' a: l& x
) A& }# P$ \- d6 P* i! m( o/ o* l+ z
还有就是两个输入输出函数:" Z6 K$ j, t" a7 f; B% K
void output_sample(Int32 out_data)- q+ ^8 B: S# r. ~0 O
{9 x* F- ~( T" |+ e. l# W
AIC31_data.uint = out_data;
# Z- z! o4 v. P3 t+ q i F' H" | MCASP1_XBUF5_32BIT = AIC31_data.uint;
" B: [7 X @) {4 L. m}, O7 f& q5 `) ^& B
6 \; Q1 q+ t' H, Q" ?8 G0 XInt32 input_sample(void)
& b1 C0 h1 h. ~9 h; Y{ 7 n7 ~" A1 p' R: [# D0 r7 Z4 P
AIC31_data.uint = MCASP1_RBUF0_32BIT;
- V: w* K, F* O; F9 M8 h return (AIC31_data.uint);
9 C2 p3 \" P* D0 K* ?: P r: I& b}; J* u+ D2 p5 k$ X& [ W
* S! d/ H# N6 V: P) C& y5 }$ R/ ~4 b
|
|