|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 t/ i. D& W( [ z+ c( Y* [
main文件:
' s9 T2 V% p& n3 p, R' Uinterrupt void interrupt4(void)
2 k2 v1 F, U. d& d{
' R. T9 M! F) _( j1 f+ Y- I0 g3 ~# J Uint32 sample;
0 g% k) D8 C! b$ G3 G0 E0 y0 }# c+ q" L& _9 B5 \' N
sample = input_sample(); // read L + R samples from ADC
9 m: H+ _& x- Z& t" u output_sample(sample); // write L + R samples to DAC . q/ Y* z+ _$ S. t/ |9 U- O1 c
return;! a% S# }" X9 [
}! K; y' ^, ]9 E% l1 ?
$ N. U. _1 z! M+ j
int main( void )
! g* s# O) O# @ ^- t{
. @9 R+ E* s4 M0 W9 {
$ U: f' t) j' b, T7 o3 O /* Initialize BSL */* G: A" E% Q+ {% H( u
EVMC6747_init( );
3 l2 R6 U8 ]" ?: K5 O0 r# n /* Call evmc6747_intr function */
+ w& {1 a! \$ t5 L% E' S1 I; U aic3106_init( );4 l$ q% f, x. u, F" I
while(1);# x. p! g: V& ?8 M. y
}2 [5 o G# O7 m3 n. G& n- U
, y7 |' H& K9 u7 Y! G4 _: w3 `
/ |. C! [: M5 z, ^+ n& B w! y& Uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( {. W2 \. g/ Q/ d7 y- C; S
/* Initialize MCASP1 */
0 U7 L3 n; [% b7 E$ Z& n mcasp = &MCASP_MODULE_1;, u2 }$ r" E) a$ @6 n& @# P
mcasp->regs->GBLCTL = 0; // Reset7 V/ a2 Z& l- F c. [; n( U6 g* P
mcasp->regs->RGBLCTL = 0; // Reset RX5 _0 I) f2 @! d
mcasp->regs->XGBLCTL = 0; // Reset TX% {: H q1 S" e2 G3 v9 Z
mcasp->regs->PWRDEMU = 1; // Free-running
+ W0 s' R6 @3 J, Y" D/ i$ F // configure McASP0 receive registers5 V" I$ d& W: h! b8 y% s
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
. O g. w b/ X. \0 Q' Z4 }, ? mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. W5 w' e0 Q- T4 Y# z- ~! G: A
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 Z; C* ] ?0 v. e! ~" G mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! k6 Z" e, S6 R* P" G7 G8 y8 e
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 U. S0 A* g9 _# M& l+ ]* I3 W
mcasp->regs->RTDM = 0x00000003; // Slots 0,11 C q. x8 U9 _7 U! b8 I
mcasp->regs->RINTCTL = 0x00000000; // Not used& R f& x& f# X$ c* Q. F* g3 I
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 w. A0 W8 F1 C" C3 c. b
?$ w& Q8 E" b2 k
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: w7 {! }$ r4 b' H# S
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 V% t8 v6 ^5 V$ f
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 t+ i+ _! B8 o( h5 @/ {
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! n; N9 ]5 h. ~ |) N. t4 V% A
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% j& m) }' V/ I mcasp->regs->XTDM = 0x00000003; // Slots 0,1- g& y; ?$ i: V- M7 a3 a8 s; T
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# Z& S; e3 P& _
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 L4 z3 g2 n) M# |9 ^, c
* C8 s, F4 D) H( _/ `" |5 _ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; ]9 E) I$ M. F0 _3 m
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
+ ]2 A8 s- i, Y! S0 D. X& o3 d$ D mcasp->regs->PFUNC = 0; // All MCASPs
@- l5 K" ]6 i mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 F2 e2 v& _* o$ N' F
4 e0 s4 ~& q) V4 O9 f8 } mcasp->regs->DITCTL = 0x00000000; // Not used
8 [0 I" V" I3 V mcasp->regs->DLBCTL = 0x00000000; // Not used& {# |) Y, N, i q6 _
mcasp->regs->AMUTE = 0x00000000; // Not used
6 `* W; i6 R5 Z. o$ G. Z" h3 T* H4 \
/* Starting sections of the McASP*// ~3 q) s l! _! _, O z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- d9 _/ y4 q, x/ @; t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! d- A v# i" v4 @# w: y( j mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 w$ J$ `0 E- v1 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, B5 Q; d3 M7 O3 F% w
. s! u$ E3 ]( S9 J2 r mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 e; ]# ^" n2 D& o; S. e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% C ]) q4 {( h# I/ l; N$ Z- e mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , N$ \- ]. `/ J8 f+ h) A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 F6 H( r* u" @$ H) {) ^% G% Z
* w: W/ U! G# Y7 C. l- r' z7 c
mcasp->regs->XSTAT = 0x0000ffff;
0 z* w6 z4 f$ W! @" h mcasp->regs->RSTAT = 0x0000ffff;
- x1 E$ z$ O% ^) f& O, @+ e1 a8 D3 R
0 Y% F# r+ u* j% D7 h) `3 ?& | mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- j- F: A6 I2 b! J8 [, p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' A8 w8 h8 v& F( k Y9 Y5 h
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! _4 P# W3 a7 _1 d+ k M7 |( P K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% w/ M8 J! W- j5 v. V2 Y1 Z U
) z8 f* I; q$ e* N /* Write a 0, so that no underrun occurs after releasing the state machine */" w3 i& l0 u/ H/ v; g3 ~1 }
mcasp->regs->XBUF5 = 0;5 C3 U9 R6 g0 d6 b
mcasp->regs->RBUF0 = 0;
1 f. Z9 I6 s J5 p5 O
@4 E2 U+ h+ ^0 P mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
O1 |, ?: L9 B) c( K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ s- q" E2 g. r; I6 F5 g: i
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, C! Q; }" J ^* k* D% @7 E- s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ ]* z9 z$ T2 ^7 F- ^: y* a8 N' P( y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ; v* q* R. y* a2 e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 _) g w9 R* t" A
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; Z' R7 k" a- a) p+ H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ H1 H# _* ^& \! d8 p
0 F. t' r0 P" M! m; Z+ Z' H CSR = 0x0000;
$ i, r, c" U6 U2 m) w" ?! x; p INTC_INTMUX1 = 0x3d;
2 \* w5 j: b6 Y ISTP = (unsigned int)vectors;
5 o- X( B, U( l& d ICR = 0xFFF0; s8 P* q% b1 B- C
IER |= 0x12;
2 d: \ m3 i+ J" _% s7 Q CSR |= 0x01; - |8 |& Y/ g/ Z3 I3 c
( d! E H+ a& T! ?! l/ p8 m
- v8 k. \7 B m% n- l% i( k+ b5 p3 Z# G' F9 K! a
还有就是两个输入输出函数:
4 y- y8 j* B' b1 o2 lvoid output_sample(Int32 out_data)1 c# k$ x# t6 Y/ B. x- l; c
{/ n& I1 H0 T# r0 U; f# \
AIC31_data.uint = out_data;
( }# d# n G6 ]$ N" p) \& ? MCASP1_XBUF5_32BIT = AIC31_data.uint;1 u, }; X( u% b; J, H
}
+ o A5 @! S W+ U$ j
8 M8 m1 Y2 y$ G% R2 J2 MInt32 input_sample(void). A6 H; p, w* j/ c, m+ X; y2 k
{
: e+ C6 ~* ]) _! V7 ^. v AIC31_data.uint = MCASP1_RBUF0_32BIT;6 L7 ^& W( @+ T# [# o0 x
return (AIC31_data.uint);
8 `9 G8 P# w5 I& a}
& z8 F& [0 R" m* f# I5 F. b3 Z! m4 m3 m2 g' K3 h, x6 s1 a3 z, e
|
|