|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, h* J( E7 r; N$ n& W, W3 B, p8 Qmain文件:% F9 H) P$ [ C. l$ N/ y
interrupt void interrupt4(void)
/ z1 |% l* `5 U* a1 K{4 T ]; N, ~' O
Uint32 sample;
' k) S. B1 r3 h1 ^* w& g) f, d' A6 n0 t# Z/ z
sample = input_sample(); // read L + R samples from ADC( B4 Q/ I/ D0 v. B& K3 l5 F, {$ T3 s
output_sample(sample); // write L + R samples to DAC 2 b0 D2 o [% l, ^) ?( u T: K
return;
8 g- V2 R0 S# Q}0 E5 V0 y* O8 m$ E9 {- m# e2 r
/ y; N1 j# w% `& O; g7 o
int main( void )
( W. ?, |0 Y6 D{, Y3 {# @; s* [# \8 b+ w9 s
2 r# L) @$ H$ b& H
/* Initialize BSL */, C5 [) }& i' c4 I, _
EVMC6747_init( );7 Y. `5 ]2 m/ G1 x$ `" f
/* Call evmc6747_intr function */
) g& \4 ?! L$ S3 J* d! K8 [4 p2 j aic3106_init( );" V0 u9 s/ j) `; u: Z* k/ U
while(1);
- v, ^5 o. o& k$ m* M6 z}' J X( [) J! }) o5 u+ y1 W$ @
% A" e5 R4 j3 R: G
* v* K" m+ l3 |, D6 f9 R, Waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ X! P+ D' r5 b& W7 @! l/* Initialize MCASP1 */
. ^8 d- z! X" j. F. j- f mcasp = &MCASP_MODULE_1;! l( \, K x; ^ t c$ ~8 k
mcasp->regs->GBLCTL = 0; // Reset t' h; R1 s5 a
mcasp->regs->RGBLCTL = 0; // Reset RX
$ x$ R2 B2 y2 L1 s! R& V3 u6 l! H mcasp->regs->XGBLCTL = 0; // Reset TX
: C9 w& J+ e$ r* ^, }1 v mcasp->regs->PWRDEMU = 1; // Free-running9 E5 [" v: Z, n; X! f3 p, P
// configure McASP0 receive registers
' n5 m% c* k( E7 h7 u mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ {! s: u% m& z9 e
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' M4 F4 H# o& m! \# |& P" Q mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 D5 _1 z% q, e: E" o. O% u mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) u4 V; U& j1 l' m7 x
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side); N% k6 M; s8 d4 q' `& `
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 H* T( T" A @+ I mcasp->regs->RINTCTL = 0x00000000; // Not used
6 Z- |9 h& v6 X* E& j7 Z% }( f9 \ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! T. N/ Y/ k& w5 i( e
+ w; e6 J5 M' m( p mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used' ?; J. S* W1 f" D
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 i! s1 G: a+ T2 E: e8 _
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 J* Q _5 `# m9 b1 \) p
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) i/ Z& _- I X mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* O. L+ T$ E. T. [
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
: o4 O+ n8 U& ~! S" _ Q0 N1 P6 `- O mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ X& I6 T0 X; h7 c
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% N' b/ o: p8 T
: u* J" k8 S/ T8 u1 Q( ?( C, U5 Z, u9 q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
+ c# Q& }/ d8 t3 t# t4 X mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
# \2 |3 ?" v9 Z6 ~1 X/ ? mcasp->regs->PFUNC = 0; // All MCASPs
; R$ H. B5 K) e4 y. J5 u) Z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. A) b( r* p o! _. o( e
, F; C& n7 v- X0 u) v4 i7 R2 d C4 Q
mcasp->regs->DITCTL = 0x00000000; // Not used) a3 F2 r) a3 ?: O$ ?1 i. u
mcasp->regs->DLBCTL = 0x00000000; // Not used
7 h1 [; ^- r; k' { w mcasp->regs->AMUTE = 0x00000000; // Not used, ~. `$ D C. Z( }
( m, t- x' j" d: G) ?
/* Starting sections of the McASP*/
+ A5 v7 `( r l) r" ] mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . J; o- K2 M {# H1 I/ X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 5 F6 z* k( s+ F8 b: q) M7 Y/ M
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % ]+ A" H; e, j, ^% S# d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ p B4 p" h0 p& m, f7 @7 @
" e# G7 S" b) W( ^ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
W$ R; S8 a( q9 {2 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% b5 M2 A0 Z2 p8 \
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 P0 J2 D D( N3 Y5 t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 Q! Z9 ~5 W1 L3 ?! D. W# g
+ W9 Q6 _2 @3 s( _5 x; `
mcasp->regs->XSTAT = 0x0000ffff; 1 V" L ]! A0 A& w& |7 y. b7 e
mcasp->regs->RSTAT = 0x0000ffff;
6 ]- i: i5 k. s4 l" H! u; b2 F
3 g3 { N4 M7 M* J$ J; a mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) u5 p- c$ b9 o% q: |' c" H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& h' V) u# T/ R' Q. J8 z
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
d: k6 X! m+ k$ w0 P$ ?1 a4 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 V& m/ E1 A0 e2 q( P
0 |8 |- F6 q& t4 s( h' @4 h /* Write a 0, so that no underrun occurs after releasing the state machine */1 v4 @9 q8 |* e8 G( {! ]8 Y8 E
mcasp->regs->XBUF5 = 0;
9 O+ `5 u7 M2 y4 _( R mcasp->regs->RBUF0 = 0;
" e. ?6 \3 ^6 g# M( J8 M$ v
, j5 |9 [/ \$ t7 {# |( ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 d' Y! _9 v# S! i3 u$ b3 q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% r- t# E/ B% m5 ?1 z8 u
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( O* Q: [, k2 x' x" a# [* s0 c0 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 x w6 n1 O5 ~+ b2 Q, B* \1 {' u& I$ v3 n
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( j0 P/ ^8 a; j m% Q x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ C6 [0 o) c. ?6 G- I* w% m
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, D- J' P7 n( G7 {' Z9 ?% Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 l* {4 E' H7 M& z- S3 \. Y
6 A1 `+ \2 x* o
CSR = 0x0000;5 N* T% O( E5 S' x" Q4 ]# E6 Z9 ]: p
INTC_INTMUX1 = 0x3d;
! Z" Z6 b8 W! P( l/ z/ v: H5 O! e ISTP = (unsigned int)vectors;
' M5 b% R* R4 I8 g ICR = 0xFFF0; 7 d3 v& P9 q) V3 X+ K T" z
IER |= 0x12; 4 X9 k7 z- a" ?7 H. V& s- Q
CSR |= 0x01;
+ K5 v. \- @* N; ]8 [% o- L3 X3 E, ^1 U2 l; t& _' b5 X
& `8 s" J! n" D5 e2 z
' {' i8 {9 T, F- L4 L' _! I# j4 O: a6 v
还有就是两个输入输出函数:8 h V' q8 n( M) s0 }5 j/ \- P6 U
void output_sample(Int32 out_data)6 d- j* Y0 c+ J* {( ^
{6 R2 F h) z9 B7 \
AIC31_data.uint = out_data; + i) E8 d: s% u6 l) {# R$ ?. C
MCASP1_XBUF5_32BIT = AIC31_data.uint;1 W. U# [/ W0 X- Z$ J9 r. F' g
}
* e: R ~& D: E" Z) Q# c; K
1 K4 F' ^) r) a( NInt32 input_sample(void)
% o% h7 S* q5 @& [3 Y/ k5 b" l{
7 E% X4 B9 Q8 Q) ?, e# e, e8 a AIC31_data.uint = MCASP1_RBUF0_32BIT;
) V4 b, N0 S& [. W- y' _ return (AIC31_data.uint);5 D" w& z3 _$ n
}
0 H. M" u4 J% t% k% d8 P8 {/ _: J
; q- E& y1 a3 X. p |
|