|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ O ~' c U( \, i3 Q! R
main文件:
4 W# u6 ]! l6 P& Q0 cinterrupt void interrupt4(void)
8 T$ h" I% E; R# B{
! }6 F" X! R* W x" l Uint32 sample;
* q8 o; s$ @2 U
+ F4 v& c* Z: R: v2 Q3 u sample = input_sample(); // read L + R samples from ADC( X: H. `+ \: M
output_sample(sample); // write L + R samples to DAC
" z9 ]8 K+ @7 {8 D5 V4 G+ | return;* I) _5 s* ?7 U8 V0 \! c3 N
}; \0 J" b2 X. C
$ q p3 u l3 z: L5 J
int main( void )
- K" f% p9 ^+ c2 V, m& s# `2 a$ u{8 Y1 J" `# g# N$ |6 U/ f
4 Z# y7 A/ c4 D /* Initialize BSL */
+ U* h7 A0 B8 @, ^- e EVMC6747_init( );
2 |- k9 G3 K& X9 G" H7 S /* Call evmc6747_intr function */
: i- L {+ S0 V& k9 h( [3 h- g aic3106_init( );4 m2 e+ H7 E8 h9 r% p7 l/ ~" ?
while(1);& k; g6 T ~) j$ M8 J3 o4 b
}2 N8 O3 s3 [, D1 `$ }
- P* F l1 r& g: Q- R# o( Z" \1 |) W# e
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' l4 K- J a6 C, D& c% y1 |( z7 X
/* Initialize MCASP1 */
+ h& |0 J! H/ z- k/ ]9 l* B mcasp = &MCASP_MODULE_1;& R3 x N/ u1 L
mcasp->regs->GBLCTL = 0; // Reset
3 M9 z' O( L% r! @ mcasp->regs->RGBLCTL = 0; // Reset RX
5 \5 n* D9 ?* g0 j8 p+ \' G. n mcasp->regs->XGBLCTL = 0; // Reset TX
+ Y6 [8 M) H2 |: F mcasp->regs->PWRDEMU = 1; // Free-running$ I; n$ a F9 O/ Z. R# g% f
// configure McASP0 receive registers6 F& v% @" H% ]' ?$ X" |. S
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) _4 U" a! e/ s; v. E; p& O
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: V' f" _# i* U/ n/ ~
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: k# w7 q9 z; D mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# Z6 A, E$ L: S3 `" P' C7 E
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
/ S$ y7 H6 K! B. W5 m mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ j9 M7 x9 D9 H1 O+ D& ~1 |
mcasp->regs->RINTCTL = 0x00000000; // Not used+ F2 ], W( z6 I( m# L
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ H7 J& o7 B. O! m9 x2 ~% H; f
+ c; U8 @' j# g4 P N8 B mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ m. q8 Z% \2 U0 R
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ ?) Z5 E# h+ n) ~2 C mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 ~% S- c8 m3 O; h4 f mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. u3 t( Y( a1 u0 Z2 Q, j mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK% r8 R! d6 ^3 X7 {( O% U0 i
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ E4 q' O/ f/ \8 L0 {1 x0 [, V* y mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! t* m( v' i8 D1 ^
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) y% c- V6 Q( o- n8 l( W6 u# ?- l+ l0 V% m8 Q7 p8 Z4 u$ l
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN5 Z; [5 V6 d9 \' r, Y& y4 h9 b' D
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* J, A2 h* y9 D& I. C( Z
mcasp->regs->PFUNC = 0; // All MCASPs
! u- y, i# v. X: I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; i I. Y- f- R2 J$ @* Y5 E
r; v8 C2 \: _9 ~9 b. a mcasp->regs->DITCTL = 0x00000000; // Not used
/ b* z% w2 Z+ q1 `& }& Q9 ? mcasp->regs->DLBCTL = 0x00000000; // Not used
1 x* W. k0 E" P+ E1 x: z mcasp->regs->AMUTE = 0x00000000; // Not used
7 Q6 ~& k. T6 Q: i, @1 t$ W$ S7 I" ?9 z) ^' [
/* Starting sections of the McASP*/
& h( x, Z" T7 j6 ^/ X mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# e7 ]% f; w- v$ d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
y( w* Y) H& |1 u0 d* D mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: n9 j2 a, r9 _/ U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! V9 T/ | J6 O5 o4 T" q
$ J/ w5 E* {% A* w2 q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( h% _) u4 O4 i& C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% u* i4 g) F0 Q mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 W- ~6 D, B% C! H- Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 x1 k( K) A! o0 [$ N$ B4 G U& q$ M0 B0 b: X
mcasp->regs->XSTAT = 0x0000ffff;
3 V N* W7 ^; b p8 r; W3 j% n mcasp->regs->RSTAT = 0x0000ffff; / _; R. u( R( K5 P2 e; P# N6 n) O& s% q
$ Z7 ~8 Q2 R, U+ i9 d4 f
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- m4 j$ c! ]' S( ~; j9 D( P# T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" M z8 f5 E9 ]2 |9 I7 ^% E# h mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 I5 {8 V( T* p$ p1 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ R0 o% P, r6 t) \3 \6 }7 q j0 p1 W
0 V9 u D0 c" l, N8 m
/* Write a 0, so that no underrun occurs after releasing the state machine */
% e7 f# T/ C; ^; c6 } mcasp->regs->XBUF5 = 0;- k/ Y( S' w: J% c* |
mcasp->regs->RBUF0 = 0;# Q, ]+ G6 P- q( q4 t8 {, f
; }2 p# U6 b& ~1 g; }
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; P7 g+ G) u9 P3 k: w6 p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" _7 M( d' ?, ^+ G5 o
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% P- U# t& o: J5 q q( @7 v8 ]" n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) d y' I% M( l0 A
+ r$ s* o# Y( c+ C
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' D, h6 e8 j+ d; z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
b! `: ^$ r/ F5 } mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # O. l- O! H2 f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% h. D& E. p+ e" w6 h- X
5 o c$ k& X2 X6 X- Y& j CSR = 0x0000;
, v) W) {: f+ U) M8 ` INTC_INTMUX1 = 0x3d;
3 _: Q- V* ^4 t ISTP = (unsigned int)vectors;
$ ?7 n9 h; f/ O8 X0 E ICR = 0xFFF0; 1 T" f1 v, G+ {3 Y4 [; Q; _
IER |= 0x12;
( \- i# a/ {6 U, f& V CSR |= 0x01; 4 p( l( d8 ]2 u
# d! c5 t# t3 p5 z
1 l4 C1 @* d" c" d- w# K2 e6 s6 B9 r- w7 U& J% m1 o
还有就是两个输入输出函数:+ j, Z7 l, {3 {7 d Z
void output_sample(Int32 out_data)
' I3 y6 r% \ J0 J9 |{0 [& {# I( n: ], z- L2 N+ L3 l$ H
AIC31_data.uint = out_data;
( D8 g0 c# B$ X% |4 Z: B: h; L MCASP1_XBUF5_32BIT = AIC31_data.uint;
G" G) n0 W1 Y: n( N; k0 i, p}
% R1 A6 R$ |: t7 z1 q) t$ O$ _- ?/ B- @
Int32 input_sample(void)
, }; j$ u2 j6 m' C" F7 p* L{ * g o* m( ]+ y+ P- H0 F
AIC31_data.uint = MCASP1_RBUF0_32BIT;( l" W7 ?' y5 X
return (AIC31_data.uint);
$ {, q$ D% x' o) e# R7 K$ J}
, t: r ?6 V0 _/ i3 U, Y4 t" X
3 i! _' s/ Z4 j, { |
|