|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 r' M# r( i9 T: [0 p) t' i2 H4 t! t
main文件:4 _1 P, B) Y& o* H) @
interrupt void interrupt4(void) * k6 c3 S I% n0 t! H
{5 I0 X* c4 f9 v4 H7 K
Uint32 sample;
! w% T0 ]+ S: i; Q) h8 h4 V% W, E9 Y l/ o2 m, N
sample = input_sample(); // read L + R samples from ADC& I7 S2 I5 t" e& c: D3 s
output_sample(sample); // write L + R samples to DAC
1 {/ |! v5 R2 J8 @7 C+ z return;
. R! H; x1 \' p$ d. _}
3 H5 Y) `! V4 p& f4 a+ l/ T
# v0 r+ M) G" v" @ o+ x& W5 cint main( void ), x2 y. ?+ i3 c2 @& c" [9 t# j
{
( q% y( c6 @. d9 u5 a+ g7 X
' Q4 D+ L8 d) p" C- a. h3 V /* Initialize BSL */8 ]5 ^$ }+ U( w
EVMC6747_init( );
7 y. ?+ H' R2 q9 J3 D4 s /* Call evmc6747_intr function */
- c _* V# i5 {; v' s aic3106_init( );
- K, u7 V4 d3 E) L7 o4 j& f* [ while(1);; M8 B+ y f V9 Z% L! W+ A
}
4 B) r4 T1 c7 R$ d1 V Y$ F3 J4 d6 f2 }2 g1 L6 A5 Z: N: y4 Z& b
$ L" {6 O$ J1 g9 b, q- @ Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 t# a8 ~( x% F' S/* Initialize MCASP1 */# ~9 a6 p) M2 H3 p7 G
mcasp = &MCASP_MODULE_1;
1 m& ]- w8 a$ X+ g- p( l" m/ i mcasp->regs->GBLCTL = 0; // Reset, K4 t) j- m6 ]1 d& I3 y% h* N
mcasp->regs->RGBLCTL = 0; // Reset RX
4 U& n4 M) O# U mcasp->regs->XGBLCTL = 0; // Reset TX6 R3 p, Y8 L' q* R9 {
mcasp->regs->PWRDEMU = 1; // Free-running# H% n+ W1 r7 W# Q% s; D7 H
// configure McASP0 receive registers$ z7 Y* i# P2 P: V* V: N+ T. x
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% k+ G* Z3 I- d+ c( V; M mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( s8 y3 w7 }6 P- o7 C
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ f2 m% m0 |8 B9 I2 @. h( {1 l mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 P9 ~ _9 o' R! V" B mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 B& t2 l) [8 ?# ^, o: o8 t
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 T- J1 y5 Y& R5 F9 \ mcasp->regs->RINTCTL = 0x00000000; // Not used# K+ x! L, Y' R: S8 }
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# r$ a# h* y. _+ }" s. w+ L
6 a% K% b: z( s& L7 }. t mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 F3 C% S7 ]3 W/ P" N( H) [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: D! A7 s( e9 L' o mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& W4 h: D2 x; k1 L) C& C8 R- B mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 D# O% L; y c+ M% G6 q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK s) ^" z8 l3 D
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" @* H) X7 K- x* x8 m mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit L4 ~6 A& }% w$ A$ A6 K
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( G5 ]3 D/ D$ e' |8 v" F S
' f2 O/ {4 F ?2 } mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ Z e7 k e& X0 |' W5 b* ?7 ^! S
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! h5 d2 ^: x4 J* {/ O8 s mcasp->regs->PFUNC = 0; // All MCASPs' h- h" e u4 |+ w8 s' | Q/ T
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) A9 U- q0 K+ \7 p% X
( h- Q4 t+ s) a/ _ K' _: ^ mcasp->regs->DITCTL = 0x00000000; // Not used
4 ?5 ?! T' S, E0 `* v mcasp->regs->DLBCTL = 0x00000000; // Not used7 o( B; z. v- Z% n3 ^7 _7 j. F1 o
mcasp->regs->AMUTE = 0x00000000; // Not used
% Q& \: z0 j. c$ p. ^% s/ n/ y; ?
/* Starting sections of the McASP*/
2 |7 y0 C$ z- T# C/ T# p mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
|( D' I0 a6 |( L% [! \- ]0 K: \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 J7 J8 N! l3 `: j; w mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 `0 l: ? v: z* b; H) b$ F3 P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, {5 o1 D3 m* M3 a# C( J& z. }) y4 Q# l2 \/ F: w" n
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / t+ Z1 G% x0 h. m) ~! T# g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 Q- Y- P I0 _4 I' {
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 b8 j2 }* }9 T4 c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 y. C+ \( H, w. G3 L# G! d* C, P$ n% D& e- {. Y9 o
mcasp->regs->XSTAT = 0x0000ffff; 8 L1 @( B3 d5 \
mcasp->regs->RSTAT = 0x0000ffff;
8 G. m1 v1 _7 x# t6 v9 ~' n/ J, G- C- B+ h2 O N/ o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ x9 [/ @# Q k- f5 _+ z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 @! u& K, K* e% A1 B. i
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: E9 B @( Z8 \, o. j( t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& m0 T( k9 z' v0 r/ U1 y. ~. x3 V. ~ j/ A
/* Write a 0, so that no underrun occurs after releasing the state machine */' \) ~: P7 U0 m( I, S: ?8 f
mcasp->regs->XBUF5 = 0;
+ w6 _" L8 q1 K2 `. N" v& u8 Y0 v mcasp->regs->RBUF0 = 0;
" _9 g& E' Y9 y
$ Q: n( w D! j, h( i( y- P mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ M9 @) U3 e/ ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 T/ u A8 r; ]+ u; x) Z0 Q
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ j e2 @8 T2 b+ K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& Z) t' U1 H6 o' F: R9 n
4 e/ |7 e: e2 w4 |; c
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : y8 J' I9 F+ a) v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* [3 K! e [7 x6 p' \: y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 d2 C+ S8 C" h6 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ n' L' a5 \6 i9 j/ g- y) A5 z% E8 B1 m; b: g8 P5 \" G
CSR = 0x0000;
* t' W& C# X I% ?1 U INTC_INTMUX1 = 0x3d;
7 n# V+ e/ A+ A* f6 F1 F5 N. j ISTP = (unsigned int)vectors;
; H+ K O+ {7 u, U( Q ICR = 0xFFF0; & S% {, F( B/ @
IER |= 0x12; 5 X; ]; ~- x' N4 ?0 j: V0 Z
CSR |= 0x01; 7 I; F. @$ O. m( i$ d4 \# M
+ }: C8 B; y" B3 D
. V0 R0 V! s. o% B
. D! [. V0 b* n) [8 r+ b: i5 w还有就是两个输入输出函数:. |7 K& n" E( T8 r2 ~+ K1 {
void output_sample(Int32 out_data) {* S8 ?- }! M- {6 ~8 H
{' w. D7 C. `' R+ m( P
AIC31_data.uint = out_data; . F# k; x5 ?% e
MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 U9 } L% d* F/ a6 w}
0 H0 p# L; I. a( @6 j+ ?+ V* [5 N/ z4 W9 P/ ]" i+ C# i- v
Int32 input_sample(void)3 K0 F+ U& X4 r8 S; k3 X8 {+ |
{ " U h9 ^, Q6 u
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 u. C' w- @. E( E4 ]& W
return (AIC31_data.uint);
+ L8 ]' n @: u}' u9 v- l# w2 K) `0 U
2 a* F) \7 V( U- y k% e |
|