|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 y+ J5 L& z/ n. Z+ A) Wmain文件:& u" w1 S$ \( p' E+ J' Y
interrupt void interrupt4(void) 1 V6 B! c8 k9 Y- o# ^: J
{1 o5 N2 |! s( n" U0 }4 m: X" a
Uint32 sample;
( b& l8 h# ]* z+ H( ]- }2 R" o7 C
" O. h( n& x5 |" M2 x" s4 p0 l sample = input_sample(); // read L + R samples from ADC
1 u3 F. m+ q8 ? output_sample(sample); // write L + R samples to DAC 4 K" O: u) `% F. d ]! ~
return;) W. @" ^$ A8 k% r l$ X( Y3 B
}
/ ^6 g4 h- i% H: d
* d3 a" a. e, s1 G$ ]int main( void )
. m7 P+ R6 N9 I) J# `' m3 G* Z' z{
0 X$ B/ G a; }( G* ]0 o8 R' e" W" p1 B! O6 @
/* Initialize BSL */4 p/ p) E- c) M, ^% H5 ]
EVMC6747_init( ); I. S5 w) F4 {6 Z- N+ r3 D% n
/* Call evmc6747_intr function */8 ?% v% a3 M) R& H0 U$ |' J
aic3106_init( );
" U! X+ J7 m4 z D3 f while(1);
! [$ M4 B5 {8 I' v}
% _/ X( f, V0 ^' X5 c$ k( t& m" w) p' B. o3 N# B' K7 [6 k
3 i, m+ E* B R: \7 r6 ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 J k- X+ j8 p/* Initialize MCASP1 */
8 A n! P+ E# Z; W2 C mcasp = &MCASP_MODULE_1;' [* |! ~9 k" E
mcasp->regs->GBLCTL = 0; // Reset/ p5 `7 O7 T! [ e$ l8 i9 |
mcasp->regs->RGBLCTL = 0; // Reset RX
7 X% P: J6 ]7 t" N- `$ S mcasp->regs->XGBLCTL = 0; // Reset TX( g2 N9 y* E8 m) l
mcasp->regs->PWRDEMU = 1; // Free-running! p0 A, v% h3 R1 ~
// configure McASP0 receive registers
4 t3 j u9 _" [) \/ `. c8 H mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% Q) X2 o, }: K# K2 M& f
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 R0 V" x7 e, o- c9 l* o7 a mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 U6 Y" W! v3 R- Z$ }/ }! n
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ d5 _/ \2 V- B0 A% z9 n$ m mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) m- K. Z3 J& H2 n0 b2 T
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 e3 y* T- P; T1 O h" O mcasp->regs->RINTCTL = 0x00000000; // Not used
' H+ I% n. K- r6 z" g, K% r- Z' ^ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* K$ h/ N' h( x0 W6 l; ~
, T( L+ z& D0 X7 w mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 e# y4 p) D( U3 O& P, Z
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! b* i0 N' c1 J9 V2 ]* D% n/ ]6 M7 k: ? mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 ]* g8 o3 h9 u; L$ N
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 ]4 B5 J2 c2 ]
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, }9 K% h+ v7 o mcasp->regs->XTDM = 0x00000003; // Slots 0,1! p P! h8 K7 k3 ?5 M. }
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) {* R: ?! F) P! {! T
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: x* e. x- `1 y0 j0 k3 f6 T8 d! r& e" V0 m- y& n$ |! I
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN& `2 o4 L0 @7 ^$ B
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 F3 o3 N7 i, d A4 c! `3 t1 W mcasp->regs->PFUNC = 0; // All MCASPs/ J* ~# t$ k3 E
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' p. h7 g' K: O+ ^
4 ?% ]/ ^7 z) `2 j$ E0 m( a5 ~3 @ mcasp->regs->DITCTL = 0x00000000; // Not used6 [7 x; R0 a( m
mcasp->regs->DLBCTL = 0x00000000; // Not used3 [6 s# K$ d! k( o
mcasp->regs->AMUTE = 0x00000000; // Not used
7 I4 I; w$ j- }9 k6 h+ B @5 z) s: T& |9 W
/* Starting sections of the McASP*/
5 o( m R' U5 k% e8 [; R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 P$ l! Z" ^3 d9 d0 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- ]0 p2 r. E$ T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 K6 @7 }7 s7 l- f7 S G6 H7 {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* N9 n' E5 w. e" {# Y% [8 e, i! V. ]0 ?
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " }3 L& V. ]$ }9 G8 g( ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- [, w( @2 [/ o* x. O- d5 [8 D. Q( U* H mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 ?9 r7 E9 |5 w0 B- g; D* W# M& N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; q0 L; G1 |% p
0 M: o d/ B% v% w" I9 y+ H3 B
mcasp->regs->XSTAT = 0x0000ffff; ! }4 Q& k1 \2 G5 t) Q# z& B
mcasp->regs->RSTAT = 0x0000ffff; ( S$ i" R2 Z, Y( T N
- R h3 w2 G/ a8 `2 z: H
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! a) L+ w; J$ T, K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 q& G2 D9 Z$ }$ l/ E1 [
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' c- z: z# I9 U6 q6 f( S) n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) C0 @* g/ w+ e9 K; N. ?
8 A( X4 K- v9 D' {, V5 z8 a /* Write a 0, so that no underrun occurs after releasing the state machine */
; m6 w9 |8 w0 R: i" s. v mcasp->regs->XBUF5 = 0;
+ _1 N5 m; }8 o5 r) \" B mcasp->regs->RBUF0 = 0;
9 W8 N( D2 u* y8 D5 \
' ~6 t! X2 `! Y( G2 t mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 I6 F+ s! Y7 W. y* `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 C( w. R; `9 s! ^
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ R, G. l& a9 w( h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 V/ K3 n+ l- T: T
9 t3 h* ?! l% H mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; b5 k( z1 G: P8 w, |4 ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! R' h; X0 t- O+ k: X/ y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 E1 ~3 M O* ^5 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 X. A: B& n4 x7 h
: Q" u9 o4 F6 l2 @, c. K CSR = 0x0000;
2 V" j( Q$ V. g. m1 | INTC_INTMUX1 = 0x3d;
3 n0 e# Y8 K6 v ISTP = (unsigned int)vectors;0 |2 c. j% X4 ^7 E+ Y5 [
ICR = 0xFFF0; ' }" Z9 c- T3 e0 i6 ^3 e
IER |= 0x12; : }9 A- a7 a3 \0 a/ b& d& G, l
CSR |= 0x01;
3 v. t5 r. o( O# V5 f7 \4 P' U: i" a6 m
$ ] p W$ `* l
& `4 B2 T( a' ?# z& n D还有就是两个输入输出函数:
. i$ l @8 y5 D6 Mvoid output_sample(Int32 out_data)9 t- I( o; } j7 c$ r( M$ Q; ~
{
t, Z, o) a) L AIC31_data.uint = out_data; 3 M! L6 u# G- s' i/ D8 q4 h
MCASP1_XBUF5_32BIT = AIC31_data.uint;
' R x) q: e- O/ ?; H}
8 n3 |0 j' [# i7 `: @. ^- Z: Y- p5 f. z6 ~
Int32 input_sample(void)( w& T! Y; i6 l5 Y. h
{ 3 c3 x$ y/ e+ d( h
AIC31_data.uint = MCASP1_RBUF0_32BIT;1 a. D* `. h( \4 H
return (AIC31_data.uint);
Q0 g0 S; _% ?: ]4 X$ D( w. a}3 H0 Q+ L- m7 v p* v' O: i' i6 r
; V8 _& d4 W- \. ~% K
|
|