|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! Q: ^* C9 j1 G# y5 L8 q
main文件:
$ S) f1 z- k0 f) k7 X. ainterrupt void interrupt4(void)
+ ]1 S9 ]9 A% _( e/ _# h) |{2 d3 ]5 d; e. e/ G& \: U
Uint32 sample;+ A7 r( ?; y5 e) g- R. `, B
" z$ V( D Z5 p$ [9 R# F
sample = input_sample(); // read L + R samples from ADC$ e* n8 B9 I/ x2 P) n+ a
output_sample(sample); // write L + R samples to DAC
/ O$ z4 y8 z5 [; P9 Z" ^' Z return;
" ^' T0 c/ B! R, Y}
, O7 _4 f/ ~$ ^7 Y5 }9 D: D) A5 `: w; u7 { ?
int main( void )
% ]% x, A* K! C8 Q, a{
9 \4 U, l+ n, j9 l% v% m1 Z0 ^+ e% R1 Y+ [4 s# G
/* Initialize BSL */6 l* |9 M, `# g8 d, m9 } i
EVMC6747_init( );
; P- S0 m9 ]; C1 r+ | /* Call evmc6747_intr function */: U$ o/ O8 j* g- `7 }0 z
aic3106_init( );# Z* Y: ~8 p& M4 W( Y4 J
while(1);+ ^ Y0 }7 r: [- J: q
}
) |7 p" o6 L( `0 t* w1 k
2 e- [9 i2 J& b$ z8 H; d# |& \. m# I% q5 r+ e$ T4 t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题 G* L1 k; J7 ` S% X4 d
/* Initialize MCASP1 */6 ~" j: O9 i) S1 a$ F
mcasp = &MCASP_MODULE_1;- D J/ o2 }5 H- y$ O% c$ l
mcasp->regs->GBLCTL = 0; // Reset2 b b6 f( d* Z( y: O, ]
mcasp->regs->RGBLCTL = 0; // Reset RX
$ m! n! W2 V) s! M+ r) l% Y mcasp->regs->XGBLCTL = 0; // Reset TX+ S8 N/ W, K) _2 Q: n: ?/ u/ Z
mcasp->regs->PWRDEMU = 1; // Free-running9 @) M% D" V- I2 `# j, C# l6 U# R
// configure McASP0 receive registers5 ^0 X; ~9 M3 @* f! f# o: t! T
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 i( Q( m& ~ A- d$ K4 e! b5 f. E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, i6 G* J7 y) w. e' Y3 s' B mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 K4 F' _7 j3 }' ?! ?! S% {& \- {, e
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), R. i6 R& ~3 ^, ]$ B4 i
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)# g/ {' i' }: R% d1 V+ ~
mcasp->regs->RTDM = 0x00000003; // Slots 0,17 V" n* N$ W7 m7 f9 n2 L. w
mcasp->regs->RINTCTL = 0x00000000; // Not used
6 x1 L& H: L: E. s4 n mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- b4 i5 b; } ]; M9 I6 f, Y+ a% o9 d- Y% _; }4 [% h9 K
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. A8 S* u* y, M6 c2 T! ]9 t
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- p4 X4 B$ {: x& ]9 o
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 W1 H) Z3 a* f7 v mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' W6 |3 ?, k, _+ i& c9 a6 B& { mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK5 N8 I/ N: o% _
mcasp->regs->XTDM = 0x00000003; // Slots 0,1" N* V; f" K5 T3 e
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
# }9 M% p# w2 ^! L9 i' A3 p6 k mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( v' c8 F) \% ?% Z
% u& |& R0 B+ q* Z9 c
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 `! ]4 _& N- B) e# T7 u mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
( I2 K' g, j+ \$ f! t( M& B mcasp->regs->PFUNC = 0; // All MCASPs# l7 S0 P6 n1 v. n8 g3 _
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. m" j$ r0 H4 r& ^
& P5 j8 U8 q3 w; ~% C mcasp->regs->DITCTL = 0x00000000; // Not used% S1 \4 O8 _1 W: Q
mcasp->regs->DLBCTL = 0x00000000; // Not used
# E0 v- R; S3 }: N mcasp->regs->AMUTE = 0x00000000; // Not used0 y5 b) k x! C5 }
, z' Y' W5 X- R& c3 a6 k) E8 ?
/* Starting sections of the McASP*/
; u. X; I' ?9 Q mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. V0 V9 Q7 Z& a% o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 {! s/ [& n" W9 H mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. _+ }5 @ _4 W# | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 {2 c9 V6 H" a3 L
4 A8 T3 [5 f! q( V/ X0 | mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: f$ q3 e3 u% p) s8 e) e* N- E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 @9 O" X+ p- M E mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# J4 Q& \5 y" R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* B% j8 l/ {1 f, ^+ H. j {. q
( [2 R$ {; N3 q# ^; m6 R
mcasp->regs->XSTAT = 0x0000ffff; 6 |( X: u; J0 E X* a0 O
mcasp->regs->RSTAT = 0x0000ffff;
3 C* _, M" g' a- k" c1 x Q: X7 M7 N7 _2 R* s) T5 n
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# E; \) Z) {; e9 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) @2 B# l) Y& F! P2 h7 ^1 C mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & c( i% K3 J3 }0 n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; [$ z! Q: Y" }9 C1 i: s2 R) k; e3 i+ Y
/* Write a 0, so that no underrun occurs after releasing the state machine */, `* l+ ~& K+ J7 }
mcasp->regs->XBUF5 = 0;; m& }" I6 N+ z- B d8 y3 }/ l
mcasp->regs->RBUF0 = 0;3 V# F) q& r6 J+ U8 l
+ \2 q: y6 [" i$ Q- z" ^, c mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 L3 F5 o6 v0 B2 ?9 S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- z4 n' m4 F0 {3 ]. J: @ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! o- Y* ?( a; ?- `, v) A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 B* t" r2 _+ R* N" ^
' d) L3 P- B d4 L+ Z( S1 @ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 k* a- _4 C" _+ E% e- } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! L& G S, E1 j mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
^$ U6 x5 K8 n1 n. {- Q# {4 | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; w/ A( R0 p5 D8 H) m6 B4 g4 W
CSR = 0x0000;3 g5 l6 V. ~( _4 n9 _4 S
INTC_INTMUX1 = 0x3d;$ _2 @, b" n2 ~; v9 C0 ?4 A* M6 v
ISTP = (unsigned int)vectors;
) ]# w& E$ V$ ^9 K, @ ICR = 0xFFF0; : \9 ~, j- G7 O! b4 x) q# \
IER |= 0x12; 3 T$ ^; o0 y. Q" G: h
CSR |= 0x01; , s" j/ ?6 s" x7 G
, A, |! J/ ] V O% j
6 Y, P- r* L/ b3 W, c+ w% [/ c9 a3 M2 d0 D3 _
还有就是两个输入输出函数:7 J/ z9 ~8 B. b" R
void output_sample(Int32 out_data)9 [9 b ]' l6 e7 v+ T
{! \) {: R- F. I' U# o3 C
AIC31_data.uint = out_data;
( O7 E v4 H% t- e& }0 c) I f MCASP1_XBUF5_32BIT = AIC31_data.uint;. E6 l. \1 T7 Y$ [
}1 C9 ^/ Z( G# w$ w" B
' I% k' ~- l: p. n" u; o, G" sInt32 input_sample(void)- |! m$ Y5 A* p" l6 W6 U' i; P, |
{
: q% q/ E1 W# C+ ~ AIC31_data.uint = MCASP1_RBUF0_32BIT;) A9 u a9 e3 v
return (AIC31_data.uint);# _2 r- p8 }* Z
}. w+ ]- [& k; Z
; u1 m4 E- N6 s( @! z
|
|