|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 V% p: h h: P. C' [0 Xmain文件:
4 ?& M! G7 A6 |; G! C ^ ~3 e( Ginterrupt void interrupt4(void) 3 u- Z S$ d; z+ A+ Y& {
{
9 U+ o0 c6 D* t, R Uint32 sample;
. D; x% [$ p( M7 Y9 {4 c ]
# g+ \3 ?5 J, w9 N0 e* D ?7 C* _ sample = input_sample(); // read L + R samples from ADC5 x1 p7 X C8 S$ j$ l8 i3 _
output_sample(sample); // write L + R samples to DAC ( a" k. A8 J2 ?
return;$ P% F( L8 A4 n
} @/ h) ]7 e9 ^% `' M4 f$ B# \* N$ a
# D' c+ A: Z3 E' sint main( void )/ D' i, P& c/ x/ ^8 f$ c! Q
{* {4 j5 d$ ]7 o( X: k8 G% n
$ } B) ^# ^- G2 {
/* Initialize BSL */: k8 K# [2 ]2 f+ `* E i
EVMC6747_init( );
; r. l( [# w0 i+ j /* Call evmc6747_intr function */) x+ s7 A, t5 O" x/ r0 M
aic3106_init( );
; ]% D8 ]6 H5 t$ v& @" l- e% {# V6 a3 d while(1);: Z3 M; d' B2 r$ _& S, ]. a
}
' i) R% ^0 o" i; h2 @; m, W4 h0 s Y8 j% }3 H+ Z
! x; m% {2 j( b4 o! v2 t Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 L0 I1 w$ }. ?1 Y, w* P/* Initialize MCASP1 */
: |5 E2 C- J* _* Y mcasp = &MCASP_MODULE_1;" ?- j/ y# v( Q" C4 E
mcasp->regs->GBLCTL = 0; // Reset
; h0 }6 n5 z0 z8 [* U mcasp->regs->RGBLCTL = 0; // Reset RX1 P8 q- Z E1 [2 ]& v2 d
mcasp->regs->XGBLCTL = 0; // Reset TX
' E; e% b ~: T7 _) F mcasp->regs->PWRDEMU = 1; // Free-running
0 |" b( {. M4 i$ G4 w // configure McASP0 receive registers& Y" b0 p p" Z( j
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: i' O# _1 s& R6 U mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, ~( U6 b/ _5 |+ F+ ~ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word f% ?) D2 i0 Q& z% W- D
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 c- `" j% j: J0 u+ ~9 v7 L
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 v8 }( X( I6 u2 G
mcasp->regs->RTDM = 0x00000003; // Slots 0,19 W" f! }" _# ]' {' i" d( {9 F
mcasp->regs->RINTCTL = 0x00000000; // Not used
) p- \' ?+ O4 Y, _ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 @* |6 O1 ]. l! H" d
0 M c- n. j1 m# v* X6 y7 d) V; Y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( m z* H+ ?" P; Q( j mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 J/ W z6 N T' s; @$ g" C3 T mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; w! s; c, q, ]$ j4 V8 d: K/ f# b. V mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 K' B, z$ Z; J0 _! o mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
- q+ Q6 r' R7 \ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 Q. L* |& M- M* L7 [0 T mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit2 d# z4 U% }+ o8 O: U7 g3 g; r6 c
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 u. h0 |+ E6 E; `8 F$ k0 {) i: A/ P
4 [: V" F w' c; I m2 g3 B
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) _7 q1 F: ?8 X& c& E. k# Y& h6 @1 z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- m* S; S0 D1 z7 Z9 J
mcasp->regs->PFUNC = 0; // All MCASPs
. S8 J* A& a% J8 O6 J/ _ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) e$ n" X( a, X) E9 R2 z$ b" K5 N
mcasp->regs->DITCTL = 0x00000000; // Not used
0 L5 @, V1 U4 E mcasp->regs->DLBCTL = 0x00000000; // Not used2 c9 Z( z$ Q) s* T9 }( `
mcasp->regs->AMUTE = 0x00000000; // Not used8 Z1 _% o# O+ S) K4 z$ ?
X8 l7 D! d) l1 u& c9 @) j/* Starting sections of the McASP*/& l) x8 W' V& g2 p6 s# b
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ Z+ ~# m0 U) S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! \6 q# b4 m/ `. G: o9 }9 x* Y0 F3 F mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / V( t2 D! E! j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) I3 F+ A' N4 ~. u5 o
* f5 f8 R& y8 X5 h9 t" } mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 V1 ]0 A$ G4 R4 [2 r+ W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 c( Y \; f1 E8 Q' O$ ~) H
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; w+ l$ E8 y" ~+ t; J' @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 V/ _! M* o* F2 p, R5 x
5 w' ? u1 ~$ r mcasp->regs->XSTAT = 0x0000ffff; - l. ]) \; L: K' ^# V6 \0 \- e
mcasp->regs->RSTAT = 0x0000ffff; # t! Z# H7 Y/ d2 e) U6 p2 u b
7 s+ s) e) }/ p7 z- v0 J9 r/ m5 } mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ D! `5 t% k0 }. u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 L' P3 F4 X9 f5 y& f9 c1 i+ ]4 V
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 a6 s# a7 {; D- s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- D" \( E. Z' q7 d; T3 w4 x8 r! Y7 a! P) d; l/ E2 w
/* Write a 0, so that no underrun occurs after releasing the state machine */
# d/ d2 I9 ]+ \) D: K1 ^* ~4 R mcasp->regs->XBUF5 = 0;( m Z5 D- `1 S1 Z, e1 h
mcasp->regs->RBUF0 = 0;- U# S7 ^7 ?; g: N2 a- r7 |2 ]; K
4 k: T# n& v2 y. P) r mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" M {' G- ?( _4 q. P while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. ?9 t: T' B0 d9 }* a U mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- q2 p; \1 R! d2 l$ J& \# @% O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 C4 a% p. p- ^+ t* {6 I7 Y
4 | w$ R8 S3 { mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! z! R Y) W+ Y, D8 F4 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% b7 c3 b4 |- ^8 h% q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 \( y/ V- B8 w$ F5 z2 I% ~( m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
X! [; {+ I3 Y+ ^2 ~+ ]1 U
2 V0 ]& ]. @0 y# _3 E CSR = 0x0000;
0 s8 a% y, m$ F; f- u( s( \! f INTC_INTMUX1 = 0x3d;7 v6 n! ~3 |; `2 ?% }: E. ]3 J" p
ISTP = (unsigned int)vectors;* m* Q% O/ g) k# X5 E5 ]0 g/ V. H
ICR = 0xFFF0; / b# h" y' G, n F
IER |= 0x12;
\: R9 C% A# u* ^ CSR |= 0x01; - K/ T6 [! q: \% i& ]! E( ]
4 t, ~& o1 g! S# ], e t! a3 o+ S4 J" X! G9 ]5 w- @( B
6 j) i, B8 @! u" A% N9 O
还有就是两个输入输出函数:- ?( M/ M5 p: C! |. _! R1 I9 n
void output_sample(Int32 out_data)
+ F4 `+ x6 v) X8 M8 w& j{# G& L! q- s! j$ g
AIC31_data.uint = out_data;
0 m& J- c& Q3 F) U MCASP1_XBUF5_32BIT = AIC31_data.uint;! b9 E* V3 ?5 W( ^) S& r# K6 W
}
+ I' b8 D8 Z) X; o" ?5 `
9 e& p5 j, W. j$ m3 J' xInt32 input_sample(void)! } k. }8 r+ i1 a' S
{
4 ]3 J' P1 m: A AIC31_data.uint = MCASP1_RBUF0_32BIT;
- n, o3 Q& n/ ]! _6 s return (AIC31_data.uint);" b9 B, a2 m9 ]' d0 w
}* f9 B6 Q; {# a# p: |) M- I
; |: Y3 g j- z1 H* [ |
|