|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" Q! u2 F7 Z* X5 {/ Qmain文件:
0 ?$ e& A8 p8 q& C# O7 I; Ainterrupt void interrupt4(void)
$ I$ ^* @' w2 J+ g) R0 T{
: J1 `: `! L4 e0 V6 [ Uint32 sample;( ]# n& L1 T3 h2 n/ X( ]3 @# l4 v1 a
; f' d8 q+ ? D( \2 g$ [
sample = input_sample(); // read L + R samples from ADC( |& l3 ]+ T1 N2 u# u
output_sample(sample); // write L + R samples to DAC : J! m k. W% B8 s
return;
) C1 J, h. H5 w9 P9 O3 V& F* r9 [( u}3 B- [8 S2 y1 @0 X
6 H9 E1 A1 i9 ? q! ?1 v% nint main( void )
0 w, F; y) D' W0 b{; D- c$ B: A( ^- X5 u
2 g3 {- E) {+ C% Q5 e! w" L /* Initialize BSL */8 t+ M% k+ J' E. i; u5 |: b
EVMC6747_init( );
6 M, `7 R) ~% e! e+ A/ K, X- a /* Call evmc6747_intr function */
6 S) I& K0 [, F7 Q- f) H aic3106_init( );" @: X8 z6 w# a3 h' r3 O
while(1);
/ Y4 C. ^5 B0 S9 z6 `4 N, A}
: x; \* f' Q3 ^- J% t9 g; P: W2 Y+ B& c. g
- P6 {* L" O4 f: |8 X# g, R
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 t i9 G+ _! q' K/* Initialize MCASP1 */
, \9 n7 G8 A0 \4 V8 l mcasp = &MCASP_MODULE_1;1 Y1 Z F3 [' f: w/ Z. G+ g. t
mcasp->regs->GBLCTL = 0; // Reset
% T% ^4 A* H/ Y& C3 d* j) U$ O7 d mcasp->regs->RGBLCTL = 0; // Reset RX
! F3 U# K! q0 G+ i1 M# i5 p5 O5 P mcasp->regs->XGBLCTL = 0; // Reset TX
' R; T" X; d' m2 x) l mcasp->regs->PWRDEMU = 1; // Free-running
1 p$ K1 {" S8 \" _( z // configure McASP0 receive registers
% V: p5 s' P& R" _0 d; @ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! v' @5 [3 v( V
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 g. q Q j& R7 P( M- x2 h mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; \( Z7 e# l+ C2 j. O4 X
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 W+ Y# O7 [6 J5 _# ^ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' v4 ~& |0 }" @) l
mcasp->regs->RTDM = 0x00000003; // Slots 0,1, c" x& _1 o8 P7 [8 y) r7 C* d
mcasp->regs->RINTCTL = 0x00000000; // Not used' ?# d) I/ ^. n! I0 P( X
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
a; h3 g( w/ G' s+ Y- g6 }
: w- \/ @2 z2 h0 t7 y' a mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- J( @% I5 Y' B9 T+ h% s) C! O
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 e/ B7 E: E+ z" E mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 ?/ m- e9 I8 z7 X1 Y+ Y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& J% Y* C- w* I6 Y) w3 d
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK7 b8 C B1 T. t- b2 f& r
mcasp->regs->XTDM = 0x00000003; // Slots 0,1& i" h/ d4 D2 S* p6 ]( S
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit8 {+ l. O% \' y+ E
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& `- L2 |7 d- Z5 W; J2 y6 b" q$ {* B; j8 J4 Q) @, u; t8 B! u7 A. s6 J
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN5 S9 Y4 B# U0 T. G" D* J+ c f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
$ H+ P5 w, z" j4 t& h. W/ w! d mcasp->regs->PFUNC = 0; // All MCASPs
) B9 x3 T2 O6 m2 y, [& e/ O& f mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- i2 x) x9 j' T i+ d5 Q; h
1 q% d; A1 \" \+ {/ g8 r
mcasp->regs->DITCTL = 0x00000000; // Not used
9 c8 z, K" \1 @# D+ P5 K' l) a mcasp->regs->DLBCTL = 0x00000000; // Not used
% |1 U% b4 a! C/ K9 |2 x# [) n) e mcasp->regs->AMUTE = 0x00000000; // Not used! r% a: T( S9 P. E$ j9 [
7 R L; z' S) f" T H, K+ M/ S/* Starting sections of the McASP*/+ c1 V; b: t( P$ |
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , M" V5 {! ?1 O( W% L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 r" z0 t0 A" K8 U mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 J: G8 m2 a( E! G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 b$ r8 @& U* Q: D
# _0 v- g) c. p0 x; \ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * ?4 o/ ]1 M& ^/ q6 x5 V5 h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 j8 Z5 [: g% C- @
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 C% P1 @5 z3 I# N6 T4 p) x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ ^. ?% ]8 D# X# T
+ F, i C1 Z7 z: v% R mcasp->regs->XSTAT = 0x0000ffff;
2 f/ @8 K7 |( m- j mcasp->regs->RSTAT = 0x0000ffff;
. s) u* u$ }8 G K5 U/ e! n! |8 q9 I
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
o5 F4 d% O# U: `, e+ P! G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 ~2 F, F: v3 ^+ v5 h mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' F1 B5 g6 d# Y ~9 i1 n: D3 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; Z) M/ c( F/ {$ B; N$ a E; C8 C, N4 z- @/ h
/* Write a 0, so that no underrun occurs after releasing the state machine */
+ I( E" _6 o" W5 R# K0 u mcasp->regs->XBUF5 = 0;6 X* m2 ?2 B9 S G& M$ u$ W
mcasp->regs->RBUF0 = 0;$ ^; [# U% R* r3 P
4 \& u2 P6 I7 |. x
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; B9 Z2 @) G, A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- R0 j" Y3 \7 i. ]- `" V0 d mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( Q& |1 [; d5 W9 l u. Q7 [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& r! O+ Z3 ?$ c6 A
( d" E S7 n1 ]1 G, f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( |6 I# z. d1 z2 t" _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: Z/ h ~& e2 j2 [0 X* ~
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ B# K; H( t1 n6 |+ P0 { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) W8 |5 c, J8 o" t/ |7 p- j+ C
9 Y/ z l; F) }7 k; Z% t
CSR = 0x0000;8 [+ ~5 l: V' d1 r
INTC_INTMUX1 = 0x3d;
9 e2 Y# V/ E8 f! B! n( i9 k) L ISTP = (unsigned int)vectors;6 D8 x7 {8 c0 F: c7 d' g
ICR = 0xFFF0; & z1 V q7 L& a0 t1 I3 ]
IER |= 0x12; 3 h0 }5 E- J! }- c( q1 C0 n' Z
CSR |= 0x01; ' r, r, r- y# c: ~
) h$ C0 o4 ^% G9 m9 o0 N4 W
% s% N+ R, D( U/ c
" A5 g* {7 }8 e+ \$ j8 [% D还有就是两个输入输出函数:
6 y! Y* T0 ]; ?" B- svoid output_sample(Int32 out_data): g: F: n; x& [' H9 T$ _
{; n8 @+ S. H% K% Q% L
AIC31_data.uint = out_data; 1 `* a; D1 y' t! r4 x7 A; @
MCASP1_XBUF5_32BIT = AIC31_data.uint;" h4 x. X. N! i2 N& M% S
}, a) H0 z- @3 h4 ]- g8 X, i3 y; P
! q, V/ A3 {) f) t( |, f& jInt32 input_sample(void)
$ `, l$ I9 K+ y4 Y. z{ . R/ m' Q( h( o: o# j* W# O
AIC31_data.uint = MCASP1_RBUF0_32BIT;& s$ Y- J; m8 W/ ~
return (AIC31_data.uint);
0 m7 R1 {! p r& j+ Z, E! D}
+ h ]" C! O- Q" ?" f1 \( y8 r$ j
|
|