|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) J: U8 c- J( }
main文件:
% l0 g* a0 X9 n) zinterrupt void interrupt4(void) - k( ?# T- h8 t
{
! M; C8 R$ [: ~ Uint32 sample;
% M- `+ S- R* A8 e
# H- x( U1 i3 t% [ t sample = input_sample(); // read L + R samples from ADC
% N6 i, c/ C% g( V* v output_sample(sample); // write L + R samples to DAC : b0 I7 X8 y9 }$ a5 v, \, r5 D
return;
8 N$ J/ P7 s3 p3 L}+ P6 g4 \4 u5 ]
" {, s" X& V, ]0 o& zint main( void ); P; W: L$ q+ G c2 V" z. M6 V
{9 V: u: u0 \+ `" o; C
# ^* t& M& V/ A# A
/* Initialize BSL */
; W6 d8 ]6 b, {+ J5 [" S EVMC6747_init( );2 R& a U0 C. ?+ u: a# `
/* Call evmc6747_intr function */" \8 E& P" d3 D& L9 p9 ~) M5 r. x
aic3106_init( );3 v q. y4 w8 _. Z
while(1);
* \$ C& F2 L$ V1 ]7 r}
; E2 s8 o7 l" N$ Y0 |+ p `* ]4 j
5 X- C Q, E/ n( U( _) t
, ?0 v$ Z6 k" w" Y0 y) J' `aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, y) p# A1 s1 Y
/* Initialize MCASP1 */
' ?, r0 i" p# ]4 w1 E mcasp = &MCASP_MODULE_1;
& Q) h$ n+ \1 b2 ?8 `! U* W mcasp->regs->GBLCTL = 0; // Reset
0 O! _: t4 p q, E9 w: U- g7 t mcasp->regs->RGBLCTL = 0; // Reset RX
: M: w. p9 v1 g) r mcasp->regs->XGBLCTL = 0; // Reset TX. z) {1 H1 c: A- w0 G
mcasp->regs->PWRDEMU = 1; // Free-running' Z$ E( v5 E! z* }$ e5 z0 M5 g
// configure McASP0 receive registers
6 y/ V% h5 ^. M U$ N) C mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 J. Y+ m9 y( t2 F- E
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; X/ G( w+ \6 i. B
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 i, I! I/ U; R. z' l/ l* i
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! K- r6 r6 V }- M$ u! s1 L S2 [
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 ]3 h m4 E1 v. N mcasp->regs->RTDM = 0x00000003; // Slots 0,16 T6 G" s! D2 ~" A ^8 e
mcasp->regs->RINTCTL = 0x00000000; // Not used
$ L3 b1 _3 ?; |0 i+ V' S9 T% | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 ?6 Q# ~, [7 `. O [, Q* U Y& G) I' ^6 Q' J5 G/ g! N( { \' N
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
- m) a4 k4 {2 p$ k# i6 X mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 G% g7 J% A! ?5 Z! E" A mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ a8 Y+ S! ~1 k mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 I: d m t3 r' G( a
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK$ u: q( b5 o/ R3 ^; Y
mcasp->regs->XTDM = 0x00000003; // Slots 0,10 {* e r' S. G5 I4 z- x0 ]
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit" I2 F, C3 D W# }
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! M, O2 e, k0 h; _+ m
9 \6 J4 c E% n& T; Q" t
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN. v# T: s! Y+ S# t6 @" u% C
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 Z S; u9 o- I; Z; k; ^" C mcasp->regs->PFUNC = 0; // All MCASPs
4 _# r) t% J, s* | mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 q% T% |( W4 p' H& u$ U y
) q8 H) p" K, R: K9 K' G+ }
mcasp->regs->DITCTL = 0x00000000; // Not used, h% |9 C `, o3 s5 K& D- a
mcasp->regs->DLBCTL = 0x00000000; // Not used
% J6 d2 K6 P7 ?! v7 g mcasp->regs->AMUTE = 0x00000000; // Not used( v2 H9 U7 M: x; ~2 B/ R
& b+ Z7 }9 E O" I, ]
/* Starting sections of the McASP*/; M3 h9 x4 x6 L6 d- q+ ~
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 e4 O$ Y3 ? X2 U3 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . }/ E I0 y, w7 p
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( \) n; C! _- {% t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ b: g3 @! j" I: y# A
* f$ u, y |: b& f8 p3 Y; f
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# j6 P1 D& L7 J' I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( z' q- n3 \! Y* O8 x+ r mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 S! E; j, ?6 g% j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 e, \& f: F' f( ^7 v2 }
" I' X9 u: a% t0 F mcasp->regs->XSTAT = 0x0000ffff;
4 ^. @) d, K9 o( d+ Y9 } mcasp->regs->RSTAT = 0x0000ffff; 9 n6 o: D+ T |5 n* W/ x+ }
7 I( g. `9 W+ ]! w9 H4 R2 w
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* ^0 M% m3 [# `- K+ J: ]' t+ G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 X" B2 e$ r2 K8 i& B/ Q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* Z+ e( o+ I$ k$ o- {6 c2 e, ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. x. {# _+ C; m- v) I- F' u( Z
( S8 ~# `: O, E N0 ~$ s0 h8 E* y
/* Write a 0, so that no underrun occurs after releasing the state machine */' ?! c% c+ n3 u7 ~7 m9 d
mcasp->regs->XBUF5 = 0; ^& |- [3 r& G2 w0 Z
mcasp->regs->RBUF0 = 0;
4 W8 M& ~ O6 R, q$ U' z6 j+ M' g
2 L* D, h9 x+ V mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " t0 h) M/ W4 ^4 X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 ?0 k& T( ]4 p' J& L- s mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 b# u; p% l( \) F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( h( M- n, t1 V+ D8 B) {% C
( A6 s( z2 o9 T
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ U& ?: E, ]" y' e) P! u: C0 r( G8 [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( A3 _3 Y# D, {" ?
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # Q8 D5 c N# |6 Y+ J" d) O/ o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 @7 ]! J' R/ v7 g. t5 B, |/ N9 ?; ]! J1 L& p
CSR = 0x0000;
2 K: E8 f5 J; Q! l6 }: c INTC_INTMUX1 = 0x3d;
4 n: X: T( N3 k7 l2 R K2 R) ~ ISTP = (unsigned int)vectors;9 Y3 E8 Q4 J6 F2 i2 d3 f7 m4 a/ s
ICR = 0xFFF0;
9 ~, D8 @ ?! X1 H8 t1 C ~ IER |= 0x12;
" o2 |5 F! S2 K! d CSR |= 0x01;
* N' p7 l6 y3 H7 n4 L% u; c3 f2 @1 \2 v8 l- f2 J
- i/ s* d+ v. _
5 b2 G5 L! z' \$ `9 E: p
还有就是两个输入输出函数:. A4 Q& r, ^; L5 A C% W1 f
void output_sample(Int32 out_data)
/ }* Q. c. `3 u3 y/ Q{
; N$ M' d: P. K, g }& i AIC31_data.uint = out_data; 0 u2 B5 d" j9 s% W+ p
MCASP1_XBUF5_32BIT = AIC31_data.uint;
: j$ a/ g Q& _5 e$ X}
2 Z2 ?, s' h3 O1 m% O4 p- Q2 V
; s" \9 G+ u) \9 N9 t) W0 y, kInt32 input_sample(void)
* I* X, O# s. T* g# K" C# V S& u{ $ r4 y7 K6 c, I) Q
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 f) h2 _" T+ x* v, d
return (AIC31_data.uint);/ z+ v# ~; k4 y3 \3 b/ H8 R' c4 P
}/ t' K' U5 {& e) q6 G
" e4 U4 V! v, I8 O- o
|
|