|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# K& [3 Z' k: P$ x5 B3 [7 m, Y
main文件:
" e/ g) n% _1 \( W% T& ^) ^9 Einterrupt void interrupt4(void)
; H" `& C. `( _3 n) S2 B{
* w6 F% f) D! ~! q# R Uint32 sample;/ T' Z: ]+ W' X
6 d0 F8 l! l) P" e$ I sample = input_sample(); // read L + R samples from ADC
6 ]. i+ o2 N3 h1 v7 s* z K output_sample(sample); // write L + R samples to DAC & s* ~) j* N, A& I- B
return;4 \/ ]# {2 f( T @+ o
}8 j( [+ m, J! k
1 u( m" F# i, e: M+ @- w- uint main( void )
' J. o j: h, n$ q- _1 U( r{
4 ] ?- u" x! Y& }% ^% r/ R
8 Z2 ^1 g# O5 S z# W L& H; r: } /* Initialize BSL */
' [# \6 T9 m% x4 I& d EVMC6747_init( );: k+ t% y2 _1 [8 A N- C r* `
/* Call evmc6747_intr function */
- W% Y \! N% m8 s3 o! G. h aic3106_init( );7 h8 b. N( m: ?
while(1);* c. f# Z* i' E' l4 _
}& G, G2 L4 I8 `+ V
9 r% P$ {. W, C/ r& S% n" q8 a
& a$ U# C% s* u/ f; t# M
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- N" a: X0 t C3 y9 H/* Initialize MCASP1 */
# i" F1 X# ~: O( r' B2 H& q mcasp = &MCASP_MODULE_1;
6 u- y% j) d- a0 `" B mcasp->regs->GBLCTL = 0; // Reset
9 a8 Q0 X- {2 N: Q mcasp->regs->RGBLCTL = 0; // Reset RX* {# B0 B* N, ~) @& v# ^
mcasp->regs->XGBLCTL = 0; // Reset TX
! `: d! z" x3 Q2 b4 d% K: d mcasp->regs->PWRDEMU = 1; // Free-running9 u$ @- y3 f; l; V2 W1 X
// configure McASP0 receive registers
: {3 }3 l( X1 t* n mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 O. O5 Z! h1 C0 I4 N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- x7 h1 Q5 j# k$ p9 v mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- ~6 x% |' Y( I2 G0 P o& H mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( e! S6 E, j6 C: R" c' }/ m mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 C& S, h8 u6 S3 ^& w3 ^# T mcasp->regs->RTDM = 0x00000003; // Slots 0,1
3 L1 o I( y7 i8 h mcasp->regs->RINTCTL = 0x00000000; // Not used S/ K% v" P1 O8 j3 z
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% C5 r- r5 ^: g9 V
9 S% V1 F- [* k! Z3 e mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 N& b. q Z. r8 ] mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% X( W7 o( p+ _ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- Z7 ^3 @ {$ x* M' M+ e$ o& q mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% y( D8 v6 p" D5 g; W- B1 V
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 B- O" j( Y- W% M7 d: t; ~9 R6 x mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( I6 r' Z) h. ?% D0 w7 I2 e mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; p8 {7 _* S" o! A) x( T0 v7 Q v4 |
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 B% |2 K; e, J! ]
/ V9 l, z. ^! V* ~
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- d- a% Q7 |0 f5 z mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 F7 W1 J& z( H, f# h ]) L mcasp->regs->PFUNC = 0; // All MCASPs
9 @ ?" P" ~+ F0 }# [! ~ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( |1 ]5 P. R; p n. k! x; E
) B9 x& i! `. b z' f$ n mcasp->regs->DITCTL = 0x00000000; // Not used" ?1 y+ n% U$ A8 f5 D
mcasp->regs->DLBCTL = 0x00000000; // Not used0 a% w' V; l6 g! f
mcasp->regs->AMUTE = 0x00000000; // Not used4 v: x5 v. N( q1 g
" @" D3 T! t' N+ L2 b, o, B. |& `
/* Starting sections of the McASP*/
) B0 s" c* L4 a# E4 L1 `3 [: I mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" h, W3 b+ y* E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); / A5 ~" U+ L) q+ }: i2 f7 m3 J
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ \; Z; L+ W7 }) u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: v$ A- O8 U2 r! ^, W5 S
! r* m8 G1 D; e& t: M
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ b: F" i$ E3 `6 S- k _- } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: B o3 I/ @: O$ {( h mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 W& q X1 O- \; ]4 ?0 t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ P5 J. Z d0 u+ b: j/ a5 U6 Y+ j% U5 c
mcasp->regs->XSTAT = 0x0000ffff; 4 E+ K& x' X! n3 \/ h
mcasp->regs->RSTAT = 0x0000ffff; + l2 m2 z9 @2 D4 r
* [! v) r8 s' E- d0 k( t- A, C! K" U- C mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( S0 `" o- B! x3 F' E* d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- w# a- F5 w/ H5 V: D3 {9 d
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 t4 i5 Q+ ^$ c( [9 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" S2 t) X6 Y M6 y7 {1 U) D8 F/ t! n8 m- h
/* Write a 0, so that no underrun occurs after releasing the state machine */9 H s/ I3 O/ h# n1 }0 \( {
mcasp->regs->XBUF5 = 0;
- E0 y0 d, K0 D7 V mcasp->regs->RBUF0 = 0;
) J1 ^1 p+ Z$ H6 `6 u$ \/ j/ W3 `% X* ^9 y5 {" S% w
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 E/ T% }% H- h+ X, v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 ]* g' P* D' n9 d mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 C4 H7 @8 y! Z2 Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 X8 ?9 w: J1 Q L! t3 X" y$ P, M" N5 m _2 p+ @
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 i& d. N' B; R9 C. V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 O, u1 j- q: `8 N% T0 J3 ?' v. s, A mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" ]0 S) ~/ E2 D, V5 d7 p2 a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 H, \9 d8 t( n: @
# t* u/ e& J3 v' J+ X0 a CSR = 0x0000;
" h: \9 e, _3 T) r4 F( j+ _0 b INTC_INTMUX1 = 0x3d;' Q- z5 V2 t+ Y
ISTP = (unsigned int)vectors;
% H U& O) @7 Y2 c' F6 w ICR = 0xFFF0; $ Z. ~9 I, B8 m. M, b0 L$ u
IER |= 0x12;
& s' ], t! m2 D# I; j# J7 d( L CSR |= 0x01;
0 j7 R9 t, K1 ?" r3 B L
+ V7 ^/ G8 E7 Q; _. A
" Z+ k6 j$ y9 B7 ]! n) w' r f9 Q4 E) P' [* m
还有就是两个输入输出函数:/ F9 H. r8 U5 {' ]
void output_sample(Int32 out_data)
. r: N2 D5 H, C# B3 L{
3 J; O& P/ n) F' u( ?2 a5 w AIC31_data.uint = out_data; % |, B2 o x$ _8 P9 Q! t& |
MCASP1_XBUF5_32BIT = AIC31_data.uint;0 G/ S& ]" y0 |+ k9 _0 i6 _0 v
}
) L+ {8 T/ I& ~. A9 }5 m( x \+ a O; G0 i2 `( q& L5 Z
Int32 input_sample(void)) o1 a8 u' v/ j0 [( D- _/ F
{ ) F( l" U; B( v/ X& f
AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 A: X, N1 d/ \% `8 l7 {! b3 P return (AIC31_data.uint);
3 {/ A* z1 v% U4 X( n7 t}
# _# ^7 u* N" Y" _3 M% D7 y
, u( o5 l6 Y# R* D9 e |
|