|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: \/ r9 ~; [! z' s: L* d
main文件:
4 ~" Z' H$ ]" U% S# Z5 G/ sinterrupt void interrupt4(void)
{% H0 ^7 K6 Z; R{' F7 t) b+ ^$ V- k- y
Uint32 sample;: t* z. i B) [2 s+ M+ F
' Z: N8 Z4 {" I, v+ h
sample = input_sample(); // read L + R samples from ADC/ ^1 Q( n0 W8 i5 Q( ~7 |, ?' f
output_sample(sample); // write L + R samples to DAC / S7 y0 A1 s2 G2 g/ w& D, v
return;$ e4 z. m6 [ u5 ^4 P+ [
}! f S- r6 J* d# z# o) O0 S
# ~8 M7 I1 E2 ?int main( void )0 e7 O; c1 }# v( f! {9 m
{
* T4 Q( |) \6 X# h* Q/ @: {9 y' M4 _" g
/* Initialize BSL */9 i' O; V! M, p( e, N
EVMC6747_init( );
& y4 {, ~/ U4 C! r# B /* Call evmc6747_intr function */
5 f) G! w) s3 N7 _3 L aic3106_init( );" H# a4 t, _# t. {8 c9 }
while(1);2 n% u$ W. M5 E6 [9 {
}$ C1 M3 `& f- r$ Q3 U% P" }9 l3 b
. S3 J$ K/ e3 _' P4 z0 _$ e7 W
4 W' p4 G8 f2 Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; @: k6 Y# Y @' ^7 {/ U5 {- Z/* Initialize MCASP1 */
/ ^% f& Y" F/ ~6 W( W mcasp = &MCASP_MODULE_1;
x, W5 H' g9 R$ ^' b2 w mcasp->regs->GBLCTL = 0; // Reset
* z5 }; V8 ?$ n( e7 k" q mcasp->regs->RGBLCTL = 0; // Reset RX
3 ~1 m7 Y# ^; J) F6 B mcasp->regs->XGBLCTL = 0; // Reset TX, M% D- T1 y. b6 Z
mcasp->regs->PWRDEMU = 1; // Free-running
. ^! O9 l6 n Q' Y- h+ n+ r // configure McASP0 receive registers
0 Y5 I( T8 c7 f" k/ ]7 ^. N7 K mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: D8 b- R) U m; L$ | X mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% k2 N' j3 `/ y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 q; d, |; f9 g: N mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 S% v2 `. @9 f' z: k) D8 x mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 u& z$ N2 r; K' c* W( G, P
mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ ^! h8 P* M, e+ `8 F7 N% `# u
mcasp->regs->RINTCTL = 0x00000000; // Not used
0 b3 z" [2 k: M3 q& A6 W% T mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; r" d0 d: r( b0 @( M$ l
7 o" s. O# D- w X% M" [. V mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ ]6 U8 v: N* K W" r0 G mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 [ x) Y. ?) \6 C
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word E& c" i2 V9 Y& q' N
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' ^7 k" V. C R0 C mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* J8 V6 e# @" V7 P: m mcasp->regs->XTDM = 0x00000003; // Slots 0,12 A% ^4 r2 R5 n& Q/ |
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit' L! d, v- g! X6 M' e4 ?: C
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& s9 i3 P+ B$ O& Z
" U! q' L) i; E: a$ h4 ]# N1 S mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
' P" ^0 T/ s* D1 S mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 |- R/ E$ O( M& G5 T1 B2 _' T mcasp->regs->PFUNC = 0; // All MCASPs! R: |$ I9 `! g8 M9 F5 D
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 ^1 J2 p7 j1 @) I( M& a3 P+ S6 g
7 Z" |; \/ ]5 {3 X: R6 w, { mcasp->regs->DITCTL = 0x00000000; // Not used- ?' m- M* ~& G1 r1 G5 ^
mcasp->regs->DLBCTL = 0x00000000; // Not used# ~6 ~; ^6 u0 S
mcasp->regs->AMUTE = 0x00000000; // Not used1 V& ~5 x$ a3 y/ [
* t" ~" y. L6 B* v; `: G
/* Starting sections of the McASP*/
) N* J7 W7 J/ b# R3 o t9 N mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # J9 F: b0 F) e% J9 V& m! [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 ?& L8 R& M* V) S/ L; L& j mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- r* K6 u- ^( w% e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ `1 _1 J7 K* @; ~; I
( L7 \; ?; b/ j* H2 ^& r( ^ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 }9 \4 }% X) l' d% W6 \9 p7 b2 L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' {3 K# \2 x% {: b
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % b( W( v6 S, {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 ?7 C* I6 r7 n
: m& q, i+ q* P' e; P mcasp->regs->XSTAT = 0x0000ffff;
/ Q6 V! Y# F7 K9 u+ j5 ` mcasp->regs->RSTAT = 0x0000ffff;
$ ?3 k4 ~ ^9 W$ P3 {+ Q3 B! f1 ?* s
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, ~! ?+ q d4 B) p6 N/ n1 u- Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 ]) g J# l( y/ r& @0 q0 R k
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 [, N4 P# S5 K9 L, P+ ^7 F& e( B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 X1 D3 w/ i/ U+ O2 Z
4 M+ \# |. y5 K1 Z8 }! N1 e' M
/* Write a 0, so that no underrun occurs after releasing the state machine */
r5 _" Z) ~/ \2 A J mcasp->regs->XBUF5 = 0;
_. o1 o. B/ ]; x- w$ ^1 L1 N mcasp->regs->RBUF0 = 0;/ T( `. @# y8 {( G! D
% |9 i$ o, g6 R" S J, J# @6 m( b
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 \4 h( |9 O: J' J1 f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' Q3 o$ K: N; L
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# x5 I. G$ {8 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# q% I' H; U8 T- z. w$ R! ~" h- P3 L
0 w/ l4 @% s" ?1 W, A mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( _5 A z1 `( Z, C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( m1 a9 V' M& m; @7 N
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : S; D3 D" A- l6 J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. H2 G8 T$ T5 s* ~( r! d
! @/ ?! T4 E: G5 ]& c
CSR = 0x0000;" v5 n: \# \# {- O
INTC_INTMUX1 = 0x3d;
# E* @; z; J, T: O: Y! [) @2 L ISTP = (unsigned int)vectors;
A3 |1 t, `+ P ICR = 0xFFF0;
# n4 x4 {3 l$ @1 @" Z IER |= 0x12; / ^+ G/ V: S4 |3 _8 M+ q9 C8 k3 |
CSR |= 0x01; : ? `9 }! Y3 p) {3 T$ ^
' Y3 d( W7 B) [( E+ c" H
4 S4 e. q9 B: q0 }3 I! E# H. c! w: y# n/ t6 y% q1 Y
还有就是两个输入输出函数:- }5 w5 i) z. Z& m4 Z. ^
void output_sample(Int32 out_data)
! F8 Q/ n' n5 R{
9 ]% C0 H- L# |! I AIC31_data.uint = out_data;
0 g( u6 q: s& @7 ~ MCASP1_XBUF5_32BIT = AIC31_data.uint;
, s4 O/ d' g4 w r! j}
5 j1 F2 e1 R/ T' J9 F F* G- O7 A7 B2 E+ b4 }( _
Int32 input_sample(void)
- n: J7 h6 v, S$ W( C8 W{
2 s8 I: g. X+ D+ J4 c4 K% q AIC31_data.uint = MCASP1_RBUF0_32BIT;
" ~. L2 D# x1 p# ? return (AIC31_data.uint);
6 I" M# Z, t$ t1 x; |4 y* F( C0 y}: { X/ ^$ M$ g2 [
) M. e1 o4 ^- U8 X
|
|