|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, S0 M) }) V. V$ S. ^main文件:5 n, R7 Q. v8 ~6 K( ]" S$ ~
interrupt void interrupt4(void)
9 O6 l# j& I' ~9 @5 k' m3 c{6 |# R: ^% }# _! f0 ?0 W
Uint32 sample;
( L0 L9 u" z/ ?8 R3 A$ l3 L
, Y% x. ^8 P# s8 g+ X' X sample = input_sample(); // read L + R samples from ADC! G7 @. o. n" V" h& @
output_sample(sample); // write L + R samples to DAC # i, C" A! b1 g
return;9 _5 }! S: B7 ^2 C* }1 b
}# M0 l0 C3 \8 `' X
) a7 D1 e1 b' k8 v1 D
int main( void )
# u/ v2 i7 j9 H0 f; P{
4 W0 C- ?. q' A; d3 Q1 B; J' H: ]4 j7 W# Y! F5 n0 g p% ?% Y% U
/* Initialize BSL */
9 k& G9 ?9 q, I5 q6 s- x* y EVMC6747_init( );
( o: f4 L* w" v @ /* Call evmc6747_intr function */
& ^$ z! C- c" E- ^+ f! R; Y aic3106_init( );5 R8 E( P$ I6 ]3 a- q6 W% p
while(1); b6 ^$ t8 T+ ^+ O* y
}
7 V5 S5 t c* b# K) K
P( F' w% w' m% X
3 P s H+ E* k6 C X5 d, U0 Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 Y1 G; }" Z7 \/ M8 i/* Initialize MCASP1 */( `( g" U3 W( R( T- _5 Q4 _9 i8 Y
mcasp = &MCASP_MODULE_1;
6 H; H; X* i6 {4 |4 V: J1 f. X mcasp->regs->GBLCTL = 0; // Reset- H- l4 B9 }* H0 [! H
mcasp->regs->RGBLCTL = 0; // Reset RX$ F) z7 D# z+ S. p
mcasp->regs->XGBLCTL = 0; // Reset TX8 g# s8 {3 y' H+ H8 r2 N
mcasp->regs->PWRDEMU = 1; // Free-running0 x/ T$ N0 C- j" S5 y- r
// configure McASP0 receive registers
! Z5 `! A8 L, v3 V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
$ `0 ^: h! ?# s1 ~, P! Z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% Z K) H: g% s' @6 X& u4 r mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 m. W2 |' N. z# z, G0 m mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 q% e3 i8 i. C% P5 C j mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
' W, F% w$ {$ g% e& ]& J2 q g( m( e mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ h$ D# s" t8 d) A9 @2 R0 b% [ mcasp->regs->RINTCTL = 0x00000000; // Not used
9 S& `/ c7 h* c) a9 C- J mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& `; `# D- ~0 c8 N1 T6 n I. Y1 O) V! C! y8 E& ~1 i5 ?- b
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
4 K5 N Z7 W/ c/ a; ]$ M# p5 s: ]& F mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: W7 u# y5 `2 j* D" j0 i mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* v6 q" J C4 a mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" X; _/ Q4 M2 O mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
. p' F8 {+ {* p# k mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ m) }; |+ x; y) h; | mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 l0 z1 D; d# j mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: [; }% g( m1 A9 v! \' N: S4 k# l# w2 I7 }! b% i- L
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
/ n$ W6 ?7 Y Y' S$ C4 x4 q/ l mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
" ^# ~0 v+ u4 c mcasp->regs->PFUNC = 0; // All MCASPs% F( d4 t5 m4 }; @7 N6 \
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 m- I/ @8 X6 r
|0 C3 |4 X+ l mcasp->regs->DITCTL = 0x00000000; // Not used
& P& F+ e( I, x; F( t8 T mcasp->regs->DLBCTL = 0x00000000; // Not used
, X, [6 C! I+ x mcasp->regs->AMUTE = 0x00000000; // Not used l' O& i) x5 X, w1 P9 i: S
* o& f: c! C( G8 Z/* Starting sections of the McASP*/% x }$ N: B6 b, ?, Z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 | C$ @" K P1 X: m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ w. u x/ O( D4 F( x) O# B
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 L! B; q2 D' \1 j: j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 y1 Y9 P+ U% }2 `( X: o; u4 |* P
0 p5 B3 ~8 S- o0 K
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % b0 K7 t8 n( Y0 R# B3 _' ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 U6 ]9 \# Q) b) @) W7 }8 |+ T
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; f+ A& p2 ` ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 I( I+ g- ?5 @" N9 H: Y" i- q/ w8 x/ `8 F. u
mcasp->regs->XSTAT = 0x0000ffff; 4 [1 A) c N9 ^8 I" D
mcasp->regs->RSTAT = 0x0000ffff;
8 r8 a( D- E9 }) a; u5 B L% n+ Z/ B4 w
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 L! K L* I) d% F. g& x: F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' ~6 c7 r8 N! G. b! v mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, T; Z. n% V. O5 ]& ^3 W! q% D6 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' X) q8 v. C7 p+ T1 i
1 \" x9 F# `$ u+ `% a, a' N) ~& D
/* Write a 0, so that no underrun occurs after releasing the state machine */# |: K/ E, U+ @
mcasp->regs->XBUF5 = 0;
8 e; a0 m6 {# k( N( ~5 L1 R mcasp->regs->RBUF0 = 0;
% l; {7 b* ^, e$ C$ {+ V
! d6 \7 g u0 C' i) O1 R3 R2 X mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ m! u! w$ v' n8 T0 Y/ D- ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' O+ @: h7 |& w' S mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 k6 d5 X8 R$ T4 d% P/ p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 g2 v; r% i a' {7 o* c5 y
) P( z K9 i& R( u: M* {- K
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 t& \: ]8 I4 t$ } o" U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 C( `+ i* ^+ S
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 P5 a7 b0 X) Q* }0 `0 I4 j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. S4 H9 M. x, Q+ X( W/ T2 X# x3 x4 {( i' [! ?
CSR = 0x0000;
3 [! _2 N" F0 M! k1 Y& K( Q6 ^, D- X INTC_INTMUX1 = 0x3d;
* v7 m2 d+ o2 n ISTP = (unsigned int)vectors;
' X! m6 n$ y4 G7 A ICR = 0xFFF0; / N$ S7 D$ f$ o2 t7 y3 n
IER |= 0x12; . q) H" s1 k5 N+ S
CSR |= 0x01;
4 Z& t) _9 T& u z/ A9 F( @# P
* L/ O! p( V3 i) ?" r( W/ [* G* N7 E* m" L) h! t. b: q. E5 C4 u
! b s" p' w1 m: k/ G
还有就是两个输入输出函数:4 n: ?1 E& f, h! K
void output_sample(Int32 out_data)
5 l7 i# g1 H @. r% S' n{) e: y* m+ ]& H7 u0 `3 M
AIC31_data.uint = out_data; 0 g# |7 V* k! J5 _6 C
MCASP1_XBUF5_32BIT = AIC31_data.uint;5 {, @) R7 G P, Z
}
+ T# u6 c; Y) H! L. M- k; T
7 Q* b" V t; U4 t0 _Int32 input_sample(void)6 l; n9 b/ y+ y7 K' f; \
{ " p$ k/ a; t" t x+ ]" D
AIC31_data.uint = MCASP1_RBUF0_32BIT;) ~* y) l! S6 ?% k4 x
return (AIC31_data.uint);
- H6 `: ~6 k0 D% T5 P" x V}
. n9 B- _$ X6 U0 L3 M4 c
" |6 [% R5 r0 `8 V( v |
|