|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; n2 Q! s5 h6 l3 _2 P
main文件:" V* v' F6 ?: z
interrupt void interrupt4(void) " I9 B5 ^# p7 z% m: n, |8 h- r
{
$ M+ D9 k& ^# ?( h Uint32 sample;/ |, M: B7 c/ u9 u
3 ~0 Y5 f* o+ E8 I
sample = input_sample(); // read L + R samples from ADC+ v, T0 v% I9 d7 k: o" O
output_sample(sample); // write L + R samples to DAC 9 i8 e; D! C! p( W' W
return;# ~. b! i9 p2 K* n6 ?& f- L/ F
}
7 @9 v/ q( w1 _3 S- V& b: z
. w$ k& h8 R' p8 N% Vint main( void )
( A& e2 D: Z6 g# l8 ^, d{
% W$ G! r( I9 v* ~) ^& w1 O( W
& l2 L5 F* \( [; Y1 ]; D" j* U /* Initialize BSL */) ]% r x& Q, B
EVMC6747_init( );# H7 Z, G- H3 N9 d- {
/* Call evmc6747_intr function */
8 f% L2 f$ ]: j2 O. V( v aic3106_init( );
4 v- p0 C; t. V) z. x* m- [) W6 ^9 V while(1);
0 `' p5 }" d: f$ `}
8 d% W% Y* T# ]7 @! Y5 W+ t$ d$ e/ R
- K+ r! Z _1 Y* X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 l) ]1 I$ P- u0 Y2 P- U& e/* Initialize MCASP1 */* Q8 I+ {% o' h0 `) @: N; n; m
mcasp = &MCASP_MODULE_1;- Z4 [8 A- r5 H, [: y
mcasp->regs->GBLCTL = 0; // Reset% _0 B- F7 z2 B. x+ w' E: U0 G& w/ K
mcasp->regs->RGBLCTL = 0; // Reset RX7 ^: q- [, Z: B' B
mcasp->regs->XGBLCTL = 0; // Reset TX
" f' [7 F' b$ C9 [ mcasp->regs->PWRDEMU = 1; // Free-running% q( k$ d# {6 l" \2 w
// configure McASP0 receive registers
7 S& h" n! [6 R- b* r2 \. Y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
- F6 s& L' @+ B( l1 ?; ~7 ] mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ ~0 d; F! B y8 G. Y1 C mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word& x' Q, Q, y, ?! Z
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; Q) Y6 W% _' o mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
v! a, `* I& E8 z$ d mcasp->regs->RTDM = 0x00000003; // Slots 0,1& N4 d8 C1 S. l0 e% j
mcasp->regs->RINTCTL = 0x00000000; // Not used
0 Q4 i" F$ o- G: ]! h8 o+ P+ g/ a mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 x0 y6 r& E7 `) `* ^% G
D: S1 g/ A; o
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used; S; E4 ]. e7 u
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 E6 c, Y; h9 U% g
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word N1 h( [; e9 J% W; v
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 V0 R: r! D" I! L) F9 E/ {6 v) N
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; M7 j( L7 A# n) l: `
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
# k, p. Y- P- W- ~, h; _ N mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" }- ]( n7 q- \( y* J' S mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 W2 O- e5 z4 J0 R. N: Z; p7 S, Z3 N/ U
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ _) C1 U6 p* c: }+ Y
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: S3 w* a# [( X# d1 \ mcasp->regs->PFUNC = 0; // All MCASPs
4 t, N% J# r% w! Z J" Y mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) i0 l8 g7 \& u j1 a' Z* M: L# o4 q. C9 C0 W* D" Q% @
mcasp->regs->DITCTL = 0x00000000; // Not used
( G+ F; u- [5 @6 i! J mcasp->regs->DLBCTL = 0x00000000; // Not used
/ O2 g; U! N m: p5 E) K mcasp->regs->AMUTE = 0x00000000; // Not used% c7 j% ? _" m
4 c) L* T! U4 k6 Z$ v/ E# E# P+ B/* Starting sections of the McASP*/
: T5 I( K2 @" T5 z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: w/ K4 A6 G+ R3 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ o. W$ v% X5 k
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + h- L1 V5 Q& P+ b# B/ Z$ k9 U4 o/ }
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ I p3 s1 ?* Z( D9 r
# i2 S: U# m" t1 U mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 N& f( l! L+ r* g! M0 @* Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ G2 T/ m4 q: x5 F4 L, j mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& _ C6 u; E' X- C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% [+ ]5 p( }( K3 r- W# S/ R
) |8 c2 ^7 f" p- h1 k) |
mcasp->regs->XSTAT = 0x0000ffff;
4 V- w" r' s) t( ~: p5 q/ z( B' Q4 X mcasp->regs->RSTAT = 0x0000ffff; 9 B; d' }* D2 r; A. g" r
0 E6 u* w* t3 y' I mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, M. ]$ X* q' k2 N1 B: K& s# y& C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: c1 b6 J& |( A mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) n, I1 _- U, g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) O0 y$ x. ~4 q2 i* X, M) K" k
; f9 n6 r7 o( O7 h& x. K
/* Write a 0, so that no underrun occurs after releasing the state machine */
# d5 W# o+ z$ n4 m% R8 X2 _# p9 T mcasp->regs->XBUF5 = 0;) B4 d5 p& A5 S4 [- P
mcasp->regs->RBUF0 = 0;6 a1 L5 X9 l" U+ ] \- I& Z
; k4 T3 X+ J) K; J
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 R+ L) v8 S) S" Z6 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- `- Z0 Z: o+ X mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! y$ Y5 k, C4 X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON ); g) d8 }6 D: W2 \+ L* L; G
5 E5 i8 g; W7 z j+ @
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 x, S& g( @+ M( p4 Z+ Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# g$ V) m: P- n1 T& \! J2 Z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - S0 u# G* G+ o$ J7 M8 i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# u2 p- }: S$ G/ G1 U* Y! f0 p' s( i( Y/ p# m
CSR = 0x0000;' [$ _6 @$ ~ y L
INTC_INTMUX1 = 0x3d;
* y" G1 B. F( E8 l* S# d- q/ [ ISTP = (unsigned int)vectors;' y. q& ?1 u4 a/ V5 D, a/ z. D) N
ICR = 0xFFF0; 4 U& T# h' x% z4 c
IER |= 0x12; ; [$ [7 `4 ?* ?2 _6 P2 V
CSR |= 0x01;
/ b6 G/ e# c8 A& _( y+ l% O6 ^3 g: [* x
1 w8 I2 P) M6 o7 J9 q0 a6 r; W. k3 S! x; j' H
还有就是两个输入输出函数:
0 [( [* H1 H" Fvoid output_sample(Int32 out_data)* i& h5 y3 t2 S2 Q: R
{
2 x# }7 t" N# X AIC31_data.uint = out_data;
! d3 ?) G: t8 r. R: C1 q3 q MCASP1_XBUF5_32BIT = AIC31_data.uint;8 ?3 J- q) |* B0 U' w# G
}
$ @# Q6 i5 l8 V3 [$ s1 G9 B% T/ Q; ?5 e; J) c6 l
Int32 input_sample(void)
1 n/ `! c% N# R( d( D{
z% w( [! D7 c- o4 b' t! h' ] AIC31_data.uint = MCASP1_RBUF0_32BIT;
& i8 w; M; n5 X6 |. f2 J6 R% C return (AIC31_data.uint);7 Y( i! F+ ]2 k) V( ]
}# j9 v! r0 I/ `% H% ?
7 @5 n$ T) I. w2 [& M
|
|