|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% m% `9 s, C w4 f/ h# e r
main文件:
' `# y) e% t; f) yinterrupt void interrupt4(void) 5 ]* H7 b( ~/ E+ a" H
{0 X0 d( U+ Z) z) Z5 P! W, H
Uint32 sample;
# l# U! ]& L! f0 E/ S6 x V; E# G8 f$ a& d- c0 P2 d
sample = input_sample(); // read L + R samples from ADC
7 i- q2 d- L5 k x) U output_sample(sample); // write L + R samples to DAC $ m, L2 ]( [6 K6 {
return;$ b# \5 n! u" [2 B
}2 [. i" X4 m: c" A( b# p
; A" G; C9 S& W, o& x1 qint main( void )
% W* ]- x, i# w3 I& A{" H$ _9 ?- G1 A" j/ w
! ~3 C- v: C" o /* Initialize BSL */
1 _6 f/ u h: [' Y* O* u8 D: R EVMC6747_init( );! v) {: O; f8 i6 L: @0 \# j
/* Call evmc6747_intr function */
% D4 Y) u: C- q( d$ o( \ aic3106_init( );4 a7 E5 {2 D3 _- f
while(1);
; R8 V/ D* e j9 C6 I7 W7 H2 ?}* ]8 K$ s6 H: x: ?
$ p8 G6 E) w1 w
9 ^8 u0 F' ~0 zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 [8 w. ~: G( V4 s, H3 L( R. X/* Initialize MCASP1 */$ _ H5 ~- }" w! K
mcasp = &MCASP_MODULE_1;
3 W' t, x4 n+ R$ w) b& Y3 a mcasp->regs->GBLCTL = 0; // Reset
' A! {( S9 M2 P5 L0 ]! k5 f7 }5 j- I" f mcasp->regs->RGBLCTL = 0; // Reset RX
/ y- b+ O/ `, a6 S4 o: f7 G mcasp->regs->XGBLCTL = 0; // Reset TX" `/ @ B0 u8 n: Y4 }
mcasp->regs->PWRDEMU = 1; // Free-running/ d7 n) U+ I3 u! [, u! l) l( C }
// configure McASP0 receive registers
( I1 [! r# C5 X mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used+ q& a+ {4 S4 ^9 m
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# j: r3 @8 Y( s8 ]9 A
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 N/ Z) c3 {( e- P! r0 o mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# k9 v, P" Z$ G$ _
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, }2 T7 W9 N2 i/ k mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, L0 W; ^4 P" F4 \" @8 ^. C. A mcasp->regs->RINTCTL = 0x00000000; // Not used/ O0 z: Q1 a M2 W9 A Y4 J4 t
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) {/ ^4 q2 o6 p* ~2 h2 G) e
) d, k6 I9 s+ ? e' p# [& D7 ^( W mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, q- g1 O9 ]0 S' f3 o% V$ O; ^
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 E% x) A. t# H* w- {* w; H7 Y+ {
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 j: g" f) C2 y, u3 e& Z& q1 x
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16 v$ O# V. D& M2 w7 x5 m; v
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK1 ?# G' t% [8 w( O' [
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
# a; c9 y) |# O, U mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; |8 Y& G" G3 Y! J mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 s9 m0 f% U/ o
: w9 p( e5 |& ~7 t, m: U) e
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 q) S# Z+ I: o. I$ P( I mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
+ G5 u0 _ R; [5 |" a$ E mcasp->regs->PFUNC = 0; // All MCASPs
4 b u3 h( ~ m9 N mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 r% _4 d: N; A& I+ T! j' I$ h
( O. c' }& W2 c+ G. d4 r
mcasp->regs->DITCTL = 0x00000000; // Not used0 A) L5 v8 U3 R' X% b3 L
mcasp->regs->DLBCTL = 0x00000000; // Not used( m8 g+ X( B; |/ v$ U
mcasp->regs->AMUTE = 0x00000000; // Not used A- p0 |9 n; P7 z' p: E! C; Z" a
: ^/ E E2 l9 [) t! d4 _
/* Starting sections of the McASP*/
- e" W! s, C" u mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 g) V1 n8 N3 Q$ @& J3 L I! B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 7 D5 }3 N+ V; O3 A( P8 t
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " G: A2 @# c# G- M0 Z) g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 s# F w7 w, |7 \9 N _2 c, i5 V- i, L/ t Y
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 H, N% f+ r1 n! q7 e/ C6 n, J( y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); V) d) e, Z+ I0 i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 G' u; X1 h5 x" g1 `% m! j6 k- T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! v; N; {2 M6 l* g8 S y5 v8 G- l! ?
$ q+ G' s, V8 h, [% V, o
mcasp->regs->XSTAT = 0x0000ffff;
. H/ Y" O$ U8 F4 k- r1 X mcasp->regs->RSTAT = 0x0000ffff;
- s8 o, X$ t% b: ^, P* A
+ b' X9 [, x, [$ s7 d* @ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 e/ l: o# e! e! w2 b+ x7 N0 Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ H( a5 A& h% H
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 p8 Y' H6 S0 B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: j0 b, \ N6 Y1 s7 a" o7 a$ X* g0 Q) w# p4 j
/* Write a 0, so that no underrun occurs after releasing the state machine */
2 Z9 p- s3 r1 ?- K mcasp->regs->XBUF5 = 0;
3 _* Q6 }0 y% E8 P# A mcasp->regs->RBUF0 = 0;8 C9 U; i, @# \+ z1 F
( x& O T u3 | o, I9 v1 q7 f
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 m) Z5 g! Z) ~6 M/ A+ f9 d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 t2 I4 q' y% s. F9 I mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # ] g' q8 t7 S/ z- C/ m4 F/ b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 q _8 t9 @ ]7 V2 g3 Z" T: H( |
+ `4 Z, S) q. M I( o, W
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: W9 ^4 h5 W o( g4 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 {2 d+ s% A4 G3 j mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 z' R }( ^! v3 s2 a, m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 T$ Q$ z1 N" s8 N# E
7 b' s! R2 y9 J8 B, i! Z+ k CSR = 0x0000;; e. M: `6 O8 C7 W/ s9 l& ^+ d- }
INTC_INTMUX1 = 0x3d;
. g+ ^1 ]& G# I) y ISTP = (unsigned int)vectors;: ^7 E2 {% A* d1 Z- R
ICR = 0xFFF0;
; |# n/ k( D. ~0 F3 u+ {' l IER |= 0x12; # z# y1 p0 q& ]: q, q
CSR |= 0x01; % z7 U+ Z1 q9 P+ }! t* N
; Z! z* u, J' N) }5 I& \
3 H- C" A ~' s% J& G5 m
) C. F) ?5 a4 h2 t, c1 v还有就是两个输入输出函数:
% Q/ d, P$ ^8 ~& @void output_sample(Int32 out_data)
3 M4 u& v! v! M \, [9 {8 I! a{( B2 h/ a: |5 |
AIC31_data.uint = out_data; ! z; T! J- U2 p2 d
MCASP1_XBUF5_32BIT = AIC31_data.uint;8 N7 @. B A6 k8 G$ \( H+ A6 H
}
7 P3 k. |/ r6 _% z0 @! a" Q4 p5 T5 |1 Z. L: z5 M0 u5 ^1 {6 s
Int32 input_sample(void)# n' \2 {6 j& }3 n* g9 H
{ 0 Z) f2 M: p; E
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. S% A& z, d6 Q& T; [ return (AIC31_data.uint);0 [" ?" G$ r, m# J0 @" [2 l6 J: d
}
( J Q: Z U( v3 T7 o
7 ~7 [$ Z; R5 \7 d# S |
|