|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: b6 v h% D. |5 I% m) V
main文件:) @ r- [) d5 H2 j t9 G! }
interrupt void interrupt4(void)
% o/ J. m& W, X( ^: R) o{ |) Y4 {" ~7 J. e6 J) g
Uint32 sample;
! Y& f- F6 a+ |3 I4 V
; `# k/ g8 j2 o% L sample = input_sample(); // read L + R samples from ADC) h& D- o& t+ Z( i* h
output_sample(sample); // write L + R samples to DAC
& a# G6 R; \% h7 |% r return;/ h) L% b% Q0 n n# y
}
$ [; f6 W* M: {; L
% a$ N2 d- y! P1 y9 F7 `1 I Sint main( void )
. T, B* Y- {$ A7 N5 n$ ~, |{
3 @; q# J2 U0 t( C: z- ~9 T5 e( [7 P: |
/* Initialize BSL */
$ j9 @. B7 `" m9 o Y& @: F5 q' \ EVMC6747_init( );
+ R. T, j* a& t% S9 R* {; U% n- Z /* Call evmc6747_intr function */
- {8 t( h& L9 o Y, D3 `. w aic3106_init( );
O( ?5 R2 s* j( j7 u* q7 \ while(1);8 I, K3 Y! A3 L0 N
}
- v2 V Z! c$ p& X2 R. d3 N% ?/ l; K* S% f; A E
( m* E- s$ I- s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
[5 [; _+ p1 T1 U v0 d6 N/* Initialize MCASP1 */. W* C2 |$ q+ z0 u% `% m) e& j
mcasp = &MCASP_MODULE_1;5 q3 m3 t: _8 t" G
mcasp->regs->GBLCTL = 0; // Reset
% s0 ^9 l% j3 { mcasp->regs->RGBLCTL = 0; // Reset RX' r5 l/ I" V4 p
mcasp->regs->XGBLCTL = 0; // Reset TX
; g3 O2 N* ]- }7 {9 U mcasp->regs->PWRDEMU = 1; // Free-running4 V5 m7 Y. P1 L5 Q- A
// configure McASP0 receive registers+ P4 @; I3 T6 l% \- i0 ~& ~
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
+ \. `# |! F6 B+ G9 W7 A mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; m3 e G, y* {1 ^2 c mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ I* V+ R1 f( b0 G4 e$ h1 z& p: M& Q mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 c# q: Y/ N8 j1 O mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
) \( e( v, S/ Y7 h mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 H ]$ y1 e6 }, c mcasp->regs->RINTCTL = 0x00000000; // Not used
! }/ `7 w9 @# J: h" h& ?; E v/ E mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 Y- B% i7 V$ l; l5 W$ `( X0 c$ q5 Z6 ^' Z8 m/ o4 M
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
5 t7 J! z/ y" U- L% g; q, K3 p- O mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 C L5 w( {2 {) N
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' b/ v$ z' K/ t8 ]& [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 Y1 j. O `, k9 `
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
2 A8 e* m9 z5 I0 Z; P5 H4 d mcasp->regs->XTDM = 0x00000003; // Slots 0,1- h# X& n( l" M9 g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 N6 \1 m0 {# M* B6 c9 _ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" q! ^5 K4 `0 m4 L {; C1 ~7 X' n' C* |; \# l: R# H. Z t. b
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; @! |3 I7 Z" d& @/ c
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 C. {7 ?! _# f( W/ K- B6 U mcasp->regs->PFUNC = 0; // All MCASPs
! m* v# Y$ T4 V4 z+ l mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) f/ J- f/ ~" l+ E
% m4 R$ U& V- `' \
mcasp->regs->DITCTL = 0x00000000; // Not used
% j4 c! s7 a5 v2 y mcasp->regs->DLBCTL = 0x00000000; // Not used5 C5 {( H" B! r% I; t3 Q
mcasp->regs->AMUTE = 0x00000000; // Not used4 E, J: e5 {" J( M. w5 h5 ~( w- D
! |6 D) }2 W2 u2 k/ z/* Starting sections of the McASP*/
! o" j6 O- B) R" `5 \ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 g( m8 f! Q4 i0 B( @% v3 u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 2 K9 A+ I) I, h; `/ o" \9 J/ E3 ]
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % G# h6 K& H2 F0 T9 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 s3 q; m! K; F+ }
+ B* e$ C/ o7 Y. N* P0 Z; z- Q mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 q/ [2 U! S3 _! B: K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: _' ]3 j0 u' A# x3 A- f; d mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " z5 U- K' o2 I" x+ l# Z, V' ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 K! N9 s; E6 _
6 ]1 |- H5 ~$ m* C9 y4 U
mcasp->regs->XSTAT = 0x0000ffff; * k5 B; ?: T4 o/ h' Y
mcasp->regs->RSTAT = 0x0000ffff;
/ t+ K6 m. \; s, {. u3 X$ \# W1 U; X* s# H4 x1 j$ F8 K8 z
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) [& f1 K* Z8 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 o L1 N% V" ?& n r; x/ l+ X
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 [# Z& V, G2 j% H% X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 `" X" r8 ^; j0 f' e
8 X8 [/ K- ?6 {, b1 A* c
/* Write a 0, so that no underrun occurs after releasing the state machine */
6 |7 u& L8 n# p( e$ d- T- @ mcasp->regs->XBUF5 = 0;
/ T: d" p( k" N* N6 G3 c0 Z mcasp->regs->RBUF0 = 0;
- t+ i! B4 T: a0 C6 m; S/ Q7 O5 d k* B# ^
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) l7 A& h1 o& Q. @1 y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: ^$ C2 [9 |* V: _! R) m+ k
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ ^# O/ y j8 {- w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 s- ~0 t1 ^$ a$ i0 G
3 W& ?" E% K- E
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' a$ b. j k( I- z$ f% m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! R2 r5 I. `8 M Q* z& f
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / y; I7 |$ K% k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 {% l/ j1 O9 H& c1 \% Q
1 L1 U0 @% b! x CSR = 0x0000;
# b) I7 h8 _5 q& I m* @& V INTC_INTMUX1 = 0x3d;
+ \/ Q. i& m8 s$ T ISTP = (unsigned int)vectors;
]- B7 p3 V2 B% m1 N( ]9 w ICR = 0xFFF0; % r2 n% t; l; i9 D* j' n
IER |= 0x12;
6 Y1 g# g5 n+ z CSR |= 0x01; 1 v4 _- S; w( I4 S: Z6 z% l( m/ z
* m( q; O7 H3 U& J8 m1 I5 e; @8 f5 M K
~# ^8 ]. b, Z9 S还有就是两个输入输出函数:
+ q$ d: }2 Q$ q2 @* z! uvoid output_sample(Int32 out_data)
4 T4 C; _' C7 L" _6 b6 h/ ^& k{
) Q0 @2 ^9 Z3 f. z7 I! ^2 O$ X AIC31_data.uint = out_data;
! I9 N0 |6 f. s$ {0 z MCASP1_XBUF5_32BIT = AIC31_data.uint;5 v! ]) `+ Z+ a& ?
}
; D" C* l, U' X# G+ o9 k
# u4 B. l# G5 w4 v: x7 n0 |& JInt32 input_sample(void): _3 c1 J/ O& L/ x) @4 {, e7 `
{
% Q0 V' N. k, f; q+ }9 M* }" [9 ] AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 o% r# X% X) b5 C return (AIC31_data.uint);3 w+ ^) e( H# ~$ v
}
. r% [8 q, c$ \( V! C& E4 k$ k2 v8 t7 V) r8 e* Z% t! y4 k( d
|
|