|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. S( _0 {2 [! L% n
main文件:; y0 _2 ^7 f( j" }0 D& P: u/ V
interrupt void interrupt4(void)
2 C2 s, y- [% l{; D# s5 Y- l' A* Y/ K
Uint32 sample;
2 z; k4 t0 o# t$ E/ L9 B4 {9 E
7 ?2 D" B3 V: q& @8 ` sample = input_sample(); // read L + R samples from ADC
; S p5 x& ]% b/ ^0 c! p: B3 k/ z output_sample(sample); // write L + R samples to DAC Y9 Q. p3 }) F9 F/ I% Y+ j9 ~ i. @
return;2 s8 l* X* I) S3 W
}# g! L- J; p% J( Q; D
6 K @8 T3 C9 _. eint main( void )- Y4 b9 G5 M- h- q$ E
{
/ s8 S0 l: b6 A' E2 w" E& M# s, _+ p) H, A" e9 h1 \+ B
/* Initialize BSL */& I% R+ x' Z7 k
EVMC6747_init( );
/ e% ~3 C Y# ?; l( N /* Call evmc6747_intr function */
1 }( Q( H% z$ U aic3106_init( );
6 e* |( {" {0 H% f5 n; H while(1);8 B8 U/ {! ?6 i$ G9 ~; M
}# r' s' p. E* s" Q4 u" ~
/ S/ v6 |! B4 c& V6 i
. ^( z( N" {5 V: Q% v# vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ x! X2 X1 c+ M5 S0 p
/* Initialize MCASP1 */
5 G% e, L( J: j9 d, u- X! B mcasp = &MCASP_MODULE_1;9 `% L* p" F( z# N$ l$ U; X' n @
mcasp->regs->GBLCTL = 0; // Reset6 r, k2 Y& F& K0 G
mcasp->regs->RGBLCTL = 0; // Reset RX
4 ^) _5 N6 r# y t mcasp->regs->XGBLCTL = 0; // Reset TX
1 l) w' v+ {! b2 h# L0 x% \ mcasp->regs->PWRDEMU = 1; // Free-running6 @% s$ ~8 g- q7 t- g3 {1 i
// configure McASP0 receive registers7 a- S% a& }% T3 ~0 d
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 z5 F: m+ t( T* f, J1 Q
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! H( T4 |# M# H) U5 d, P! Y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ I1 [, ^0 U' N4 z
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 L1 t! Q9 F4 a( C, ]* _5 ]% c8 M
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)0 i* d9 W2 z/ [/ e, p m, _
mcasp->regs->RTDM = 0x00000003; // Slots 0,1 R" B3 B. S# O: l, u' T* {0 u
mcasp->regs->RINTCTL = 0x00000000; // Not used
3 X* V9 e- X; S! D b/ i/ y# P mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 Q6 P2 @, y. H5 j. h! j8 `
; Z/ m3 c3 e$ H& D) Y8 p4 z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 M" T3 U. ?7 F0 n i9 r* O' t% [3 |: x
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 u' D' H9 b- b* b
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# A: |3 Q) E4 u! L6 A2 \ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% }# e6 V9 v, V mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
7 B t; G- V9 |& I1 Y mcasp->regs->XTDM = 0x00000003; // Slots 0,1. P+ j: @# Q4 P( c5 c* n4 s+ h
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
7 p V% n6 R- t8 ` mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# _5 I( {& n) M5 m* L/ ]* R9 q
! I5 w+ u7 }' S4 ~3 r8 O, ?( S* h6 b8 Q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
) g' ]* v. _: p/ H5 h. b mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 j! @+ d+ }3 Q2 @" G3 j& k
mcasp->regs->PFUNC = 0; // All MCASPs
( c0 O8 X+ H8 b8 ?. m4 n mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ f# U5 L: k6 _3 e
5 Y, O$ M% b& _0 W
mcasp->regs->DITCTL = 0x00000000; // Not used
2 H3 h) _! ~7 Y" C) D u$ A/ p mcasp->regs->DLBCTL = 0x00000000; // Not used: y4 \* Q% D" `0 w: j& R
mcasp->regs->AMUTE = 0x00000000; // Not used e# D0 F+ i; i5 \/ _) E0 v# c
5 M5 X4 W$ }/ \
/* Starting sections of the McASP*/( A! L9 c4 J0 k6 l; z/ d
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 l, p* j8 D% c# D% h6 U' `& Y& z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
: t; F8 }: `4 G+ R# X) p mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) i3 ^9 m* H& E( @- T9 B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ u8 Y. j% @1 {; P" K3 H
# k; m P7 j+ z mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ h; f1 r. o" L- n" \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" l6 p2 W! @( T7 h8 v" W# L- P
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 I0 ?* ]& ?; s2 d1 N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 ?1 [' j0 s u
& [! p. h& X1 F% B3 _
mcasp->regs->XSTAT = 0x0000ffff; $ T1 Y( t3 [7 n/ f1 M6 F
mcasp->regs->RSTAT = 0x0000ffff; 6 Z1 P) ^! R7 J. @4 x- J2 i
`) r6 g6 W8 b- K4 }/ a
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ q) v! d* v4 [! |& ?# f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 E7 ^9 h3 I) |
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % k5 ~# @2 m1 _* _) u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; X8 j: q5 w" `2 ]" [
! z# G$ g9 {& P# |$ ]1 X& | /* Write a 0, so that no underrun occurs after releasing the state machine */
3 w3 ~) }* ?! _ mcasp->regs->XBUF5 = 0;
* s/ u; T+ @! I% M/ l+ ] _3 D mcasp->regs->RBUF0 = 0;& R# n2 l6 v. v( W: g
# Y* v4 N! T6 x
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 i K1 u2 r- \. ^6 B$ h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 M8 N- L; m, a9 s; m3 H9 b1 { mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- d9 w8 \0 O2 u; Y) u' ^* X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. v# ?/ J! M4 x! Z" Y8 D' C
% O6 L& ~: E; {, d mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 c6 o( q5 X7 \1 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 r& ~. U1 i V' m; u: E
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 _ ?8 j8 h2 W4 Z0 o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- P2 G# Q- n) T6 U+ F( I6 h/ Y. y( l9 N6 H
CSR = 0x0000;; Y4 |& U) X# l+ X0 o
INTC_INTMUX1 = 0x3d;
: I* \: v4 }, U, P( S; | ISTP = (unsigned int)vectors;
1 [0 `! b+ z1 K, k- @; _& ^; x. j ICR = 0xFFF0; $ L8 f0 v$ N) P3 P& B# w# ^2 \
IER |= 0x12; 3 g; ~2 j4 a6 U/ C3 U8 R% N/ m9 `
CSR |= 0x01; c3 g0 @' u1 S I. I
. p, S; P( u) ?7 y
0 s( L. t6 o1 g$ t- O' q3 S0 |: i' v- _# e E* k2 X( L( R) B8 C
还有就是两个输入输出函数:
! s- M8 {- B* [/ J- Ovoid output_sample(Int32 out_data)
9 n& m" H9 G; `! F{- q, i: B% K( c6 M: K
AIC31_data.uint = out_data;
* P) ?0 I; \% A4 U" X MCASP1_XBUF5_32BIT = AIC31_data.uint;
% }) y0 b) m- S& \}
) g9 H0 r: Q& p- _
1 d3 l/ J- F$ L$ k- y/ ], ]Int32 input_sample(void), }% p n- E6 C8 O$ H6 }
{
- H' h/ S' Y$ y AIC31_data.uint = MCASP1_RBUF0_32BIT;. u1 [5 M" N9 ]9 F5 G2 I8 p6 @$ ]" s
return (AIC31_data.uint);& L4 U2 v3 J/ `! {' u: s7 a
}
1 W+ p4 ~) ]& Q5 g7 @6 Z4 t, d" U# U, x
|
|