|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; P3 W& X0 L) o D, F
main文件:; k- B9 E& |$ }
interrupt void interrupt4(void) - D+ S3 ?/ w8 ~; }& T s
{1 |& X0 S; r9 G& o4 z& {2 k/ d# Y1 h
Uint32 sample;9 C8 k6 ^6 O6 h/ w5 U
- Y' W: \# [& y sample = input_sample(); // read L + R samples from ADC- O2 J" p4 G- g% }
output_sample(sample); // write L + R samples to DAC / F" |$ E9 f: V; o2 |+ r! V
return;9 {; r' L1 G/ l4 E
}
- ]" E& Q$ u9 S" u
& h2 F) d& H' u2 mint main( void )
5 ?9 a/ o' J# K{
2 ^/ `8 k! P0 e4 b7 V. b: {; G @5 t7 \: x% s9 r% t/ }% g1 [2 U
/* Initialize BSL */" C# B8 I% m9 D% Z
EVMC6747_init( );
; s8 I9 K' a: J* R4 d' j /* Call evmc6747_intr function */1 ^- W7 b5 U( u8 `( T5 n, |) s4 k
aic3106_init( );% Z+ k) L4 X$ {7 b1 B2 J
while(1);
0 Y+ m6 h) J6 b: K" b' {}
% U6 O" i1 g L& P( x& W
4 M; t: ?) n7 X9 i) `$ V8 S' r$ o5 U5 u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ t7 {! n/ _( U: G" e/* Initialize MCASP1 */7 J+ m* t9 c- k7 b& ~6 g" s
mcasp = &MCASP_MODULE_1;
1 Z: W7 V5 X5 @$ V* V& ?2 a mcasp->regs->GBLCTL = 0; // Reset
* D# Y" F9 a' Y) m! ~! u/ e" K mcasp->regs->RGBLCTL = 0; // Reset RX
; j; I- O0 q4 G" _, J1 |- _- }0 U mcasp->regs->XGBLCTL = 0; // Reset TX
% X% X9 [; A* A8 {# G# f: ~9 N mcasp->regs->PWRDEMU = 1; // Free-running
$ F$ h2 G( I8 M$ q" [. l1 A6 _+ i+ K // configure McASP0 receive registers& X# F- ?/ M0 R8 x. L) ~( R* z
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# A. h1 w: i" z( L" C7 v- L) T mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, y$ a# W# i, e0 V
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- z- I6 @( B* s" I& m2 U
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 m. i# e# a6 ?/ C# Y' ]
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 V2 A, P9 C: k: Z7 ^
mcasp->regs->RTDM = 0x00000003; // Slots 0,1) l) q) W6 |4 X. S* P
mcasp->regs->RINTCTL = 0x00000000; // Not used
; h+ |3 b6 V' } mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( z F4 O7 h' z1 Y: E" ~+ r" C, O
) y9 p; X- n9 B. e mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
h& O' H1 O: Z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' z% k8 l" r% X* F0 j mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 _ Z/ j3 {1 u( L$ Q6 W% E( p" t+ J2 ~
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 t+ T7 P* M/ Q% v- L
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 @8 n5 ~: m1 {4 `+ L9 d mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ a- X, y5 B/ X# A3 Y9 P9 ~( ~4 C9 I O mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 c$ `. k; V: p2 R' T
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ I5 R! k M/ V6 P: q6 W
2 [1 e9 Z9 V- R/ u; N2 z2 A+ h
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' P0 R' x) \! E1 @7 H9 s
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# X7 Y) |) ?8 `- S- ]. W
mcasp->regs->PFUNC = 0; // All MCASPs& f/ q3 D, F9 u4 x1 @% h8 l
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 Q$ B, O; |6 c9 p2 Y7 b, ~
( ?( g% \7 \% | mcasp->regs->DITCTL = 0x00000000; // Not used
# K8 s2 F5 W1 ]4 V R* j) N& M mcasp->regs->DLBCTL = 0x00000000; // Not used
7 E9 B' @, P. O7 u, |$ ?8 R- G% b. E9 D mcasp->regs->AMUTE = 0x00000000; // Not used6 v3 K, Q: v( u1 H
$ p6 R' \- x Q) v9 S5 N& t i8 v
/* Starting sections of the McASP*/
" N9 r3 [; o* H% P mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 }; f1 o* [- z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
) M9 w o# ?% Z) X mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 w2 W8 s2 P2 f3 P& x3 W- h: p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* m3 A1 F. w1 @+ d
# |% {- ~6 S7 o2 o% k9 Z% t/ m mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : J! l9 z0 o: k& @0 O9 E) |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 l0 b' C6 ^) ~$ `3 s2 b2 g
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. a4 m2 m. I) f/ v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& M* m# B; \& A h& n4 q$ ]9 r; `# Y3 E' a2 e$ n; ?+ `1 ?
mcasp->regs->XSTAT = 0x0000ffff; & o5 t2 ?2 R5 p* N3 E. w8 \
mcasp->regs->RSTAT = 0x0000ffff;
$ Q7 l* M. J$ C7 b5 G& j+ M7 ]5 Y2 k3 \
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' D, h# |0 W- M5 a2 o S9 o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ S( q3 z1 x h5 J
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 l$ z$ e1 @% Y) c, z' V- l7 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ S7 d ^" ?+ k( x. D. b+ P) N9 E
" h+ c9 X' B( D1 A. N" \
/* Write a 0, so that no underrun occurs after releasing the state machine */4 K$ G* x' C& H* ]) M$ Q
mcasp->regs->XBUF5 = 0;6 C' Q5 Z# v1 [, b @( \
mcasp->regs->RBUF0 = 0;! n F" H3 t' ]3 o5 @5 R9 m$ T7 r, r
) h: P; r" R0 F- O
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ _* D8 }3 |( n9 d; g9 _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. G6 N& W$ e$ G, D$ P+ {% @, h' q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ G1 X/ E. |$ n3 L9 J. n5 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* d/ Z: H+ T4 E+ M1 ~# K7 ]4 H& x& W- t9 _' H' D7 ^* z
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & P. f) e: k% N' |8 j; [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; d4 u9 ~$ o' Y
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 f: [. y# C* H& ?5 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ X# t1 e- m$ v! P$ ~
8 D# h/ V6 N/ M0 Y1 J) H- f
CSR = 0x0000;8 D7 a# W0 D; P! h
INTC_INTMUX1 = 0x3d;! I- j, a$ j) G6 s2 q
ISTP = (unsigned int)vectors;* k* R2 S) w/ B, |4 \
ICR = 0xFFF0; 6 \+ T* R* p% w- \- n( s
IER |= 0x12; M1 }1 T( B3 q' F0 z6 s$ X
CSR |= 0x01;
' ?: }" Q) h/ [- b* B2 X+ S { ]
. H1 f1 @; e' {9 j- P0 c5 W3 \0 O! P2 W' K; w' A7 ^2 U
$ j8 p* m: X, F% M0 F# L还有就是两个输入输出函数:
( a5 b+ E1 a, @void output_sample(Int32 out_data)
% S- v7 y7 Z# r2 N{. k, D1 f% o& D* R0 B
AIC31_data.uint = out_data;
) A# K; X; P. o" {! ~; S* X MCASP1_XBUF5_32BIT = AIC31_data.uint;) v. T' t" \$ g# p
}
4 X4 c, W! V- d. `" Q) Q6 @
# m" [' f, N: ~2 J& Z; z, KInt32 input_sample(void)0 F) c0 [' C+ n% j4 v/ i
{ ! D' j" d; S$ i' o
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 ?0 g7 ]' A$ w$ n0 f return (AIC31_data.uint);1 {, y! r% E4 [! \# i# \
}
9 w S# Q8 m# h9 h0 m/ }! c$ m. K% L5 h' c4 C7 g- C
|
|