|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* H# {: [* X& w8 B/ B" K4 ]5 E1 rmain文件:6 W S6 A9 k/ V' C' _
interrupt void interrupt4(void)
$ ^( H0 H& U4 Z5 G0 Q6 T" _' @{; o+ ]2 M( m8 e) c2 A! \
Uint32 sample;3 [) v N7 j! E% H6 o. g2 G
+ o) G- a! Y. A/ G$ h4 f sample = input_sample(); // read L + R samples from ADC/ a3 ]2 q8 L* B+ x
output_sample(sample); // write L + R samples to DAC
3 Z( G1 H6 u) |3 W8 p return;
`4 p2 ?; q: w/ j}" z T0 J. p* g# X& ?- M
0 j( T, B+ X6 [% i; p$ [9 pint main( void )9 L2 ~6 n( O9 i- W" d/ Z
{. v9 x" z3 L5 N7 k* ^( v i
' v% M0 b# l/ K7 w /* Initialize BSL */
; @9 o. ~; e5 ` EVMC6747_init( );
) i' ]8 a; J# a% a. N. n /* Call evmc6747_intr function *// {* R3 Y' G9 T
aic3106_init( );
! i% Q! r) `& O" P9 @ while(1);
% ^( T4 I* s% D9 n4 K}
- b, w0 W# a( N' Z0 j% _) a% u4 C; P: ]9 ^' G6 {. p
7 C5 C' ?' D. e4 ~- xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* I* R: ~& s6 Y1 J2 W/* Initialize MCASP1 */' D7 A: A( C+ t5 Y& M' R/ s( D$ x0 o
mcasp = &MCASP_MODULE_1;
; S" Y6 G. k7 o e$ \# ^ mcasp->regs->GBLCTL = 0; // Reset
0 h+ z1 a" G* |0 V+ R O4 ^! q% ? mcasp->regs->RGBLCTL = 0; // Reset RX9 W: a% L9 _' L) Q
mcasp->regs->XGBLCTL = 0; // Reset TX& z- J) r8 |: K# B
mcasp->regs->PWRDEMU = 1; // Free-running
% n* h( x, E4 n2 F0 E1 K/ D // configure McASP0 receive registers
( i U; D; R* @# w mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used# P7 D* ^) u6 |, Q
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 h! n3 ~- v" s$ } mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 a5 s* P: O0 \6 r
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" b, X, I: Q h. M mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& \ o" p3 V$ i; q: o
mcasp->regs->RTDM = 0x00000003; // Slots 0,1& b; f; _# S% M: F5 B8 h
mcasp->regs->RINTCTL = 0x00000000; // Not used1 X1 N# w$ U& ?
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' ^( g h8 P: |6 M* L
& F, K* S# l* Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used! [& h" j6 z+ R& Z' G' H& A
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 y. N1 P1 O, ^5 w* E$ N mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& J+ b* U1 U( H
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- z# q( t/ _! C& m mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) W* t& Y' s7 [5 @: P, e; x: D. k: p
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
% N, d3 i9 `% T mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
0 O5 ]1 w9 w) ?& u8 `+ F3 N mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 |5 x. Y" K( V8 m6 H9 t; ]2 a& L7 Z! N
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ Z- a5 |' A' M& u* w' }+ {
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 g9 K5 x4 K% t$ s: a mcasp->regs->PFUNC = 0; // All MCASPs
: h* [- }$ s* ?" C6 W* s mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: Q5 o2 X9 D, @6 [
i8 h" G+ b% w- q' l mcasp->regs->DITCTL = 0x00000000; // Not used3 V* e; H9 ^" d. e5 g! T
mcasp->regs->DLBCTL = 0x00000000; // Not used2 o0 w' F A) u8 m3 K c, x
mcasp->regs->AMUTE = 0x00000000; // Not used
3 D! s4 |0 c+ Y1 L5 i' j, u, B; e: K- o1 ~
/* Starting sections of the McASP*/: v8 e1 Q% y5 b {9 c, p4 e% W
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . J: j) N& j" h1 [+ H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
+ Q5 T& S8 N6 b) W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# ~9 P8 C. N4 t' m9 M8 |- a+ h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. Q7 l9 u: O9 G" x
: J# I; |- B4 E0 R
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' `6 n; s4 d' \. ?0 t3 v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% o7 n9 G2 ~ W2 X8 ]& Y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 y: ]5 F; C! o' _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% l0 k5 V2 z$ l( P* [" G. L+ e/ Z+ u( b3 F$ m
mcasp->regs->XSTAT = 0x0000ffff; / d% p' `, {* F3 k* l! c4 X
mcasp->regs->RSTAT = 0x0000ffff; - a- }$ x, _: n$ N7 W N/ `
6 u' ^7 B( f* X. q4 p mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! |' W& ]% p5 A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 b1 k% N4 v+ o+ \% N
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * k9 d$ `9 x/ v8 u$ B7 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); F* x) i% R. S6 ^4 _
# v9 L3 W) ]0 z6 _5 L' @# ~ /* Write a 0, so that no underrun occurs after releasing the state machine */! b+ h1 K) H. |# ~- y
mcasp->regs->XBUF5 = 0;
4 }- \, T: {* k& I% ~ mcasp->regs->RBUF0 = 0;% @) U& A/ T! \; t T
$ I7 G; C7 h$ ^ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 b+ ?1 X$ s1 e( x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% Y" A6 R: w/ f7 A mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 X9 J# q) z" o0 C1 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" s9 G+ n. i1 [, ~3 x( e1 S" `8 D+ V+ K; N; q/ }" `
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 w; j8 \7 Q; b) r' j3 y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); i$ I0 z! G4 s; F2 H
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 ~& r) f5 a& J! z. u' \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, }! Y$ G! W' b$ a. y
# x# f+ Q5 ~8 Z9 |) K6 C9 s% U
CSR = 0x0000;3 T* W" G1 V1 f# g7 H$ Z* E( B
INTC_INTMUX1 = 0x3d;
6 S1 j. n! C5 T- G ISTP = (unsigned int)vectors;
! a: C6 z1 }2 d' M; S& I ICR = 0xFFF0; * J" F$ X$ R' Q0 [* o
IER |= 0x12; & c5 i7 Q2 `( p0 ^. s
CSR |= 0x01; $ h i J) S& A: e3 J8 ]" n" l# i
$ p, N( u. J* N+ N% f5 ^/ ]+ P( E( N: p e4 `. N2 Z9 k
, ^; C" m. m7 Y, |3 N还有就是两个输入输出函数:! `! W& U% O$ I3 K0 }4 I! D' `0 v
void output_sample(Int32 out_data)! h5 \. @! R1 P( P, r$ C6 \
{( p2 D" M7 G+ V) E
AIC31_data.uint = out_data;
* m |0 y/ g/ R3 x, k! F MCASP1_XBUF5_32BIT = AIC31_data.uint;& }( k: g1 g$ f- O, H
}" E, J& \: }) o; x: d. x
4 Z" m9 _; F: z8 H
Int32 input_sample(void): Z) U, y2 b! N# ` ^) u7 B* T
{
( ]5 _; |3 c+ u& z AIC31_data.uint = MCASP1_RBUF0_32BIT;% N; y) s$ l: V! b% s
return (AIC31_data.uint);
8 o. E" O7 R, M3 h}
$ I1 R f9 K3 s6 }$ r
A/ j8 Z) g3 E6 H9 x- N |
|