|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 c1 l- Q5 z2 E, g3 r2 D4 jmain文件:- ?% K0 i" H" u/ Y
interrupt void interrupt4(void) 0 F7 C7 x- F& q' r, @
{
% ~/ [2 t& t, _' t Uint32 sample;( l$ P a. l+ N* {5 L
( E& l" T: m& f3 }
sample = input_sample(); // read L + R samples from ADC- Z( Y% `+ ?2 V4 m% f8 ^( T. N
output_sample(sample); // write L + R samples to DAC 8 u \- a; Y) c- n. g6 `
return;1 Y; D- @" T, `2 K
}0 F1 p+ x6 O' ^2 O; Y( w5 D' ^; j
& o2 \- X8 f \7 Hint main( void )7 ]9 H) i1 o4 g- ^! f
{
& ?1 G$ p5 n/ H! O7 j
6 ^) y t5 `6 R J /* Initialize BSL */# e$ W0 C7 s) I( Y* Q8 p
EVMC6747_init( );1 A5 b$ D Z0 C: A' p4 o0 ]
/* Call evmc6747_intr function */% |# u) Q! [! m3 s/ Q& f4 P
aic3106_init( );
- A6 D: Y1 r5 U- t V6 m" _- B* \ while(1);8 b% M- _ H( s' ]3 N
}
: L0 z* j# S% c7 y+ d$ r5 x
% Y' G* [ E6 F5 o( Y5 @3 p) p: j O: O6 n4 I/ z6 z3 y, r0 t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, m- W$ R X6 p; N; U5 M- b; k/* Initialize MCASP1 */: K7 Z" V* m# X, ~! }2 v
mcasp = &MCASP_MODULE_1;* B! U! J) s! f: ~( K
mcasp->regs->GBLCTL = 0; // Reset8 p/ D/ `( g8 J& M; ~0 q+ D
mcasp->regs->RGBLCTL = 0; // Reset RX
: ^ s2 M9 Y0 R2 D$ M mcasp->regs->XGBLCTL = 0; // Reset TX3 J% t9 F- {1 q5 F4 P9 v+ n
mcasp->regs->PWRDEMU = 1; // Free-running8 D! B* a# H$ y, N: `1 w {* K
// configure McASP0 receive registers+ F! p: S4 g' a v7 X! r+ @
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, ?3 B) x0 M" i- ^6 i( ]' ^7 O8 R! P mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 z; u% V& k: W9 H4 c- A6 l
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! x( C0 [/ v! T9 z mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 r# R& T6 N1 n# b+ ], H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
: k- Q$ q: C4 b; @" x9 l, j/ l& W mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ [' o& W& U7 O. e8 r mcasp->regs->RINTCTL = 0x00000000; // Not used
, d1 F* Y; L; { ^ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 I- O1 A1 g9 E( O; d
3 W1 e v3 s+ r# a
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: \: G4 T2 d6 o) Z' \( V
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ q6 }& U2 O; f. }0 v3 x6 w mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# y8 u7 y' O, ~; x( F1 d mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* k" t5 E; @1 d6 e' T" s3 S
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
. t! K! l7 ~& ~ X* \ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ l+ P+ J0 o/ L% m' N mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
$ j1 N" a/ x: Q, N; Z% H5 D8 b8 F mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 j7 P# { d7 |
& @3 f5 B2 z& X" O1 N( [ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! b1 ~% ?$ `$ Q, `1 K* p mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* G @5 f! Z* @& G) ?
mcasp->regs->PFUNC = 0; // All MCASPs3 u& B6 E8 u" }9 H4 T+ o; g
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# J& S/ ~+ _% c2 `5 x
5 `! Y- N, W3 `" G: H
mcasp->regs->DITCTL = 0x00000000; // Not used
6 P; a e8 o. ]7 D3 M8 S mcasp->regs->DLBCTL = 0x00000000; // Not used
- `1 f& ]+ f) v8 v$ j6 D1 r" R mcasp->regs->AMUTE = 0x00000000; // Not used
+ d- A- T- S6 m8 ^1 M! M, o& ?; V9 W& n8 Y3 R4 p
/* Starting sections of the McASP*/- Z3 ~! T5 o$ ]+ e4 k7 E
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 R( S0 m2 p% m9 [0 e$ Z2 a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 Y% O7 D/ D6 k L+ S& M- A, t0 r
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. ?6 P& I; V; c, t, j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 m: @7 i1 |3 `6 q6 r) N& |/ ~
% P: c' z& G; D mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 K; c- ~. Q0 `, W. |! Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( v/ b& l e+ V! O% n+ W4 u
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ {+ U% D* y; k( J d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 c; T$ p) T! ^- W
- z: A, [7 L6 e3 _3 }/ p mcasp->regs->XSTAT = 0x0000ffff; K4 K" `7 n! f+ x- j5 \$ k) ?' {
mcasp->regs->RSTAT = 0x0000ffff; 4 e* D6 \7 z! o: b. R) m; B
" F$ @% k6 O, e2 S! m/ Z mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) H" M* _6 |( Y) j& l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; ^0 l& k& n. E' Q6 J" |& v mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' D4 j6 x& ^3 p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( I/ j8 _0 N5 c5 I
1 g1 R# S( T5 b /* Write a 0, so that no underrun occurs after releasing the state machine */
1 u6 S$ _; a. }5 h2 W! n mcasp->regs->XBUF5 = 0;: B9 h% L1 O2 [: K
mcasp->regs->RBUF0 = 0;
; p& J" r! W8 D+ a( H1 x) h' g
; L' S! n* S6 H# {! t/ D mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, w8 Y% p( K3 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- E3 T2 V$ V6 O4 G6 A6 O& k9 H mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
: Q o1 e+ f8 `& N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( a( m( X9 e, A
G# K4 M5 Q' Q: r Z mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# O/ k0 @: A( F- T0 J/ ^1 {) X6 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 H+ @. ^2 g# P mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 ^9 M' p: j& b7 D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 ^7 `* s5 ]( V+ f4 t- \& G. ~/ i8 P( @5 k# U( C# Z6 L
CSR = 0x0000;
0 n. k! R; C/ v/ @, D: ?. n6 n INTC_INTMUX1 = 0x3d;
1 ]: e" p* o- g9 m ISTP = (unsigned int)vectors;( A; \) g3 T! ~& X
ICR = 0xFFF0; j0 a- \5 e6 C$ f, V A: I, t
IER |= 0x12;
+ Z7 b, z3 U$ b# P$ ^ CSR |= 0x01; . w7 Q$ ^' v; r/ f! E
- y7 k( E5 r3 j; h
7 w8 u \( q% K9 `! [
8 v- e6 e) K8 P3 B还有就是两个输入输出函数:! \+ W8 ^. U& E; L0 a* n- s s8 V: w
void output_sample(Int32 out_data)
& B" B, j& x) M+ `4 e8 O+ V. V{( C; i# Z# ]% O) A7 J( m3 a; e! N
AIC31_data.uint = out_data;
" g4 @, c E/ V- b2 X4 n MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ q+ f$ J6 s, s' }2 d}7 @1 a# ^% v2 X1 I/ z
5 L+ i6 E- j; u+ z+ Z$ ?
Int32 input_sample(void)
5 \/ K1 `+ x# Q0 N{ . _0 C7 l: |5 N
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. O4 H7 h2 [3 U: J return (AIC31_data.uint);1 G' ~6 b" d3 _( `; m
}# C& Q, s! P4 @' x2 s4 k
- p; e. G3 ]2 T1 Z" M, F7 l |
|