|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' N0 T j0 S5 `. Q1 ~8 d
main文件:& h- Z- @8 K7 t( D- x$ s- \
interrupt void interrupt4(void) * c }2 J. _- ]4 t
{
7 a# r9 |+ k% T! u" _. O Uint32 sample;% [& @9 ^; T2 C
: i+ T2 e- v0 p e0 P8 v+ {9 ~ sample = input_sample(); // read L + R samples from ADC
+ u1 T: d5 f/ v! S1 F% _ output_sample(sample); // write L + R samples to DAC " T* p- R; S/ c, S5 ~4 ^
return;& B1 q! c* i8 k6 k7 h
}0 i& R5 p; d- k0 X2 h
/ | Y7 ?6 _: z! y8 P/ M
int main( void )
1 T( v( W5 k8 p0 F# {6 n5 l. L4 u{& R* G- L( E- g- f; Z& a; B- S x
: h6 |1 U: B; ?5 A% y% k! c /* Initialize BSL */
7 r4 T. Z* Z8 D2 ?% @6 u EVMC6747_init( );
5 P" |' \5 a* s' J y& k/ j /* Call evmc6747_intr function */# k1 P6 O. y2 c3 N3 s
aic3106_init( );
* h$ f) | [9 f C: w( u4 B5 J+ m$ B6 m while(1);
4 I$ B: p, ~0 b# ^* L}
+ r, S* h( E- e
. b: C4 ]( s( D
% G9 B) k6 x) [. W& P; s! ?. Uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* [9 E6 R r; X# `, i2 C/* Initialize MCASP1 */4 G9 s4 C8 I$ g7 e2 T% x; w
mcasp = &MCASP_MODULE_1;# q, }" K: ], c* A3 c
mcasp->regs->GBLCTL = 0; // Reset
2 b; H0 v* ^$ t+ r% B5 w. m mcasp->regs->RGBLCTL = 0; // Reset RX+ w" c0 L, \: \0 j# ]# l( B. q
mcasp->regs->XGBLCTL = 0; // Reset TX" j f$ i7 p! k% ^7 ]$ J
mcasp->regs->PWRDEMU = 1; // Free-running7 [3 f7 p w6 Y9 M# v
// configure McASP0 receive registers* ~( W. T1 m7 Q% N, n/ J# f
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used2 U( e( {; N* B. G- n
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ ]0 ^/ x* k, A* W$ E: @
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ a p _2 ~, u+ D S2 S0 I
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( }. U- F$ g* J& O0 K& ^ z
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ ~1 {/ n2 j2 J mcasp->regs->RTDM = 0x00000003; // Slots 0,1: D& F" }) n0 @
mcasp->regs->RINTCTL = 0x00000000; // Not used; L5 O3 T/ A" [& a* @, e' j
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; w/ k( f. B1 ]! v
! U. P, ] g# Q% C, }/ k mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 x5 l1 z. w8 P! m mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ B* `! ]4 ^, c mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 A4 w, |$ \0 d
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 H$ c% x6 J y
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
# c3 r0 \) ~' P$ p$ c3 s) e1 X4 `' }" d8 F: I mcasp->regs->XTDM = 0x00000003; // Slots 0,19 e# ^$ b& u+ Y" S6 r( U: }; Y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ K, W8 Z' w1 J% x5 p) a mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 s/ {' X, K$ `
9 b4 m- d% l$ D) | mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
' A+ j) U' b3 [ k' N mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT, ^& o& R/ Q% j& m/ b
mcasp->regs->PFUNC = 0; // All MCASPs, D. j" e) M& }* s! w6 U1 j/ n" {
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) E: Z" K% U% }6 e" N& P
* S% E$ t* I# Y0 U7 Z' N mcasp->regs->DITCTL = 0x00000000; // Not used
/ i; t" v/ h: I1 o& m+ ^: T+ Q mcasp->regs->DLBCTL = 0x00000000; // Not used
3 w5 H0 A4 _3 D0 n% [$ M mcasp->regs->AMUTE = 0x00000000; // Not used
8 }8 ^( S5 { q+ n
9 {+ D8 G* T* V/* Starting sections of the McASP*/2 g% I+ F7 \: M2 E" v5 R8 Z8 Y
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * E& A+ S/ V _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ( F+ D& |0 y# J( t; {
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- R( Q `3 a) s" ^+ m2 |0 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 f& ?- k& p& `6 p# A, d
. e" |- K2 }: Z3 k/ [* p/ t1 I: B mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# @; H2 Q! }1 p$ \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); m( e1 h& F0 |# I" j( k
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! {! o* l: R* q' n4 I* h2 h( f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( t; T/ J/ z9 p
" R* i9 r0 ^/ x- u mcasp->regs->XSTAT = 0x0000ffff;
% Q" H3 u- k; b% e' }9 W( m% o1 ? mcasp->regs->RSTAT = 0x0000ffff; 8 i6 G. @ E# T5 W
; c# f% ?3 r. y' i* t* u mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 {7 x6 i S |7 n$ P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* C; F" M2 ?5 L- R0 ?* g; |! R3 o mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 ?. G& Q2 t1 Z4 Z) F5 R4 H6 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: S( s/ l |" A w
* Y. d8 B& E1 e/ j* F
/* Write a 0, so that no underrun occurs after releasing the state machine */# G" n# N# O/ R2 |
mcasp->regs->XBUF5 = 0;& |" u9 T! Q( P, c* J) a& l9 n f1 [2 V
mcasp->regs->RBUF0 = 0;
8 ]( W: z2 ~! k: D4 T2 c+ U$ e7 K& Z, {2 k- [+ B
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : g! l0 S$ h9 _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 X$ R, k# f: p+ a. M# O$ O1 K
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 e& f& k/ j8 d! @, T3 B2 o/ g$ Z9 |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 B0 e @* S9 R4 t
/ y* k) l- U6 } ~
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ V( b# m4 |5 a* v. s6 X! | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" m0 n7 u. s: |* b( K mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' E, h& p4 f3 L' o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, l1 m& {: n I* j3 r; g9 N
/ h2 {8 [. ?& f8 r$ v7 `# r) s CSR = 0x0000;4 I. M% B% N; Y- I( N
INTC_INTMUX1 = 0x3d;
5 V I2 S7 A1 T, V: |" q ISTP = (unsigned int)vectors;$ `* @& M: y6 `" c3 H( N
ICR = 0xFFF0; 5 B. W- Q7 N0 ]" h$ |
IER |= 0x12; # s! x. |$ I: K y+ [3 W; k
CSR |= 0x01; 6 U: Y8 T3 u7 g6 ~ S
' ~7 s, L! W, H5 |) P; x5 `7 S) ~1 H/ {. R# K5 n: |8 y, C* y- Q
5 O6 C/ h) E4 T6 K$ y$ ]+ T还有就是两个输入输出函数:
; Z7 x8 J; i2 @0 r* pvoid output_sample(Int32 out_data)$ I$ u. c9 Z1 I* a# w
{% o/ C* \- u$ w, d _
AIC31_data.uint = out_data;
: I% ?; c, d( c$ s0 n MCASP1_XBUF5_32BIT = AIC31_data.uint; I3 c) \- q% [7 T, K
}
, v5 R- e$ D8 K3 ]( o
; H9 ? S! o! Q. kInt32 input_sample(void)* c' _. r* @0 S
{
$ s6 c" U; R9 |) z AIC31_data.uint = MCASP1_RBUF0_32BIT;' e$ W) d. ]- s: i! [
return (AIC31_data.uint);
5 g* ]; { o4 A$ u& I$ `}6 P! b) B$ c: L9 |
2 F, t: C9 I3 H b' d* V |
|