|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 n4 P4 C" u9 `
main文件:0 z1 _6 M5 D3 V* }5 X+ Y
interrupt void interrupt4(void) . V" o& x' z2 n5 V
{
0 I0 k% h, v& s* b8 I2 Q \( c Uint32 sample;( t1 i9 e/ U! s" w \
9 x6 ^; E8 @" J" b! c# G# X, V sample = input_sample(); // read L + R samples from ADC9 U( x% ?6 {! X. |
output_sample(sample); // write L + R samples to DAC
; U6 Z9 g# u$ _9 x return;; @ D: L* [% e5 h M: {
}: ~) g- E- c/ d& S$ \
. Y$ K) m7 p4 O) M% |( U: I% J: qint main( void )
. t a% E4 \1 _1 Z5 I" T$ q+ s{: f$ r4 d+ ]0 I: V
/ p' A; Z) {! b5 ]/ M
/* Initialize BSL */
. p' ?) P: ?% x4 ~! C# S+ c EVMC6747_init( );
) X, w: o6 ?9 K' m /* Call evmc6747_intr function */5 q1 r5 W1 m$ K! E D5 `
aic3106_init( );! y7 \( A) O: V S* E. C
while(1);
& @- F: S8 m* f0 b3 B}( a! n( I, `. Q% @2 ]
) s& `( X: t' @6 I; q% j
e$ w0 N G" {- h: _, @8 Y. faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 Q! z+ H+ a* o: c, H' [2 X8 G
/* Initialize MCASP1 */; N2 b& u; j, O% g) f
mcasp = &MCASP_MODULE_1;
0 P0 P3 t: a W7 {! y mcasp->regs->GBLCTL = 0; // Reset
: @* y9 Q* \! [! k& Z7 T- S mcasp->regs->RGBLCTL = 0; // Reset RX
, |3 L0 @' k+ q* p mcasp->regs->XGBLCTL = 0; // Reset TX
/ J" d: w6 o7 ~! ~& F/ N/ j: K mcasp->regs->PWRDEMU = 1; // Free-running
: z- m7 j; T+ e // configure McASP0 receive registers
1 H- J$ j+ B' [1 u8 }; {& T mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
$ @: n. Q4 v, D& s% `/ r mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 M' `' r; d, z& g0 A/ o& Y3 | mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 i3 g- N1 X( Y) \( A+ x" o7 E mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): _, i8 o( o% A+ V% k6 H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ q) c& E7 O/ U2 S: h+ V
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
0 q9 T; ?. r, n mcasp->regs->RINTCTL = 0x00000000; // Not used
( U( B5 d4 Z5 q+ j6 j mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' J8 b( ~) |/ g
1 x5 K& j6 K$ G
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; C3 M+ \- \: e, C mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' M' {% X" p1 I. S mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! F' Z4 n. a. ~& t7 x' Q% C mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 I4 X+ N9 ~4 H, G
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 @7 Q2 P7 N! _' P' ^& o
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ ?& p- ?- H4 @/ }- Q+ I mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; E7 L2 w8 [ s" F; e3 s$ E/ C mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( H: x" o( G: g
: w% {1 B5 V8 g7 F mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" G( [; N& N# c: S. O mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ S6 m" K+ z" E; f ?. ?. \ mcasp->regs->PFUNC = 0; // All MCASPs0 X/ O" m9 v4 [ \& u* Q6 z
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 F$ l0 o! e7 Y, a; \
5 }! i }- ~2 U8 Z! l mcasp->regs->DITCTL = 0x00000000; // Not used7 D+ D* w* T! c k. ~: x- Q8 b
mcasp->regs->DLBCTL = 0x00000000; // Not used+ A( z2 b! Q! X8 q) }( ]
mcasp->regs->AMUTE = 0x00000000; // Not used( `6 p' L. g; O! o5 R
: ?$ C, p( ?5 \7 |! R& f
/* Starting sections of the McASP*/( T; ], _( Y6 o$ k: V% S" J
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 U9 P! g1 Y% y( p: r- @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : K$ g5 b+ ]9 N1 G
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; x' K9 m8 h& @6 m# K. X: ]0 A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 H$ e. o: @' }, p
; Q0 k" V& r) c4 e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 b" X7 d) ^( y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ `' v9 {* W. C+ b" p
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 l1 \! S( ?3 y* y0 x$ d" y0 O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' k/ }! y' n7 \0 `
1 }, H J; |4 _+ w
mcasp->regs->XSTAT = 0x0000ffff;
8 x* |$ f& s1 d, | mcasp->regs->RSTAT = 0x0000ffff; ' I3 m" r( c2 a- U' v
1 i9 I, I2 T# C5 m
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; ^/ \$ V8 M7 p T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' H% O( N' }) t- @# T& ]8 W mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; `: X( j2 L4 R' n' J5 B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 l' T$ a6 x. U# L7 Z& R
2 j# B6 U% z U. ? /* Write a 0, so that no underrun occurs after releasing the state machine *// Y5 K( o5 f- f: T. K, g' t- d
mcasp->regs->XBUF5 = 0;1 g }- d9 z" U% _9 \
mcasp->regs->RBUF0 = 0;
. m- i: b8 b+ N! s8 S8 A9 @) Q1 c+ ?, _! j! P8 u9 t' B" H/ d
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 L! x4 h# m% B5 F. t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ W1 P8 r" F: m) h& u mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 i. O$ w. L/ @1 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 ] w) [ b6 r7 Z y& {
( N3 r6 F& v7 r% Z. D# u V, ^+ ~ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' l7 r/ T h% d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: M! z2 X* S. F- x( M: j- z mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. @" j# D& ?& @' g3 q5 k; L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* ^3 r4 N( Y) }# G
; C1 H0 R I i, p$ D
CSR = 0x0000; {6 o+ f+ ?* ^9 j g1 D
INTC_INTMUX1 = 0x3d;
: g. P1 y8 K9 k& f) P5 t ISTP = (unsigned int)vectors;
, e/ C! a/ s/ O! p- j. F5 X ICR = 0xFFF0; ' B4 H9 h1 I) R/ q4 R2 w; I& E
IER |= 0x12;
* t- \, \( z% O6 s1 H. L7 p CSR |= 0x01;
L9 A( V, X5 p% p- u9 Z& v9 z
- d d4 j0 h- @* q0 F3 B+ G- W* {5 P0 k' \1 w' X, G
W3 |- d' {1 O# k! Z3 N9 B还有就是两个输入输出函数:
& `) f$ a+ h ] G4 A1 Lvoid output_sample(Int32 out_data)
& w+ p8 P) n9 A e{0 S1 J' Y8 ~0 ?2 T# |' _$ z& _0 Y
AIC31_data.uint = out_data; 5 S5 Z) j, v+ S% J9 S
MCASP1_XBUF5_32BIT = AIC31_data.uint;( O+ [' u; k8 m( O% A. E: w
}6 e% I. c' h) m- Y6 _. t# k$ z! x
7 W: [' T7 A0 ^& v* K8 dInt32 input_sample(void)
4 F! v' @8 b/ M5 l3 Z0 r' D{
, r& |* H& Q* {" I: [ AIC31_data.uint = MCASP1_RBUF0_32BIT; B$ o# r* ^; V; N# }
return (AIC31_data.uint);1 v+ Y T. `/ r4 Z9 x
}
- ?9 E* u5 X0 i/ ]; Y$ M6 Y+ ~8 H
@! U" g5 b d) B4 C |
|