|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' S; L# M6 S& g" s* H1 H1 Amain文件: U. i: U2 i) R: a) q" S9 g' G: d
interrupt void interrupt4(void)
x' P5 Q P1 m{% G$ D7 Q1 ~1 ~% s
Uint32 sample; |/ h L8 r( _8 S# i' q9 d" j' H
4 c1 O1 T) u" J. |' K0 K o3 t8 o sample = input_sample(); // read L + R samples from ADC8 p+ F, ^& T' `) `
output_sample(sample); // write L + R samples to DAC
+ J2 P9 }7 m v* w/ i3 ` return;
, }; @/ M: A- R2 m* a+ B}
7 [2 B* D$ d& N) H: u0 R/ s" t! l; i6 U1 @& X: S; t! F/ I
int main( void )
$ x) t3 w! f8 I: {; v{( [3 c1 y @* _8 P
, R% u9 ]7 f n- }5 a& o9 {1 d
/* Initialize BSL */6 |) U& S) R/ Z0 L( O
EVMC6747_init( );+ n% J& Q( R8 f+ H/ Z
/* Call evmc6747_intr function */
5 V/ C; E. ^/ \- d aic3106_init( );8 t0 B' Y- h2 j3 k7 q$ E9 r4 v
while(1);
% Q0 N* _+ d4 _' x2 l9 w}# Z# K |3 o( g& v
2 F, v$ O4 b# w
2 P( r! c) x |& g( ^& Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 [4 E, L4 L' I8 M' B% p
/* Initialize MCASP1 */
; B. n, V* i7 ?( t. t* f9 [' [ mcasp = &MCASP_MODULE_1;
$ g. \- p7 M; h% l. c mcasp->regs->GBLCTL = 0; // Reset
- j8 M& D& V3 z4 z: p: ? mcasp->regs->RGBLCTL = 0; // Reset RX
" h) ]/ J. A( ?$ C% p$ b mcasp->regs->XGBLCTL = 0; // Reset TX
s5 \8 j- p1 C) d9 q mcasp->regs->PWRDEMU = 1; // Free-running
7 _: I, \7 V' D1 Y# q" y // configure McASP0 receive registers& e4 h& v( t/ c* k! F
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used0 _# s3 Q& @0 u
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 X& T+ J( d/ K$ G( V
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 R! k7 F: }2 J; |3 H( C2 ]! s mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ H5 Y: s8 A0 N9 E; L; P! ?0 E
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
/ L. P1 y1 t4 n7 d3 q { mcasp->regs->RTDM = 0x00000003; // Slots 0,1: J0 \9 \$ N$ Y
mcasp->regs->RINTCTL = 0x00000000; // Not used
2 M5 x, m9 _% O8 ]( ] mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 u$ `+ N3 ?7 E; _- U$ }
* G8 V" G5 ]) w
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& E; k7 p# }" ~1 K7 A/ a mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ B% F( H% m/ P. p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ o$ b, s2 e9 ^# P$ u) K0 I# U }
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% ]& I! e- a+ O* {7 R: ?8 c mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& D9 q5 q# N, o% P8 U/ q mcasp->regs->XTDM = 0x00000003; // Slots 0,1; U) J. B1 W& u
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% t& Q2 C1 m/ |, f+ B mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 ~) ] i. [3 L; n
! T4 i$ X2 @/ \ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 H9 G3 t8 {% `: R
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT+ o$ P6 f6 C" H# P
mcasp->regs->PFUNC = 0; // All MCASPs
: W: {* c6 \- O( |% `3 d3 p mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 H" e& m& L8 d! z7 R3 Y- y& w4 r+ L, u
mcasp->regs->DITCTL = 0x00000000; // Not used
# L# }& f" H1 r7 j" ^ mcasp->regs->DLBCTL = 0x00000000; // Not used
% @ M) P, r0 d' F1 Q mcasp->regs->AMUTE = 0x00000000; // Not used6 H7 p* }+ O; ~ b4 u
( `1 J8 u) z( E: e7 y
/* Starting sections of the McASP*/
6 S" b* h: I A" S6 A mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + z1 b- b9 ~5 I* Q& }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
% v1 _ P4 r' j) G) {& A0 q mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 K3 K3 K. y+ X2 R6 b2 P' q( d$ b B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- Y* c$ Y9 R9 U
2 A I6 D' Z; u# o* `9 ~
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 k: O, s* n6 P+ B* A$ A' q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; s. ^! t k5 F% o$ x6 f
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + n* F+ Z/ y( N. T Q8 {# n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: o" D+ |% b1 ?( {/ J: V( U
' Q ]( \: K9 n: ^! M mcasp->regs->XSTAT = 0x0000ffff; % A0 F9 b% Z5 l0 m; i- b8 Z- U
mcasp->regs->RSTAT = 0x0000ffff; : |! o2 R g& Q. \9 f: J. a
7 _& c; o* w: c6 M9 u+ n3 k' r1 {
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ A! X. V' `& x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ z5 m9 E9 x2 g- n: u( l( f! J
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 A% i! [/ D _" Q- H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( I" ?- Y7 @0 \& U) y6 h- b% I
$ \8 \% y- i9 V! I$ w. q /* Write a 0, so that no underrun occurs after releasing the state machine */: D5 q' h7 f9 y
mcasp->regs->XBUF5 = 0;
# V3 p. Z; \( l! Z& G# x$ H mcasp->regs->RBUF0 = 0;) |. \6 i2 [! W/ D
1 ^- g9 J9 [7 N
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : Y0 G# \, D! o1 |6 x+ |( Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 Y# b: q5 v+ U; y% H G. t$ h
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# M9 P' u5 J$ h- D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! }3 F1 s) o/ F0 b4 ~
* b, p1 g& A9 n& Q6 C/ ?8 o: K5 _7 p: H- u mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 G' K- S+ `, @0 T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 C) |& n, V' K% ~: n
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # H7 q, F( m1 A0 i6 W! A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 }! s1 O1 W* m3 o) j9 p: _# x
* g" |5 i( H! v3 l e CSR = 0x0000;
9 K& X" v% C& d. C5 ~. S/ ? INTC_INTMUX1 = 0x3d;8 Y/ }: E; A3 R
ISTP = (unsigned int)vectors;8 }( k: I6 @6 p( ^
ICR = 0xFFF0; ; B! L N. w' a( S9 w9 |2 X
IER |= 0x12;
; s$ x1 L* [1 W% Q% }$ R; X3 m CSR |= 0x01; ' d4 W$ w3 A1 K' S, x3 I
# z5 b# o3 Y* d. i/ `
A; G' Y+ q8 A- G. e+ E7 g |
- X; R ]+ ~% y' t% j. j0 ^3 e还有就是两个输入输出函数:0 k" \7 L: E/ a. j0 I+ B
void output_sample(Int32 out_data)+ G3 j' a/ \% {; d" h8 l9 G8 z' t
{: m- v w' g5 u4 Z& X6 Y, R0 j
AIC31_data.uint = out_data;
6 l8 d* J g3 }9 ^" D. } MCASP1_XBUF5_32BIT = AIC31_data.uint;
& C( F8 f. S S. [9 U}
1 _/ G' b: G9 L1 K" C% K) Z! `' n0 q) i1 g# v! `* r' [$ m8 ^
Int32 input_sample(void)$ K5 `. L& E' d. i3 O" b0 J1 r
{
; Y/ T" r) F$ f1 k6 d4 M+ n( O7 U AIC31_data.uint = MCASP1_RBUF0_32BIT;7 x, b: h0 @- s- u/ w" R! w
return (AIC31_data.uint);* F3 f( F8 G' c4 L' \
}
3 G! B2 y) `* R8 t- r. ?! |5 Y) | R, q1 X( r, n
|
|