|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, b7 M: }# {' _0 I6 p6 [- ymain文件:( F& u/ q A/ f* N. K0 q5 V
interrupt void interrupt4(void)
8 c& ]7 N! b* p. O' n{" k [2 U& j3 V. C6 d, y- z e* r
Uint32 sample;; R( [6 s' {0 v6 b& a0 b, b0 n& ~" d
% h# z( P0 Z% a @. k
sample = input_sample(); // read L + R samples from ADC
# q0 J9 ]% I; k0 k2 C: g6 O output_sample(sample); // write L + R samples to DAC
' f h8 `% h7 i! U- l' x return;
+ o- s- E" }+ C}: h7 ]. A$ h+ }$ r# S; z R' ^
" N c8 a7 A& p- s8 uint main( void )8 B. E6 A0 O* O; O7 Q& ^ Y2 ?
{# e! b5 p9 R* K/ [/ A5 t
0 ^7 `. C0 _% q, q- N /* Initialize BSL */
* u" p+ K6 c. h$ N EVMC6747_init( );
# w+ ?) P% w; U& x, ~1 y /* Call evmc6747_intr function */: N, e1 {# |& d5 l$ [
aic3106_init( );! k0 ^1 S3 D4 b5 P
while(1);( q/ U! A! j# i* C$ A9 s
}
`# L/ s. O) g4 d9 ~; n U. a& f0 V5 y5 F" k% w* Y- S& U. }) r" D
' m, W: s( Z4 E3 `0 faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. K9 s$ I8 G7 Y2 t+ J+ F
/* Initialize MCASP1 */
5 i9 B% {) j2 M6 c0 I# d' Z mcasp = &MCASP_MODULE_1;0 q( B9 ?4 o" ?5 f: {8 j
mcasp->regs->GBLCTL = 0; // Reset0 D; {1 q. V! o/ v4 A8 F' E, i# }
mcasp->regs->RGBLCTL = 0; // Reset RX
! s9 ^7 j& F6 T, R, B, O5 G mcasp->regs->XGBLCTL = 0; // Reset TX
2 q% {9 W V2 w% h mcasp->regs->PWRDEMU = 1; // Free-running
# a5 G1 E' S5 ?* j$ o5 b% y // configure McASP0 receive registers
* ?& k5 l% p" u4 E* [ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, W; x; }! b0 e) c mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 q* A" s2 A! ?5 \7 ?) U4 Y' _
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 K# d* p* E0 M" S% o, i5 K mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ D1 N" b. `) R mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ W; Z: a! d' g* S: X* J1 Y mcasp->regs->RTDM = 0x00000003; // Slots 0,1
7 W/ `5 V: |+ @7 R F5 A% M mcasp->regs->RINTCTL = 0x00000000; // Not used
& N& T% T! F% r' K mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ~7 ]5 O" Y$ k5 q
6 z6 E! [: m i1 q7 Q3 U0 R mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% L2 Q) m( f& ~# A2 O0 \7 c# T) g
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( { g7 L1 Z$ m3 m& K mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 \" h- A2 H. e" _" I- S
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 x1 o' |/ l, u7 {6 @* r/ r; S mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' w2 X6 j4 R9 y3 J( t$ a mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 I4 [$ i+ O7 d* j mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: U3 W7 V5 a l( w1 j+ {6 q6 b6 [
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% T7 d1 ^9 G( j* N
, }. ~5 k( f' n( {& b! s3 E mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 C7 ]5 z* h/ b" k3 z" a# k mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* n5 z' b( z5 m1 p mcasp->regs->PFUNC = 0; // All MCASPs
% H- n% k! _) E$ y mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 Z, k. Z5 V7 }& x1 |" e: ` I
; r% k( Z+ U/ Y; V) m3 ?- d4 g mcasp->regs->DITCTL = 0x00000000; // Not used
5 ^+ w0 Z, h) a- q" S" U: ?% L mcasp->regs->DLBCTL = 0x00000000; // Not used$ A) {* w+ \7 m1 x* ~ `( N8 f
mcasp->regs->AMUTE = 0x00000000; // Not used% w9 b) N: d- D6 s% P$ \# N
8 Z: d* D _ v; T& ^
/* Starting sections of the McASP*/+ x& @, o: a( V! F1 f; L {
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 e9 S1 ]! J; g) z: j+ a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : t3 w% A @! d+ d& @
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
n4 d6 }3 q- O- W7 n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 b& |6 ]+ Y8 w- m' }7 J! m
4 I8 u, s- o3 ?$ F& p mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 X: E! ]( j% \0 _. g$ r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: R* [9 [( B0 N
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; @4 V' c- A' z/ W8 G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 n- i' |" n9 ]$ g* l6 U5 X+ M% e* T: ]% O! K" Q/ ?0 O
mcasp->regs->XSTAT = 0x0000ffff; 9 x8 g! n& q$ w/ ~# k
mcasp->regs->RSTAT = 0x0000ffff; & |( w7 F3 x9 c" s' a
: F3 T1 B. Z' k0 \: [ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) J$ Y& I( k2 b8 Z6 l& L% ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, S4 q3 B: ?" y mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ R; U ?0 ]* w N9 {. p; X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ X' j8 m6 B J4 \
) g- B8 _5 i) a, M /* Write a 0, so that no underrun occurs after releasing the state machine */
1 y! u" o# R: k" \* N mcasp->regs->XBUF5 = 0;
& ^7 }% H4 r( k' H+ n- R" c, e mcasp->regs->RBUF0 = 0;" Q5 k& b. {- ^+ x) n) K. g1 H
9 i5 P. v5 u% o3 i- `! G+ Q mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & P: y' U5 _3 o; ]$ w1 P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ E6 g z) P9 V) Z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : G' s, P1 v) ^+ k8 s" S |, l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) T( |* C4 y4 B4 L( ^# u
3 y" o( s$ x" T; O
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 ~1 V2 n5 r) x) W* ]; ^0 ?; X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& M% ]2 e# q5 z- X mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 n- ]- \2 ?3 e' _3 m- ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 M+ C8 Y* l- b$ k" }% l$ L: p
. l& y1 X# |' t: W) N, o
CSR = 0x0000;( |" e; Q V3 |( @% U
INTC_INTMUX1 = 0x3d;
5 D9 [% U: u7 B ISTP = (unsigned int)vectors;, J* D+ k- y. ]5 c% L
ICR = 0xFFF0;
4 w3 ]/ |; m+ Z IER |= 0x12;
) {/ I4 s9 N8 O CSR |= 0x01; 7 N* J. f; ~# w! V- u
- i# ?7 p a; P& @& Q1 q6 T
Z7 V" J2 h- x. O% c8 h5 C8 J6 J( [
还有就是两个输入输出函数:( q; s' E) D# Y$ B, b
void output_sample(Int32 out_data)# R6 \1 e C8 T2 ^
{1 H4 o* j! L* U
AIC31_data.uint = out_data; % r- S; ]/ t" q3 K y, D
MCASP1_XBUF5_32BIT = AIC31_data.uint;, D# I y4 I1 P& \! W! t. @' R
}
7 u. d+ S% S. N8 O2 x7 `( H) D( K% Q2 ]6 d" b% h0 Q; Y
Int32 input_sample(void)/ ^8 ^8 Z8 t& H6 ~. e! ~* \$ I4 }. O" M
{ 1 v3 _2 ]$ m; U' R% G0 B
AIC31_data.uint = MCASP1_RBUF0_32BIT;5 [& l/ q8 n' ]5 T/ i1 x" V
return (AIC31_data.uint);
$ b' W8 \6 _3 J6 M! j}
, P9 B5 ^! y* p# F7 G. w: `" A4 `) ^8 j
|
|