|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, T9 ]- r/ G& F* Mmain文件:
4 r: B4 G% h& y8 | `interrupt void interrupt4(void)
) s" d3 r7 o9 {, z- }{: `5 u: b- N1 E
Uint32 sample;
5 |$ ]7 S- P5 l$ z8 p$ b' l
/ V( X2 W: {. w$ {2 T# u sample = input_sample(); // read L + R samples from ADC0 `% w' V, I, h; ]$ k3 l6 \
output_sample(sample); // write L + R samples to DAC 2 Z7 ]0 u, t# s% ?" i* b
return;/ O$ Q1 U2 T. d3 w. l
}+ c6 y( \- c1 K5 C: u! E
! y5 J" c+ g- o/ o xint main( void )
0 N7 b% ^5 f% k. ~4 X# y0 U$ C$ p# x{
$ b' e, I" q6 _8 N: z0 N0 o, x
0 R2 V" ]$ R8 o! Y8 i /* Initialize BSL */
5 _+ ^, r0 e- }) g3 A EVMC6747_init( );
+ }& ~! m- J3 u5 E6 L0 D /* Call evmc6747_intr function */9 @! f w' C) l! _+ ^
aic3106_init( );
4 Y5 G2 e; ?7 T8 w while(1);
7 \2 L9 K3 o- i3 j3 u5 `5 }- R}
j8 v- H$ k; }: m' f+ r9 _7 S- i# X Z# R* o @9 d
" [: F) I9 |% }% S, z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
l' u4 a1 i0 J I2 u: a5 A/* Initialize MCASP1 */; [+ b% C; l$ Y- F
mcasp = &MCASP_MODULE_1;
2 G1 s5 @9 n- R' X/ B8 A1 f mcasp->regs->GBLCTL = 0; // Reset
9 u2 L5 U1 o5 W0 {# _4 x& } mcasp->regs->RGBLCTL = 0; // Reset RX
) R, l4 y5 J$ V( [$ ? a mcasp->regs->XGBLCTL = 0; // Reset TX( A% l8 R! a+ \# |' o0 c* R* n
mcasp->regs->PWRDEMU = 1; // Free-running/ i# \, n: V% O& r7 e" P; ~- c$ J* ]. {
// configure McASP0 receive registers: W: y- s2 [5 A" G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ S: E, E# x; F, H# p mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 y+ G7 q B' _7 v
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* d! Y) g/ Q2 w/ k- A
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 v+ Y# ]( d5 S; W. A; R
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" m' A' ^ S/ @" g
mcasp->regs->RTDM = 0x00000003; // Slots 0,1' x4 U. i/ [; m% s3 p, C
mcasp->regs->RINTCTL = 0x00000000; // Not used0 M6 y1 E4 g4 C
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* Z7 u8 u: b" G x7 s3 ?
: P0 K$ U: U( U8 X- h9 l0 A: w
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. o0 ]( M7 y; P, f3 W* V8 N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 d3 n& w P& s9 j) s mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: R" r/ T/ `0 U& y; F
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' S0 w" K- T6 V( M2 S
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- L* ^# L( b7 k J6 }# O: n Q; q
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
1 A0 h3 G4 _0 F9 V8 g mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 z C& u' V& J% ~/ `5 {1 u mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' C: B ?! i" x/ {9 ]
) f: ~- ~% l/ j% A1 J ~( z mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
+ J" n/ I7 h7 B) m mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
$ b- ^( r# `" I# h( H mcasp->regs->PFUNC = 0; // All MCASPs
6 u! z5 \, p) m- F mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% f* Q4 I' D! |( F" S
0 `+ H; f3 F9 J# k mcasp->regs->DITCTL = 0x00000000; // Not used* I7 K- q# T; I; Z& I
mcasp->regs->DLBCTL = 0x00000000; // Not used$ [! |9 |5 E, x; i
mcasp->regs->AMUTE = 0x00000000; // Not used4 O: L$ r r b( }6 I" z+ L7 O
, v5 i5 ], T: ]8 \& u: P1 `. H& E) ]
/* Starting sections of the McASP*/
0 U9 L; | N! K" `1 B mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 N& w5 v0 T6 m/ r% N8 Y! z* p ^1 q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 E8 n0 S2 i& a5 w8 e3 q! o mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 C, S: M6 h5 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* e3 P2 y& R) N. g1 n" F1 k" L
9 c! y' Y+ Y H* {( I! P mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 K2 J. P1 Z2 @- m, v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* F. n% W o, o G, I; [ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 k% @- t8 I9 w0 e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ c- j8 C1 H4 z+ B! b
& n5 T; T3 M9 F# J mcasp->regs->XSTAT = 0x0000ffff; * H1 Q8 l- g$ E0 q
mcasp->regs->RSTAT = 0x0000ffff;
' t5 W/ { E) n" k- p1 m, P- b9 n t/ X& s0 {% G
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! g3 n9 O |) x" H4 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ @$ y4 z6 J7 b1 ^' J! j
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 H# h8 X0 z m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 T: z5 B7 D/ ~+ @% H# G
. Q5 O7 i4 C u9 }! M* O
/* Write a 0, so that no underrun occurs after releasing the state machine */: v# O, `! N% F5 Y
mcasp->regs->XBUF5 = 0;
, K+ d. d6 r/ o# d6 n/ f mcasp->regs->RBUF0 = 0;
( H& T, g6 G: j) X; v0 w3 i6 T2 B
6 x/ G% W) b6 E5 U# \+ q mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 o7 w, G4 N. q9 ~# C% m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( M: b0 e# h4 i mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * x0 d1 D0 A N9 y6 W* F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, k, x+ W7 `! E& X: K9 Y6 U* ~9 Q
| t0 d1 N6 Y2 [# s mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 G* C. @/ U7 T- v& K- B% _) @% ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ U: Y3 E" ?$ V
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 B1 T# j2 t! {/ ?0 m8 O7 W3 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! X8 `1 M8 t* w2 ?% Q
0 W, a: @) K7 h+ L CSR = 0x0000;
" b# Q# K& J. r! s: Y# a! C+ a INTC_INTMUX1 = 0x3d;" {7 V6 o# B6 a* A3 o. F f8 d: I
ISTP = (unsigned int)vectors;
5 _, V9 Y$ r: {/ Q* y6 r0 l ICR = 0xFFF0; % f5 X/ C+ p- { n! a( _
IER |= 0x12; 3 Z9 b+ {) W5 i# b5 P" j! O
CSR |= 0x01;
7 k$ x. B% c3 D0 W: S" L4 s3 X4 q+ [% {1 S. a+ ? v
i0 {; a' T! w, l5 H9 n
/ _( {: M. J8 s
还有就是两个输入输出函数:: X+ C3 A! `0 x/ @: }
void output_sample(Int32 out_data)) h" e9 c2 y! q& a+ z A
{
) m& c: x8 ^. I0 I; p4 i- i1 m AIC31_data.uint = out_data; : I+ T$ [- c/ H% U' P
MCASP1_XBUF5_32BIT = AIC31_data.uint;
, f: x! g8 p5 o: H& l}8 ^* ^/ g' v5 X2 c0 T( m
8 Y5 y. O2 E- }7 }- xInt32 input_sample(void), r$ z- o) m0 r0 r. U/ y+ }+ _* c l
{
. ~* S( c5 p6 c9 r' [ AIC31_data.uint = MCASP1_RBUF0_32BIT;+ f" a- Z- X3 B# P8 {+ C ?2 Y8 p
return (AIC31_data.uint);
2 I1 O5 v& i0 k$ a}
* x2 m, L$ y0 ?; ~& Y4 a
9 A* p9 u4 V R |
|