|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! B$ c9 a9 z7 ~1 r. xmain文件:3 ]- Y; U; J+ [$ u1 f S
interrupt void interrupt4(void) # W: _! H; s/ \' ?# S N# f4 C
{2 |& d( ^; [$ N# U4 `
Uint32 sample;
# H* d3 S9 G+ M! Y, a$ v) R. ]5 R. p6 e$ b
sample = input_sample(); // read L + R samples from ADC$ Q. h8 ~% C# S8 {9 V( i
output_sample(sample); // write L + R samples to DAC 1 I a i; X9 E- v! I5 r" R
return;% z& P9 h/ w" U0 ?
}/ o, t( L7 m; D/ k! @
) l% n+ p! H |, V }5 d$ Z7 iint main( void )7 T- j) d. N7 w0 T/ W. \- y& l
{0 u$ Y6 H! b" I, `: d
# }( _ q' i! f& H' _' [
/* Initialize BSL */
4 V; q6 D [: s$ d) N' ~5 ]. M EVMC6747_init( );9 G6 R" C, {3 O B
/* Call evmc6747_intr function */" G( A$ ?/ `' O B* o6 ~' K; v
aic3106_init( );. \4 p6 m& y% }8 g3 s; i
while(1);- P! F9 b+ r1 t/ f l: v) V
}
3 r5 l; `2 B1 B' c2 o- U7 _
! P; N6 ?& i+ p$ L
6 A; Z8 D- ^3 U f v( r! r. P3 A; baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 m, c; U; }, g I# ~; m9 Z/* Initialize MCASP1 */
9 P$ D2 J, t) O( P k7 R/ P mcasp = &MCASP_MODULE_1;
( ^8 |, K. C2 T) I0 X mcasp->regs->GBLCTL = 0; // Reset5 [ z" [6 j: i" a/ Z/ l+ \! P5 I
mcasp->regs->RGBLCTL = 0; // Reset RX
5 T9 l# \- z# P/ B7 k mcasp->regs->XGBLCTL = 0; // Reset TX- D5 x. P' T5 K$ Y! c
mcasp->regs->PWRDEMU = 1; // Free-running8 I, ]0 e! V* {5 o- G
// configure McASP0 receive registers
! _; X& j% @. F( I) |# m mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 W3 N1 a) {" J, B! R
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ a3 e# b, G1 i
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word [- t6 h2 D& O {
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ U5 Z5 [% s3 P' \: o, I6 y% D
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 Y+ }( m- X3 }$ ^5 @, \
mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ F) g- g+ D: v" |
mcasp->regs->RINTCTL = 0x00000000; // Not used6 P! Y' Y9 g" l! b' b) g
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- _4 P* a/ @3 a$ h; ?' H( t/ K
, H* v2 {9 P$ w, | mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ m, N3 s& C5 W3 e [ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus X, [, j& i4 o; ]0 S2 E% q# w& X( R
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: B' V. T; y- f' u( @ `" t" Z: }
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) }- z- F& V; }. N3 f& O mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( O+ P2 C& C. [5 n6 D6 w/ p
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% g& C3 H, q' E3 u2 m mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ W5 ]$ U/ p/ ~0 Z* M3 i mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" T1 b) e3 F+ T O! [8 L5 [1 r! K$ k/ O' {" E, A5 d+ C
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN7 U3 y5 F" q0 C& t2 Z- j$ W( L
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT2 S/ Z- x! o1 O/ j, I
mcasp->regs->PFUNC = 0; // All MCASPs
- Z* l) L$ v, ~" p mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 n5 V$ o" S+ F/ |
5 F* W3 ?* K; O3 ]/ |+ R- k mcasp->regs->DITCTL = 0x00000000; // Not used
3 P8 y8 h6 A/ ^ e5 S* t mcasp->regs->DLBCTL = 0x00000000; // Not used
9 |" Z0 l1 @* E5 D! @( _ mcasp->regs->AMUTE = 0x00000000; // Not used/ X, N- _) q" A( K8 S
. L: d' |5 n/ }: V; N, w
/* Starting sections of the McASP*/& O* m+ I! M* @, r$ J6 n7 f" v9 g
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
N' R* i! S- N) h. ~0 E4 K& E) L7 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# [, P" U8 G7 q: n- r mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 _6 ^6 T* Q* i% Y2 B, o- r& j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" ~, q3 _; B4 {) |- p
* u+ W' ?. n# P% i2 O& ]$ {
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( q# ^6 L1 H* T6 O9 D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# G5 D. S3 n: G9 `
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , H9 k# }* D6 a. d) Y7 w. ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON ); m2 z `0 q4 t
5 c" G+ g- W% R7 T( g( \
mcasp->regs->XSTAT = 0x0000ffff; 0 b0 y0 [4 s7 N, P! I
mcasp->regs->RSTAT = 0x0000ffff;
) y2 s: a- R7 @. k7 B3 `9 e' B; E2 w& A$ k0 s; ]2 `5 K: n
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" S. l5 x" A) T0 b4 c! ^. I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 \# F7 }1 j8 `, @# L' v mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 E7 D6 I5 H+ k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ k! U! A# J3 m/ [
) T0 V- ` d; C ]7 X /* Write a 0, so that no underrun occurs after releasing the state machine */2 b3 m4 X9 Q( v* n- ^0 W* p
mcasp->regs->XBUF5 = 0;' K9 Z3 E- @# z+ B5 i/ ~" Y
mcasp->regs->RBUF0 = 0;$ U! ?0 |/ o0 q' f: U8 O
+ L% e0 H! d) o3 ]/ a$ d+ V mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 B; ^7 ]4 [# ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. p, l3 `' F( s8 K mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 N3 N8 u I8 f. o) P8 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* p: A1 ?. c6 m3 N4 w" v) B! B9 W% @4 I
8 [/ |! n8 W( o- S
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 [' h' d7 ]/ D5 J+ @2 U9 J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# t/ ^ U; N; z) W0 U mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " t1 ~* b# W2 l! c2 f. b5 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" p1 K4 d! w2 q g7 Z$ @1 P5 Z$ n0 h+ T
CSR = 0x0000;
% e9 ?( j* x$ \- a INTC_INTMUX1 = 0x3d;
' O- {3 j4 [8 J ISTP = (unsigned int)vectors;; f1 b8 f3 u1 w2 e
ICR = 0xFFF0;
# X4 O3 g+ X- S8 g IER |= 0x12;
1 A+ w% p" b; D! { CSR |= 0x01;
+ t6 }. K7 z* V+ D+ t( l! T: m
. Z7 J% W+ q4 ]; d/ _! x6 X0 p3 q; ^2 {' ?2 b! f: u
& f. S# _/ c3 }* f9 G0 k G还有就是两个输入输出函数:
2 u, I% R# I2 { w* Z8 n1 `2 kvoid output_sample(Int32 out_data)! t5 }9 ^0 i. |+ H- W% p* w+ J4 I
{
1 B! f9 j& @# P+ L: L4 t AIC31_data.uint = out_data; ( Q" o! }. {) a# Z0 _
MCASP1_XBUF5_32BIT = AIC31_data.uint;
( S7 ^% @4 L; O/ p6 e, _/ ^5 G# ]}
1 {. R$ t# ]+ b' J' l% ]( d* {7 c5 |$ P5 b* S8 Z
Int32 input_sample(void)
! ]. v, q8 V% Q, n4 x3 y# ^{
. u6 {2 T- r9 \, h) O3 W" s AIC31_data.uint = MCASP1_RBUF0_32BIT;$ V8 p g2 w: ]7 V' ~. c
return (AIC31_data.uint);8 l# q& m; h; v2 ]* o1 S0 Y) w
}3 w, W% T: G9 X2 D% R! a
Q2 A3 l3 U; i! J' j
|
|