|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ [0 T' D2 G/ `0 @; ~main文件:
) e2 [7 u# O* w) U: [interrupt void interrupt4(void) 1 {* t* F7 m7 A$ y8 E
{
( y/ J/ |6 M0 C Uint32 sample;
& O% c% E$ H# x! Z. r' M5 K$ P: A, b( D& \9 W
sample = input_sample(); // read L + R samples from ADC, D/ Q8 h4 v4 n& _: \: q
output_sample(sample); // write L + R samples to DAC
6 \& m- t! K) _/ y5 T: j" T3 y return;9 v# w& g/ B8 K( a9 P$ c
}
# w$ D" n. p! l% f
; C% ]& q9 P$ R# sint main( void ), y* l" |) s }( D
{
$ G; C- M6 ^. Q
: c0 H0 j! l: Q' W. x% t. Y1 W /* Initialize BSL */
" G0 Y9 o Q, M9 r2 d EVMC6747_init( );: X/ W; d; G: _! J
/* Call evmc6747_intr function */
1 D/ O+ L" @) @: J$ n7 H Q aic3106_init( );7 K6 c" h& {: v& [+ u6 [
while(1);' {6 a- o! t* e
}
2 o8 r$ ]6 ~* o. C: K3 y7 R {8 F( K. [! K0 q
* i2 q# K8 y; _$ raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- @$ w. S7 g5 l0 G3 g
/* Initialize MCASP1 */) M0 Y- J9 @ [* {
mcasp = &MCASP_MODULE_1; G0 }- V) a# w) [+ Q
mcasp->regs->GBLCTL = 0; // Reset# R; e0 A5 r6 W+ z! `& l* K* S
mcasp->regs->RGBLCTL = 0; // Reset RX
- h1 }; b7 y+ M/ Z/ l mcasp->regs->XGBLCTL = 0; // Reset TX
, b$ C% n/ k8 o$ J% s mcasp->regs->PWRDEMU = 1; // Free-running
2 H) N( e0 ^ C8 m' C // configure McASP0 receive registers
4 H" |& H: q+ ~! y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
7 v6 q! ]9 e. J; Q mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: [. Y) b2 ~" W( ` mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word" I: T( G* ]( L' m5 C9 E
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% y/ U5 D* @, e; V1 ~+ @2 J mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 p2 x6 u' ?5 ^
mcasp->regs->RTDM = 0x00000003; // Slots 0,1 i8 w1 D% N% M0 ?# O) V
mcasp->regs->RINTCTL = 0x00000000; // Not used
: k- d1 u R$ N2 l N1 q mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 x2 F) D W. Z A5 {
# `; y$ I: P( f$ ? mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( \( S. V$ \+ j" k5 Y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus \+ D$ n1 q! |; {0 f5 @
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! g2 g7 o# m$ G* C# P
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 N2 r/ Z) Z+ @0 k8 G mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 P6 x, a" ^( I- l' i: _$ ~
mcasp->regs->XTDM = 0x00000003; // Slots 0,10 g2 l; {8 P o1 x
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 U( c% n4 ^6 K' S
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& E! U$ t$ \& f# c) P) A5 X
1 D2 Q {( A2 \% S- L% n mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. y7 p7 x9 e, K+ m8 n mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* F' k2 F$ i: e7 x; [9 n# w mcasp->regs->PFUNC = 0; // All MCASPs9 Y0 }( D! D% o! K% L, G
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, B/ e4 e( t& Y2 ^' |) l7 m; u$ M$ e% V' m: g: [- T6 K: W* A# ?
mcasp->regs->DITCTL = 0x00000000; // Not used
4 }( L& K, |/ Y# p mcasp->regs->DLBCTL = 0x00000000; // Not used- c0 _& M2 L; d- A
mcasp->regs->AMUTE = 0x00000000; // Not used: t, ]2 @1 w" S) N- p; M
7 E4 K9 g! ^* p
/* Starting sections of the McASP*/, G( O+ M- Q3 I8 p# J8 r- I# e
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) r; q& x) R! J4 e9 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " @- W2 A% m( q; Y! i( a- D8 w
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 H6 f/ S7 C/ e0 H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, `- i% |- r, j, e' ]
$ k2 R/ b" K _' Y' a& D8 J5 @3 a mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 \' d7 s d8 e' y; i% h: \, @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 p% O8 v( r8 ` mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 A' z( X* K I1 _4 K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 \9 _8 g) ~4 }1 I. h
- z8 @' E- V q d, @- h$ T mcasp->regs->XSTAT = 0x0000ffff;
2 Y* Z* G& y W4 I8 ^& r1 r: d; \ mcasp->regs->RSTAT = 0x0000ffff; , t5 }" N% U5 E1 v# O N# m2 H
- i8 `6 x" n3 O5 D; a$ J3 N
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- O2 {' q& R" X: @6 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 u1 F: Z$ s4 a) ^; s
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . d# W) @2 O8 p% K/ R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 R" l) m5 h2 o* x
a% c$ H/ `* r- ^8 b
/* Write a 0, so that no underrun occurs after releasing the state machine */7 u/ `- E/ p# g, ~5 L. p' F c
mcasp->regs->XBUF5 = 0;
- Q0 z4 e, b. L& k( Q8 T; C f& y; C$ ] mcasp->regs->RBUF0 = 0;6 d3 _! e0 _! L
' H" Q x) |- X5 t$ s2 E
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) e$ n$ g8 c5 y9 j$ y" I; Q& c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ ?4 [' a, |1 `+ x7 Z6 _3 Y
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # P$ `, E. T5 ^& c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 ?/ t) [$ M5 l# ?
6 G4 v3 Y- E, C
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* ?) P# c8 N, g4 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 n: V( T3 d5 T9 L- I9 m+ o3 z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) n5 l$ N) w. Y% K( @0 S7 ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 s) N$ S& j1 f# r2 g( y0 |" V! \
CSR = 0x0000;
4 ~0 s j* P+ x INTC_INTMUX1 = 0x3d;
1 `: C; a u- R- a* p$ E5 V ISTP = (unsigned int)vectors;
; m9 M k3 i/ U! {& i# g2 I ICR = 0xFFF0;
( o" ~4 F0 _$ F) C4 B8 w IER |= 0x12; 4 B% |4 N: C$ m& T
CSR |= 0x01;
9 ~& a, B/ Q4 g7 d5 `1 m3 e
* \; v& A0 [% ?6 K
9 C; c4 S4 E5 r8 h
; ^2 j0 N) p1 M1 l- `/ s2 ?& e! x还有就是两个输入输出函数:
- y' r" _2 y$ i* s# Q" ], r8 Ivoid output_sample(Int32 out_data)0 Y7 J) G% _. M. A
{
0 q* O/ A+ b. p' ~1 x& E AIC31_data.uint = out_data; # U$ I# Z: @2 D8 I
MCASP1_XBUF5_32BIT = AIC31_data.uint;
. b3 d. ]7 R6 _* V i8 n: ]}
! o2 w7 [) e5 j+ V, ?1 L# x7 V$ M2 [! n( j5 U* m& d
Int32 input_sample(void)
- Q' o: \! z, l! R0 K1 E{ ( ~( _! i+ e; M* e
AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 M7 a- e5 ?" j2 [; W' v' h5 v return (AIC31_data.uint);
* ?9 M# c- o1 K2 T9 b}
9 [9 }( B# T0 U& @" Z) v! v
7 p* v! f. K' R% h: s E2 m; A- J |
|