|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) C ]7 Z# }6 m) W3 Q( s* ]" [2 emain文件:
# H4 p0 t4 K4 Xinterrupt void interrupt4(void) ) K( b& T$ _2 a; _) d7 A+ |1 x' b
{! w, Y: b4 l3 r6 x" a( n( C
Uint32 sample;% [) K2 [6 z0 @6 B# |
0 g8 U' y2 ~7 n# @. U sample = input_sample(); // read L + R samples from ADC3 j4 v8 T3 v# c) t$ f
output_sample(sample); // write L + R samples to DAC 2 b' x3 ^. ?6 z5 c) t! g' g0 ~2 C
return;+ v2 m3 M3 |: q, p( ~2 v
}7 m" ~7 ?$ W5 U9 o0 X6 Z) W
% i# S# q0 f0 |* w9 Q
int main( void )* k/ I2 b- m9 a) H: A
{
. `9 D$ e# a% v! Z9 Z w
. Z4 @$ g1 g. |5 `! T /* Initialize BSL */& @8 X# ?7 g2 p
EVMC6747_init( );, X" u4 L$ z8 ]! ?! o) c
/* Call evmc6747_intr function */
. D' O4 s5 }, [+ B( t aic3106_init( );
1 H0 C/ h7 B% y$ O3 N1 ~ while(1);$ o" G% m0 C V B5 ]
}& i! t/ Y$ c. Q( i( N6 M4 i5 v
, Z% u# v) E' K ^& M3 t1 k+ ~8 d, D7 Q2 i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. X& g! V: D" M+ C4 Z
/* Initialize MCASP1 */( c, b- N) g5 a9 k2 w$ p
mcasp = &MCASP_MODULE_1;
3 E& w G: Z2 w! c mcasp->regs->GBLCTL = 0; // Reset+ I$ B$ k& E" \6 V9 K
mcasp->regs->RGBLCTL = 0; // Reset RX$ ^% i$ |4 F+ p
mcasp->regs->XGBLCTL = 0; // Reset TX
& j3 ^4 E5 O Z mcasp->regs->PWRDEMU = 1; // Free-running! V$ m. T+ U$ C, \: X
// configure McASP0 receive registers F0 E/ i. U" K; ~2 p( R) h# h" V- h
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: A$ y9 L5 |- t% I2 P/ x. o/ ^. i$ r
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 j$ x7 Z# ]0 }) ]$ u
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word m& I! v9 x( X6 n( [7 ]
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 d/ @* C- N+ Z+ [ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 F& x+ B' z. R- |& s mcasp->regs->RTDM = 0x00000003; // Slots 0,1' F2 A! z/ l8 B5 b: O7 J
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 d( z. ?2 ]* ^ i6 r mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" c) w6 c4 }2 g1 `& N! P; J
* \$ a5 d# ], d
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 ^/ Y/ c( @0 f& m" c5 d6 d
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. |, |& s4 x0 ~8 H+ z! d @ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( o8 Z# ^5 _$ L2 U" s0 D% b
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 S8 p4 Y- Q6 n; ~: Q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& ^' @% i7 w4 x% n8 _7 T1 o% i
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
( `* B3 M6 F# M+ C: G( X mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* p4 f7 E- S, g! E" \) u mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: N# T3 K0 i! `$ ?& M/ a# V+ d
; r# G8 v( Q3 t0 W+ z& v( f4 G mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ w. m D4 D4 ^- A% V, p! X
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
* ?8 n7 F2 `! x7 R3 j+ U9 B4 x mcasp->regs->PFUNC = 0; // All MCASPs7 _' L, t& n6 o
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 `, Y1 ` d! s( F2 N4 Q* Q6 ^
/ i' s* d' c1 t6 e6 p0 I. s
mcasp->regs->DITCTL = 0x00000000; // Not used0 d, z$ { h. q8 g
mcasp->regs->DLBCTL = 0x00000000; // Not used
" U, X" Q+ L( m' V3 P. N mcasp->regs->AMUTE = 0x00000000; // Not used
2 q; a' L1 I& A; [! u9 Z" \" p0 A' f4 e$ D# ]% ?- Z5 f5 o0 N
/* Starting sections of the McASP*/7 Y. g! I6 g6 [: q+ L) o+ a% d
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; D! a, `9 A8 K1 a& g t$ R5 k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; X$ v; P+ l' R5 K; _* }2 \
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * K5 I/ x# ?# H# q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# I8 n& b5 \6 k9 i H7 y
2 g) G, g8 @! A [# J' S. x+ | mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. `2 u, g6 i% p, s; W% r. I% v4 } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: M- X4 g3 K! z3 g5 f1 B mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + A5 l4 Q$ ?! G8 U* j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 O9 W7 z; ]# _( @
8 B( O1 d5 x5 ?; M mcasp->regs->XSTAT = 0x0000ffff; % N( e- t, a2 ?# L' l. t9 w9 J
mcasp->regs->RSTAT = 0x0000ffff; * `0 [1 K) }* j5 ?0 f
+ `& I! \( x* Q, m$ Q
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 X) r) j, x2 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- h# q- _9 ~% k Z- p5 V9 d mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % R3 G, |1 n4 I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 U0 ^' `9 V5 A9 Y7 |$ D0 i
& J6 P# U. J: q
/* Write a 0, so that no underrun occurs after releasing the state machine */
) L D* p6 H2 R- U7 S! m5 ` mcasp->regs->XBUF5 = 0;
j4 y# f) s7 A mcasp->regs->RBUF0 = 0;
6 P6 r! t$ }2 r# i8 O7 B& @# X( n+ _& m. `$ V
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- T7 J9 U1 E2 F; @6 L- c. D4 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 E3 D. p, @( q3 g' o
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 p+ p0 K- |( q s0 T: t8 F! h/ @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# K5 K3 y* R/ p, @3 |9 q) B6 u
% Z' ~" I5 @2 S) w/ k4 i9 K
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 Y) ~: q/ W: w; {) W4 Z/ R: T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 V" _( P) a B" w' C+ z6 U
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 o4 z% X- d& R: y' V2 `/ t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; o% l$ k, p: v" p% |6 h4 e( S& E% j0 L2 w. H
CSR = 0x0000;6 D& n+ }$ v) V- F: O
INTC_INTMUX1 = 0x3d;
0 ~: c. x2 @+ N ISTP = (unsigned int)vectors;3 z0 A; V, }0 P+ Q4 G
ICR = 0xFFF0; , Q n! S3 x a0 h& V$ y
IER |= 0x12;
" `& s+ J) E5 L CSR |= 0x01;
/ G; b. U; ]: j2 z
1 S9 k/ U+ C. p \# N9 @$ ^9 N! x5 k$ Q
- Q* V* |; r+ n( W还有就是两个输入输出函数:
/ A) \$ L+ |/ E0 D4 q( L, Wvoid output_sample(Int32 out_data)
6 C- d2 D0 `7 A/ s3 c) O8 I{
8 x/ Q& b$ o8 H- k1 z% \, M. B% _% s AIC31_data.uint = out_data; 2 X( ^+ Y4 ?& U9 M$ Y0 B
MCASP1_XBUF5_32BIT = AIC31_data.uint;+ z( o, H7 {. G+ ^ T) }
}2 D$ d3 A, Z3 I _- t# y( Q2 p' n9 w
# ^% e% X- a; n- nInt32 input_sample(void)1 ^5 u; Y$ H4 E9 Z3 s8 I. x) _! F7 W# l/ u
{
M, I! u! T- a3 D( H% B AIC31_data.uint = MCASP1_RBUF0_32BIT;3 ]2 S* U$ ]# e+ w) H
return (AIC31_data.uint);
# _ w$ u: L, S0 }}- L4 o+ G1 p8 A1 A
: X0 o R. H9 ]9 j; [5 X |
|