|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 r8 r& u- j, o) u; ~; ~
main文件:8 T- [% w* j$ g
interrupt void interrupt4(void) 5 A2 A$ D' @6 I6 @" H
{# k$ S+ c) q" M
Uint32 sample;9 x$ Q( R& a7 L1 _5 x* p/ y) a1 u$ E
' i1 S% s$ v& x/ y& C% ~/ O1 o4 E% h
sample = input_sample(); // read L + R samples from ADC
3 N8 K) X% f4 `3 \ output_sample(sample); // write L + R samples to DAC ! l1 a- b9 h5 L$ f+ w* j4 R0 ?! a
return;# | \0 W/ j$ G# ~6 K
}- W9 {3 R; f C, s( r& N- N5 X! e
* L' w# {1 N' r. uint main( void )' Z* n# z2 w) V3 p- M( ]! Y v
{8 g% w6 C) i5 o @4 ^/ t8 l( y
4 I4 }8 f0 {( z5 } /* Initialize BSL */0 R0 Y9 l, H2 x+ S$ z( j3 i! K
EVMC6747_init( );
' a) o% [* l$ b& a% V /* Call evmc6747_intr function *// x0 J, T1 ^: I% x' a
aic3106_init( );
' Z9 f6 E- D3 d; Z/ k while(1); j. R& E5 f1 N9 t' S
}4 D1 y: |) L+ U A- K
! P: T1 n* F- A$ M! Y- G1 A& i# F/ o" B% y7 y% L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" \1 _4 S# h0 t- y$ J: z9 p/* Initialize MCASP1 */
3 B# C K! l) |- n# g$ n mcasp = &MCASP_MODULE_1;
- o+ ^8 Y( T) B! Z" N; r$ c mcasp->regs->GBLCTL = 0; // Reset
$ @; s, ~9 v) A4 N$ r% n mcasp->regs->RGBLCTL = 0; // Reset RX, r" y- o- c( g( s% r# l/ E& C2 q5 W) B
mcasp->regs->XGBLCTL = 0; // Reset TX
; M; K& O8 d" v$ A mcasp->regs->PWRDEMU = 1; // Free-running$ q! T; Z6 U7 H& v) I
// configure McASP0 receive registers9 k/ t2 Q! `) D9 e" ?! ^- M
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
6 C, }% `2 _# e" `( h$ w: {& ~4 K% r mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ G* e4 Q! n0 q
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ H' X! t! R4 L' D
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). H1 H: G3 ~ E5 Y% m9 J$ {
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side). o% s7 w7 f5 w7 A! L1 c. d
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, q4 j, u$ ^- z( [5 d; @1 ` mcasp->regs->RINTCTL = 0x00000000; // Not used
8 \4 Q* l% k7 b9 b1 `; L# D. _ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ v: o' M4 S1 J. Q+ C4 \
: u* u1 `# H& E5 c+ S$ b
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used2 h4 n+ Q& i& w
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' w- {& X( L$ I/ {- c mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) n" l4 ]) \! q& J1 o mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% a8 {2 Q/ K- Y, h
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
5 L' R# y: q3 [- ~/ l2 l7 |& R( f mcasp->regs->XTDM = 0x00000003; // Slots 0,1
- O0 T& n( i0 |! f2 h1 x7 H3 _ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit( k9 c/ d! v5 Y& |
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, `% P7 f: T9 e, {% R. Q6 r6 b! Q5 G- b, B% o2 c* O
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
& W b- |8 s" H. j4 ?7 |( ~1 [ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 z8 @8 g! l, }5 Q8 R, V5 U, c" c mcasp->regs->PFUNC = 0; // All MCASPs3 \' |) v6 H N! R
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% K; j- X7 D- b5 b2 [9 t1 ?+ c0 s
mcasp->regs->DITCTL = 0x00000000; // Not used
- Z1 N0 b3 i+ G7 [: @ mcasp->regs->DLBCTL = 0x00000000; // Not used1 {& o) i8 `3 K- `3 ^+ L
mcasp->regs->AMUTE = 0x00000000; // Not used
+ Y! W3 n9 i# [: a+ D: D5 R1 s2 i4 N1 ^! f/ @1 p+ v
/* Starting sections of the McASP*/8 k: l2 w# A+ j' X6 W& ~
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" N i( b; l5 c; c) i7 ?8 w9 n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! F l4 n" L: [- Z% K" a! o* w: Q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # D) } b5 U# w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 x3 Z+ R3 ?: ~! o+ J0 @( K( p7 i+ K# P; n6 d- r& A5 |
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) \# w5 V$ Z& O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ D" W0 l; Q) O. u) Z mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 X1 F0 t% c1 \% l& C* ? V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 K+ L( l: H# J7 J/ {3 y
, y# r% e3 d8 n2 n: t4 P mcasp->regs->XSTAT = 0x0000ffff;
N4 t; d4 H( [4 [4 e mcasp->regs->RSTAT = 0x0000ffff;
$ m0 L2 k$ H# `9 n: u( p" M4 k4 m( X# Q, ?! i- M! m( }5 R
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! l0 |9 }5 K$ B+ E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. h: @6 S3 _9 | i$ H( K. \/ s mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 {# c. _" c- g# [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 v T: K+ s" a, a# v
& t% T/ _, }% Y! @5 E" M- p /* Write a 0, so that no underrun occurs after releasing the state machine */
1 k! a3 h$ ?1 b0 b mcasp->regs->XBUF5 = 0;4 U" J) X' A( f5 ]6 {$ m; G- v8 W
mcasp->regs->RBUF0 = 0;
) E; y1 ?+ |3 T3 a
, U; Z5 o8 `5 v2 c( p- N8 }/ w* ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / w3 v# S$ t O- f# \" Q* U! |# i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 o2 n/ S- ~( B9 b6 L mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; t: W" b* F+ @' h' j1 Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 [: H& I6 R/ J& u/ B% N. n6 X
8 _- r, v& t2 [0 w3 g mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! B2 s# J; P7 z4 R" u; A4 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% ^3 U5 B( v+ \ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 {+ s( o* Q+ H4 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 v, @- V* R2 y2 g5 R; b( u- M4 Y. M, h3 b0 Q; F8 x
CSR = 0x0000;) r" N- ^+ a* e5 {- Y: u6 j1 ^8 g" l9 n
INTC_INTMUX1 = 0x3d;
# ^" f0 |. O1 K) g8 k ISTP = (unsigned int)vectors;" w3 Q0 g- I1 @/ U1 M
ICR = 0xFFF0; E+ g9 W m9 D5 W
IER |= 0x12; & A+ e& z2 U+ I% m. d$ Y) e8 {
CSR |= 0x01; * n- o: r/ ~' g8 v* Q% _4 \+ J p
# T3 M; W2 m2 B3 n" X
( h) [( w! r: k6 L4 t, h4 W, r$ T* v w
还有就是两个输入输出函数:
! t# s1 F' }4 z8 o! ]void output_sample(Int32 out_data)' a/ w' O6 y0 s
{6 \& w& q' f* C% V0 g8 ?. B
AIC31_data.uint = out_data; 0 K& E8 I1 R5 I) w- G9 j
MCASP1_XBUF5_32BIT = AIC31_data.uint;
, n! ^0 z- m) c$ |}3 K" x+ N& a8 T
L: q6 K4 z- A( ^: ~8 _Int32 input_sample(void)0 o- F. q; v- I& m1 h( G# P( |) [: p
{ # q4 a+ o/ n4 Z% S: W! K; H5 f3 s
AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 l. b+ F$ E8 f `% Q" \ return (AIC31_data.uint);6 V X7 H& j8 g* N5 c5 s$ ]: [
}& N0 y! O/ R! H* {1 D+ j, N
: H3 [; y& ^# Y" e1 B3 Y7 R |
|