|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' u! g! n) i8 w8 @6 m5 kmain文件:+ B6 s3 k9 X0 ^2 d4 v2 e4 ~8 C7 S3 l
interrupt void interrupt4(void)
, i7 O" a, Y. t2 j: m{0 v% O4 {! ^- n1 H6 N9 v
Uint32 sample;
" W/ Y& e( m9 A/ l* }1 g. F% h1 F/ c2 l1 K5 v+ A
sample = input_sample(); // read L + R samples from ADC
: }7 H L* d" P" ^( _ output_sample(sample); // write L + R samples to DAC . D& x( ?6 q) N3 [' [+ ^* _3 }7 R
return;8 s6 [$ j; R, p/ z: ]$ `
}
' G1 H+ X6 ~* B" r b: E% R
$ q- j5 H3 n6 |1 ?int main( void )$ F$ ^, m1 Q, d
{
) T1 J. o0 q Z _/ [( I& z1 a6 d" y4 j7 `
/* Initialize BSL */
: B, @' n8 M M$ G EVMC6747_init( );
" _3 c7 h9 I) }/ b4 o7 e1 W& L1 e- Q /* Call evmc6747_intr function */
/ f% F. U- X1 s4 G. O9 j# Y aic3106_init( );& `& h# x! m* k" ]& V
while(1);, i) X) D) b$ n2 c! E
}
% c# g& Z4 n) G, h4 U7 ~3 {+ C& E2 e$ _" |" J' m0 h7 K; X0 Z5 X7 D+ @* h$ O
' X8 Y$ u6 l( m% C+ L2 ~# [
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" _( k6 O& s1 Q/* Initialize MCASP1 */
4 o0 o" k8 }; J6 |. { mcasp = &MCASP_MODULE_1;
2 j+ D1 w3 y" {: M0 d1 \4 G mcasp->regs->GBLCTL = 0; // Reset
! q2 h$ y" v# h* c1 X! A1 i mcasp->regs->RGBLCTL = 0; // Reset RX4 Z! h$ B: A* O* k- j
mcasp->regs->XGBLCTL = 0; // Reset TX
6 a7 a( ]0 Z; f/ @ mcasp->regs->PWRDEMU = 1; // Free-running8 l0 D3 X. c9 V, q( k5 V8 s h
// configure McASP0 receive registers
& o! K- t' B: w, r0 _; Z9 ] mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; I/ X& |/ c1 p1 E, B& K+ ^
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( X: b4 B3 ]" u3 C mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( e3 a9 _: V7 G% g: x mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) U6 t7 L9 ]1 K a4 P6 E8 l! [
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 Z4 f( Y( g" c X* a- W mcasp->regs->RTDM = 0x00000003; // Slots 0,19 T6 {7 r% e2 {/ |5 D
mcasp->regs->RINTCTL = 0x00000000; // Not used
8 ~8 b& P9 T) f7 X3 d/ r# a; i mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ~9 R1 B' V& h% U2 r0 X2 X6 f# }7 q1 \% ?2 z0 }
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ b' j4 m7 i2 a3 {& _1 }( a1 U. Z1 m
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 s8 C9 P1 a1 C
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 @1 g$ C/ R" S* I! ^
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ [) g) V$ U4 y( |4 u9 e' M/ z5 q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; T) _0 q9 c6 ]! b+ ~3 H! F: b, g' A mcasp->regs->XTDM = 0x00000003; // Slots 0,13 s4 {% L$ e' P X* m
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% Q" b* ^0 S" L
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 v- F) c( c. a0 G V
9 ^+ G, C- S1 }- H/ i$ _ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 h7 L9 |3 G% o) l
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& u& s% j4 c6 F9 e
mcasp->regs->PFUNC = 0; // All MCASPs6 s# V* x t9 w+ s5 G- X. l3 T x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 |/ U* |5 V4 g0 l; B g) V
" F6 o( L) O% x7 V9 s9 u
mcasp->regs->DITCTL = 0x00000000; // Not used
% D6 q% z Z M0 ^! i* e: C( @ mcasp->regs->DLBCTL = 0x00000000; // Not used% [8 D2 @/ H) T
mcasp->regs->AMUTE = 0x00000000; // Not used7 {- r/ m; z) ~! `: \# h4 `) T
6 T+ d% j4 W2 F7 W& T
/* Starting sections of the McASP*/& ?3 U) U- F8 Y0 ]. r
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 Y3 ^- j9 ]/ F4 O( n3 Q- {6 f9 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 c8 q5 g8 A* \5 D mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; m3 A: Y/ G8 T, _6 }7 d! v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! E$ [+ m; v% z% @" L& o8 z
) [' I( r+ C8 H1 V: `9 K mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% J$ b7 q ^; z* Y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* d& E4 @6 `6 Z1 {& z: @
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; } t: ]# A" }) w$ J' E7 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ S R4 p# A3 k& S* ~4 T' n% {, t* n& {- C
mcasp->regs->XSTAT = 0x0000ffff;
; w; q+ ]8 ~0 t$ E0 E1 Y c( Y v mcasp->regs->RSTAT = 0x0000ffff; % d( Q' F' S7 r) I0 K! h" D
/ D0 c0 Q9 t+ `
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- C+ {4 f: a) r. B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 p7 \7 r0 d0 l
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# G; m, V7 R) E" y+ P7 S6 s) W9 Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. L8 C! I1 z; ~; `9 B- g2 b
0 D# p5 ]0 ? Y7 ^/ [" F2 n/ Y /* Write a 0, so that no underrun occurs after releasing the state machine */
1 L8 M& j/ t2 W2 N mcasp->regs->XBUF5 = 0;/ d) X4 R( K. w' ?' l
mcasp->regs->RBUF0 = 0;7 @) u0 ~# Q# @- _* t0 D
0 `& T5 p# J* S7 {5 [
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! ^1 C8 I- |" ^" C$ U1 i I3 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" w; W' z7 c5 o9 h! w2 J* }
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 N- B% ]& O" c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ A/ a$ C3 J- G- X7 G. x6 B, @ X0 ?; F& j/ r6 m
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 d2 F( [/ D& X* z9 t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 V' _: ?9 \- h7 \; { mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 J! q6 }, Z6 A/ ]9 W$ R' |7 _/ o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. r! z5 B3 j% }
! P; R% m( ]0 r, b4 j2 x CSR = 0x0000;
& R. |; e0 y0 m h INTC_INTMUX1 = 0x3d;
, Q X2 d0 T& P/ ]- u! x, F9 y ISTP = (unsigned int)vectors;
$ z* |0 ^& R6 k2 N ICR = 0xFFF0; 3 f/ B0 a( v$ C& G! B5 V. C l
IER |= 0x12;
1 h3 w5 w+ O1 O! m, o9 J CSR |= 0x01; 3 e* |- B: g* s7 w
8 a# R) f6 ~% k; J
; o W- g( D$ Z9 r& Z7 O3 A* m
: g* b- T1 y) ?5 c. C; ]* B
还有就是两个输入输出函数:
$ _9 C2 p# e% J# Q5 R; i9 Ovoid output_sample(Int32 out_data)
9 g9 I u# g1 d2 m( w* F{
- H- U& [: D; Y' E6 v) B AIC31_data.uint = out_data; ! n* O3 a# N3 e2 a2 n9 Q }
MCASP1_XBUF5_32BIT = AIC31_data.uint;! ]* t- s2 C/ q( y
}; t/ g) F5 G! v4 h" C
: L: t$ ?3 t0 A. k6 h
Int32 input_sample(void) N+ e1 H/ S; C$ P
{ * R3 k, @! }) N& w$ A) k: a
AIC31_data.uint = MCASP1_RBUF0_32BIT;
! U1 M( H( ~' v0 h, u% y# [& i: s return (AIC31_data.uint);$ D1 x! X4 I2 x$ Q
}
& `1 k8 R" ~1 _, e4 ]9 k+ j# G9 |( u
|
|