|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& w# Y( b$ L! e7 D# ]) S
main文件:! Q) F% G& w; R) v
interrupt void interrupt4(void) 1 e- A" N, C1 K* J6 y8 _" _: W' r
{
& Y# C# [" e" S5 Z+ ~+ t d Uint32 sample;
& {$ n# ^1 w% m3 S$ v" t0 J
/ x% ]+ u& r7 i6 N9 x5 } sample = input_sample(); // read L + R samples from ADC% m+ A7 h+ N* e( ] v
output_sample(sample); // write L + R samples to DAC
2 F" i* c& _3 h return;
) A% r- L+ U4 X( L9 E( x4 u}
! V! o+ [& L0 ]. V6 G2 L$ {1 D1 t$ y+ W$ ~( P& K3 E' g8 V. Y
int main( void )% v: o0 M4 B) E
{
7 m/ {7 w! c1 C0 e) Z# `
9 N0 m, _0 M% l7 V, I /* Initialize BSL */8 X9 ~/ _8 Z; h' b
EVMC6747_init( );( [( j0 ?! R% Z& [6 T
/* Call evmc6747_intr function */
3 u. y! N+ S+ ^7 H- u aic3106_init( );
, p: V- V7 r) W while(1);
* o. L5 T! f$ y$ {2 x* Y; N8 {! T}. x: l. M$ o* A" y" F3 ~& F
# {8 ^# S' s' j: X7 F7 \3 x( |7 T0 K) W" z9 A2 ^; F4 h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& i) ?0 m% ~# ]9 T+ d/* Initialize MCASP1 */3 R1 J: z B; z& r1 G
mcasp = &MCASP_MODULE_1;
- L% \2 z% J a- D6 _ mcasp->regs->GBLCTL = 0; // Reset
# D; l% @! [% b- C. I mcasp->regs->RGBLCTL = 0; // Reset RX( _$ M. D7 U( o2 {( X
mcasp->regs->XGBLCTL = 0; // Reset TX6 J7 N) q9 K2 J' h" @
mcasp->regs->PWRDEMU = 1; // Free-running
% T' u5 d! s* N5 m8 ^* M, c // configure McASP0 receive registers# U9 {0 u# p2 B1 J9 p
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 z0 i: V5 T! i8 q8 j* n mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 x( K0 o. g, { mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ I# w+ A; h1 x! a3 ^8 l mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* B! [7 r- M- Q3 E
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 B% B) F4 x. ~1 q mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) x3 T; Y) q# k* y' v& c mcasp->regs->RINTCTL = 0x00000000; // Not used$ d3 X1 r; N# W$ H6 ]! d& L' D
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' \' O5 p' z) Q" M5 c' y
: f6 y+ Y3 o6 f4 H" w1 y. \( T& ] mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; C6 h9 E" r' m1 s mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 |% V9 K& t+ o* \6 ^3 f" G) f mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' H9 [, u3 @* ] mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% Z( L: @5 ?! B) ~$ `' N mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 C+ q! ?9 ~) I! @0 L7 M+ W. ]# `
mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ a( C: w: y4 e' U0 M$ R% q. `
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit8 X3 ~( P8 A0 d" L2 ?# R9 D
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' t$ c5 k" O+ D' c% s( c8 k, \2 e
# H0 [' ?. m d0 R% B3 n mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; B. r( d" `& W& N7 D, s
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 @/ J; m" z5 `2 G
mcasp->regs->PFUNC = 0; // All MCASPs/ v6 b+ I+ A: I) ^- y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, X8 s" X' `+ }
) s/ \ u7 u( @$ M& X
mcasp->regs->DITCTL = 0x00000000; // Not used
$ r2 W) I, v4 H' F7 _8 I mcasp->regs->DLBCTL = 0x00000000; // Not used2 I+ m! g( n1 N7 X8 ^. G4 T
mcasp->regs->AMUTE = 0x00000000; // Not used
& H P0 A( L, t2 t$ r2 n# Q5 E4 N4 h. A) J
/* Starting sections of the McASP*/, j% S. n) u/ s! e# j: p4 Q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. V9 E6 L N" b+ f) N. N; L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 b& T7 T4 D/ R" h! s mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- V7 `# N0 g" X* K* ]8 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ m" e+ J; f. q; r( [ f% e" G9 t2 J9 ?! Z; g' z- J! F+ Z
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- W9 @6 N$ Y" d9 X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* m: B+ \! s9 R) _: n
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 h, u( M* J# Q1 l: W# i' U4 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 G# V9 ~& f0 r) m6 A3 o
( r p$ [ u# X! [
mcasp->regs->XSTAT = 0x0000ffff;
) K ^. S l# S; { mcasp->regs->RSTAT = 0x0000ffff;
& U$ n& {4 y7 S3 e! k& f7 B) J& U
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: V0 J3 I6 Q# n! u s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 g' G8 S8 L2 k! ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& M; b) t2 D `9 L, Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% L' N3 \# C3 X6 E( U2 V
, |3 W6 G" m! i( w0 [& W/ ~ /* Write a 0, so that no underrun occurs after releasing the state machine */- }! l2 X+ k6 p) W+ i
mcasp->regs->XBUF5 = 0;
" e3 y2 M$ F% k$ |' z9 u3 R mcasp->regs->RBUF0 = 0;0 S; k' ?$ Z, O% N
" V4 B" V2 R1 ]
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
d7 [1 L* [8 g, x. r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- v4 [0 `% D& A. w. M0 W
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & T- U/ @* t% U. n. i: n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% {/ F# U* z* n. B% m2 ]3 I( A2 \$ J$ E; I/ z1 q7 ~% @2 d! z/ Z, K" U
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 ?3 }; d9 ^$ C# k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 K, W; F* K( P7 O& p9 R mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / M3 c: c7 {9 z& f) A2 N5 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" e4 a) }8 S4 t: \3 H% ]* ?
. a0 p! O6 x4 U' w# Z/ h CSR = 0x0000;0 G: }' S3 D7 ?2 C2 V
INTC_INTMUX1 = 0x3d;8 {8 I s# P( G/ Z C. ^2 R* I( Y
ISTP = (unsigned int)vectors;
2 v c6 C0 ~( U# k) |9 g7 [1 I8 ^ ICR = 0xFFF0; / j! j$ i/ |- e4 B
IER |= 0x12;
; O& E; {5 D! a2 l CSR |= 0x01;
0 Q4 ~$ x7 n* x* X* r! D+ N/ I8 X) s$ {$ }0 d
, h) R, R; F. M2 k
6 n5 S( N3 I; }+ i
还有就是两个输入输出函数:* _6 F9 f! H) c* I) J! _
void output_sample(Int32 out_data); N5 C+ u1 B# J/ Y
{ f9 k% i( Q9 q
AIC31_data.uint = out_data;
( I8 R* ~1 r* _6 G4 m4 ~6 u. h/ k MCASP1_XBUF5_32BIT = AIC31_data.uint;' W1 c+ x. X: l" y7 Z" o
}& J% n8 E8 m& n7 e; K' g( }4 V# W
! Q4 t5 H5 T1 Z. r. A) l) {& CInt32 input_sample(void)2 M: K% c: i" r8 Q, K' [0 S
{ 0 V" ?/ v8 p5 ~3 W: `! F
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 Y- X: ?8 ]" A8 | return (AIC31_data.uint);# A3 d/ T5 `6 x- n- f
}
. R7 d1 H, E5 B
( _2 a, j* e% n' ], b |
|