|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ a- e! k0 p) H& p1 d6 D0 v
main文件:
3 s2 t& I! A6 n- B1 S6 \interrupt void interrupt4(void)
3 o! k. K& \/ C: X& A7 o; [{8 W: H, K8 T, k% F* ?" {
Uint32 sample;
H% W* L) t, @7 s$ d5 o* C6 [+ N4 @, Z% ~* W* p+ B
sample = input_sample(); // read L + R samples from ADC
5 b' T4 S; Y! z% ?- r& D8 r9 n output_sample(sample); // write L + R samples to DAC ! H5 G$ w# f1 S
return;
1 m) Q* q% X3 e$ u+ Y} z# I* n4 Z- u
. F+ B4 ^* Z& Z4 Wint main( void ). ^* G9 t+ f- S" c) z. U
{
4 c8 O3 }5 W- p" { }6 f4 [9 k: m# Z5 f7 s5 }6 s8 {3 |9 v8 F h9 A
/* Initialize BSL */& p6 |2 ?8 O( `: y ^* i4 a
EVMC6747_init( );
: y: `! a% u4 ~, J /* Call evmc6747_intr function */
6 t4 t8 o$ E$ m aic3106_init( );$ P4 E& ?! ?6 L; F0 i
while(1);5 c: K5 v# F% W
}
+ g& o6 J @7 _& I0 G+ [: k+ h4 @) U5 w4 E0 S: ]8 ]- `1 L* q
( j0 @' W( s( j1 o& ^- J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 k9 s, R/ o- r; u! y6 Y: b. l/* Initialize MCASP1 */
3 h4 T: L2 n' c; G mcasp = &MCASP_MODULE_1;
; o- L& l+ r) l4 U5 t* Q" J mcasp->regs->GBLCTL = 0; // Reset: |1 V8 y3 W$ R) F
mcasp->regs->RGBLCTL = 0; // Reset RX
! t) G2 h& x7 v4 k" B! n% ` mcasp->regs->XGBLCTL = 0; // Reset TX
4 @# U2 f; K3 V# C; ]8 @ mcasp->regs->PWRDEMU = 1; // Free-running/ U& e& N( J* ]1 z. M& z4 W% c
// configure McASP0 receive registers/ E; t6 x2 [: X6 N7 W* w% `# N7 I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: s5 N; H6 i: C! y( V9 `3 Z5 z; k- \, E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus @7 @9 q8 p4 C# E
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 C9 U& \# b* o* E
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# }% i7 W- @) P9 H. I
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)- E' M3 S8 J% b7 d! i
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
M' m3 O9 l. Q( l T, l mcasp->regs->RINTCTL = 0x00000000; // Not used, x) \+ e1 n. K/ o8 Q4 k8 e4 P: y% C
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' C( Q6 E8 h% l
# S9 T. A5 v' Y @ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 B8 |3 X/ g) @; Y! e
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 ?1 p0 |8 ~6 C6 x9 O
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 Y, S& f# |3 M4 l+ s0 v
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 _& z2 P2 d R# t mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) O# }9 _0 ^! B0 i: b
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" k$ O7 R) Y' n" B, f; ^ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 Q: b9 b& D0 X
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 m% F9 c( A7 N% Q! L, _ j! B* s8 E1 m; C& ?
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 S3 h! W2 G1 L* A: K mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
# p! {$ q" U% X6 R mcasp->regs->PFUNC = 0; // All MCASPs
$ M4 c8 {9 ~% F6 C mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( s9 V6 s. E% W- j& T; M* B6 t$ D0 ^2 V
mcasp->regs->DITCTL = 0x00000000; // Not used
- m$ E8 X1 B9 Z% I$ F9 Y. O5 k' J# a mcasp->regs->DLBCTL = 0x00000000; // Not used
, D! [' Q+ @- I5 h+ V# K mcasp->regs->AMUTE = 0x00000000; // Not used9 u9 ~" x# p3 I* q! k% ?2 }0 s
" f3 g% j# C7 M1 {
/* Starting sections of the McASP*/
$ [. X. p% U2 A* A; E5 }4 B, n mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" B5 X: y* _; {1 T. G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 `$ B9 k5 `9 w7 T6 C mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& R8 s" N4 U [( b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ W# h5 v, \3 M$ U3 [; `
& U% H( q' U& b0 K! u' m mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 ] B$ q/ e- z- L7 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% { I+ _ M- Y0 A7 a4 H mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 ?# [9 z& `+ @& ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: c. T+ H) V2 ]: ?/ `# {' }# V# I6 h
0 u/ E# m/ q" d2 E mcasp->regs->XSTAT = 0x0000ffff; " X/ Q! U4 m( B9 |( v+ s7 n
mcasp->regs->RSTAT = 0x0000ffff; & T% h% ~+ Z) s* ^0 u5 ?. J- ^
# [$ ?: c# n: i* ~7 P9 i
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- w, {+ t" G. D/ H' c- ?, } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 L( q) p3 \$ m) e0 J8 \ ]% L0 J% S6 T mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' l0 J9 D0 D [# Z' d2 P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 A2 z2 G* J* W1 m" T8 P) U2 a e/ f2 M* T9 a \. }$ T# K
/* Write a 0, so that no underrun occurs after releasing the state machine */. p( f% Z }2 B3 l
mcasp->regs->XBUF5 = 0;6 H# Z. ?- M( {# s7 J: c9 W
mcasp->regs->RBUF0 = 0;
8 q$ h1 f! [& n# V) k( ?! t7 v) _7 C" p/ O/ e) C+ ~
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* _) ~: |# d. l+ q2 S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 ]8 D+ t1 \+ n: Q- \' }
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- R/ s8 R, I% ?. P" {$ g6 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. ^: I0 [. G2 y/ b# v. Z9 h# P2 C+ F$ z
. X/ Y9 E# U) G: d, l2 X) w
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; `/ d' Q' B0 D- w, w( f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. y& b, f1 m5 ?* f% Y V' z8 S mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( j2 o K' u, X4 V( u- k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! D' S# F1 l1 b; J! B4 `
) E: e- y! b" ?0 I CSR = 0x0000;
5 A3 T S W5 r! t' J1 O+ P INTC_INTMUX1 = 0x3d;
; _5 B" n. r" L0 ]. r: v2 W i) F ISTP = (unsigned int)vectors;
6 S; ]1 U- I# n1 v8 k6 a/ } ICR = 0xFFF0; + e5 [( V, C5 y+ x' C
IER |= 0x12; " L! h0 [$ A# v! F
CSR |= 0x01; 5 l& k p- d* H3 q! n, p: `5 W9 H
+ C7 i J6 q6 e9 a% p& o
8 o4 J1 k9 }* b( G4 ?
: k3 {/ }1 z8 M/ _0 y$ ^还有就是两个输入输出函数:
% Z2 I, Y$ N3 ?- O* U/ dvoid output_sample(Int32 out_data)* z4 T% `" F- u1 m1 w% q$ m, `
{9 f$ C, V3 I+ V% z$ Z1 H: k$ w1 W
AIC31_data.uint = out_data; 0 R6 Z' t! ^) c4 p; A {: V
MCASP1_XBUF5_32BIT = AIC31_data.uint;
( \% o$ i- e- q. ~}) @7 D4 o( p; n+ R/ h
2 E" H5 S2 K* U: m; L
Int32 input_sample(void)
( n" h l4 K# K{ T X! j. u; Q4 q) X9 J* n/ l5 E
AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 Q+ v8 D. {6 n+ D# C return (AIC31_data.uint);
) G8 R5 N$ A8 G}3 ~* n# g1 E! a6 c# j
* t( Z; s& q9 \! c |
|