|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: _9 n! |! U+ r, ? j# n2 i0 K
main文件:! h- Z9 x" a8 o: d2 D
interrupt void interrupt4(void) " S# {8 G$ P" N* w
{
: N, ?% @& Y0 j. ~, c6 z* w5 L Uint32 sample;. G# H9 ^: i, F$ M3 H6 t4 e ^
8 _- u8 P; T, K5 a sample = input_sample(); // read L + R samples from ADC& Q. I, r. P& E, l( i
output_sample(sample); // write L + R samples to DAC
1 b6 s; Z$ K7 f2 k% w return;$ j) G( w" I* L2 u
}- d& h: b5 a; T! j. _- B5 `, ?' t
6 h6 ^+ P0 j+ h' h
int main( void )
6 p, }0 y1 Y/ x& g{/ Z3 S, v- l3 @4 I. E% J
% n" i3 O7 F% Z, E4 e1 K. [
/* Initialize BSL */5 ]3 [+ Y+ p6 r, t3 w7 j0 F5 u
EVMC6747_init( );8 F- B- f+ g6 K e
/* Call evmc6747_intr function */( `+ Z7 I. S0 ~+ x) v
aic3106_init( );
2 t. l$ B* v) A7 W while(1); {, b, m4 Q/ J+ t5 I# D3 P9 j
}
4 J2 t1 `- q- }% [6 i x/ X
! G9 I! K+ [, y. ?8 U# v: a
, H& R# j& n# haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 U u. m% B9 }% g, }% g/* Initialize MCASP1 */
% S0 ~1 z/ z* \$ c; m. t mcasp = &MCASP_MODULE_1;
1 _& {) H- I3 h+ [+ [ mcasp->regs->GBLCTL = 0; // Reset
+ T) H: M8 t$ S3 n, y; q mcasp->regs->RGBLCTL = 0; // Reset RX$ r* i1 t6 y; f/ ?& K" `
mcasp->regs->XGBLCTL = 0; // Reset TX' W. y. D: G# v
mcasp->regs->PWRDEMU = 1; // Free-running
$ d) a w. Y. ^( A! ~( f8 h // configure McASP0 receive registers* f4 d, W8 H6 U) m- y- ^7 V% g" L, X
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 [2 X, |# T2 e2 V' e6 ]7 o$ i2 ^ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 ]8 T3 Y a- H6 C# E6 C3 y' s2 z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 r6 R1 ?7 T: N mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" d- i# e4 R4 x. V( D& Z& @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)# l& f* O7 Z" C) @4 k6 c: N
mcasp->regs->RTDM = 0x00000003; // Slots 0,1; m9 L \: j; D& {- ?
mcasp->regs->RINTCTL = 0x00000000; // Not used: n' E: t( K. ]: r( a) J
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: F3 s4 g+ w; \& r, y6 \- W" H3 l9 ~- r" j/ t
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. I# b: U# _4 U0 V
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, s/ K9 `, L/ [' d: L2 F! v mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' X' I3 M* x# J ~5 i2 \* ]3 o" Z: {
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 O/ l% l1 u m$ r mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ w \) D9 n9 j$ _ mcasp->regs->XTDM = 0x00000003; // Slots 0,1* a; X& U/ |. l: s5 o% S$ T
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
$ Y7 _9 m9 k6 Z$ i& Y mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 L& }; e& J9 }+ }2 o b
+ l5 F2 l4 O6 s c
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
], m1 @" q. X' h- c1 v7 J mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* f$ ^* b% v" [ T+ o mcasp->regs->PFUNC = 0; // All MCASPs* G8 i9 W7 L& b% E \" r! O
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 z/ P/ X' c! Q+ q( B% S
& G0 t% ^% u) g mcasp->regs->DITCTL = 0x00000000; // Not used
% ^! H. o# l7 a4 Z( q& v* G mcasp->regs->DLBCTL = 0x00000000; // Not used0 i4 e2 e9 R7 E) \6 M) R
mcasp->regs->AMUTE = 0x00000000; // Not used: C6 a+ V! B* M* d, d) y# G$ _" n" y
) E- q# w% J& o- [- j/* Starting sections of the McASP*/! D# i6 M2 e. w& N1 A7 h
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 j" F0 o) c7 I% `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, g' y! A I& u9 z mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 E: V. `& D& q' O8 e( `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; _7 | s& X9 D, V! Q2 S
, K% v0 r3 K i! q! e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; q% P( `! k) G$ d$ a" z2 F- s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- E+ R; d6 Y% f5 s/ v, }
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# K6 v3 a; P, I* W2 z( N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* `' j$ m# K! T( s4 I8 ?/ _+ U
6 Y7 _" n' t8 r3 D1 b2 t+ _
mcasp->regs->XSTAT = 0x0000ffff; , o; P" Z& W+ v$ P1 d
mcasp->regs->RSTAT = 0x0000ffff;
3 ?6 ], Z9 I' w
4 d W4 v0 N* G3 O mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* X! V; z- Z0 j1 _" m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 B7 G' e& f+ N! `# Y8 y" K9 c mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' z9 A. Q2 P% N/ R0 H% S; R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ p9 j8 T* X; ?* u! F! |( R2 @
! k) }! F- Y6 {! S* W D! t% o( U+ a /* Write a 0, so that no underrun occurs after releasing the state machine */
1 \! V2 O+ ^2 e5 E {& q0 C0 C1 u! J1 ~ mcasp->regs->XBUF5 = 0;8 q4 K8 c' e5 d9 h
mcasp->regs->RBUF0 = 0;
`- W5 t! }3 N
( B& X4 S8 Y! z# [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - O9 [3 O n; d" H2 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" L2 `) X0 e: `* y
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 L& ~* i. ^) U6 L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ i# j+ e. N" w4 {9 c1 D
. Q0 a1 e# c8 p7 M! F mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % m7 t w( ^" [% u6 B' T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' |2 m3 U8 y- O; ]
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 m9 f+ d; ^- t# Z7 x; n K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ t* L6 X0 w% ]# n T
, g! k9 p, a9 l9 R3 y( ^6 Q
CSR = 0x0000;
$ c, @% _& v) x# V. W INTC_INTMUX1 = 0x3d;- w+ D( q: P( j8 |9 l1 l8 Q3 L
ISTP = (unsigned int)vectors;6 \/ @) p0 f& `" \
ICR = 0xFFF0;
( ~5 U; P3 X+ _8 A) H" D IER |= 0x12; `( e# m- A* K r
CSR |= 0x01; 6 e7 g! [* Y0 I) i9 [6 \- Q' R, o
7 E4 z# M9 I( u+ }# O
# [* l' C8 N) S" K- X- T0 w# p* e$ g" T" C
还有就是两个输入输出函数:/ Y5 u. L. n6 h8 ^! E
void output_sample(Int32 out_data)
. } V& M2 W* p( o A0 C/ E{: o& k0 i9 K; B0 y2 R
AIC31_data.uint = out_data;
( k* s, U0 J: I) U: J0 C MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 t" M8 @( r1 ]4 j& _0 ~}
% F( |; c5 [0 @% g& I2 G. b$ M1 E/ e' {1 m; @5 y* P
Int32 input_sample(void)
, M# a6 [. b4 ^9 R/ Y6 U{
7 r! s. A$ ^. `3 k* z. ^3 O AIC31_data.uint = MCASP1_RBUF0_32BIT;
" i7 j8 i# P4 h return (AIC31_data.uint);
" v" T+ z( U% f) W' P}6 U" r* H7 A% V
" _1 Y' K5 H4 y* H& u- ? |
|