|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 Y( {$ y% {4 S7 E$ U5 H' s! m! ^) @main文件:- f! O9 x6 E/ O, r
interrupt void interrupt4(void)
! t3 |1 ]* M, d" ]{- j# C; l; R0 J: n' [3 C
Uint32 sample;
" J$ e8 G: ]' c
, G+ x8 p) Z1 ^# m2 C3 L. L( P sample = input_sample(); // read L + R samples from ADC, \% i! G+ n: B
output_sample(sample); // write L + R samples to DAC
: @0 n* f9 T; B: \1 E, x, L5 K) p return;
' M3 O' ?; m4 y2 j! K}
5 E2 g7 L, [ a8 l# k5 T r+ N2 H1 Y: S3 L4 C/ s3 k
int main( void )5 V9 p/ K4 x& y* x3 B5 }3 S9 f
{- l: `3 l0 Z5 a; o4 k
. s! L* U* a; o$ X
/* Initialize BSL */) q9 e9 |0 j- y3 o, q9 t0 S
EVMC6747_init( );
/ P( y( H- Q% a9 v3 W8 z /* Call evmc6747_intr function */
1 Y5 _3 ~$ `5 e8 \# K& U aic3106_init( );
% _- y9 \* m, e f0 M; F while(1);
, N+ d5 {) j7 c" y# S}8 Q$ J5 G9 n% U/ o) l1 H% Q5 H$ }+ e
# J! @; G& t3 O- i. L4 I) ?2 E" x
1 W7 B: i* n- K5 l* Faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) X# }3 _/ j8 \+ V0 _4 m; L3 m
/* Initialize MCASP1 */
7 L: n! M) y# t0 S B- W5 o- A2 C mcasp = &MCASP_MODULE_1;
0 d* ~' a9 o2 U: ]+ e6 C' D8 V' R N mcasp->regs->GBLCTL = 0; // Reset" j" T& z. z8 p0 w i. ]- @- Q
mcasp->regs->RGBLCTL = 0; // Reset RX3 i( o. N2 i" J- M
mcasp->regs->XGBLCTL = 0; // Reset TX
D+ u! u) J- `5 ^" ^/ c# S& T mcasp->regs->PWRDEMU = 1; // Free-running# Q/ H2 f* b4 M& J" ?
// configure McASP0 receive registers, b4 l+ Y o$ w l+ e
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
6 _$ A+ W6 I, S! s mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 R% V* L. h9 M6 Y) w+ O+ s
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ y0 K' _* f+ P# `- l3 f& g5 Z- I! J mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; I# q9 S- `4 q: R9 Y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ H) z$ ^ }$ N- [. L" ~; V mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# k3 w" v6 @0 T: n mcasp->regs->RINTCTL = 0x00000000; // Not used
0 V# \# ~ }4 r) E. k. k: V mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 [5 v* l3 c' C3 j' S; U
' ?9 O% A$ D6 ?) e' \; I4 V mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used" ^) q1 j/ O& ^( Q. k# _, Y( F6 y
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. Z2 ]+ t$ M: M6 h
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, h# K n1 O5 A mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: z7 X! B, [+ ^+ E6 W mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 {# M1 [$ D# i6 O3 J$ |/ }. f
mcasp->regs->XTDM = 0x00000003; // Slots 0,1; h' z$ u- \+ ~* Y1 C$ L
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% @9 c; s4 S* s) ?$ R
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 }2 F6 ]" E# `9 Q# D( e2 _1 X' ?- R; P+ @! m6 {/ |
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- ~+ D4 V6 X/ V# b1 f) s/ i mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 p, n6 P: S3 `+ W5 |% j! N
mcasp->regs->PFUNC = 0; // All MCASPs
$ _# ?+ I* ?9 [7 K5 A3 ? mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- C7 Z6 a5 ~) L, O* b3 _7 p) p F T
mcasp->regs->DITCTL = 0x00000000; // Not used
! q2 P+ r, i) `0 M4 q# q mcasp->regs->DLBCTL = 0x00000000; // Not used
4 A' P' H* p" U5 e mcasp->regs->AMUTE = 0x00000000; // Not used3 Q% r# J! Y! L9 U3 G1 z; n
% q8 B7 Q. g4 A, U/ Z/* Starting sections of the McASP*/
4 P/ }. p5 N5 [; h( A$ { mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - W3 C- ~* r' Z8 O* g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 R: S9 P1 |1 G: P9 h
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + v* ?3 C$ Z& J% g( t/ m z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: d0 Q" v% L8 U
& {$ B4 D% r5 o' D mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : ]/ `3 U4 k. d6 _0 C6 w0 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 @+ }/ b% c( @+ Q& _ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 I* w( Y" b( x/ G* `* D* j/ L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% k; I8 `3 Z1 @* r
3 k# l2 o5 i6 V" p mcasp->regs->XSTAT = 0x0000ffff; ' d; ?" c" F N' @+ p0 }* f R
mcasp->regs->RSTAT = 0x0000ffff; & k' w6 J Q( j( J. I& I: Z
, n) I V3 ?1 T2 B' |- r9 y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 U# I8 P+ d. F$ u/ e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. _8 O# Y2 [7 @, E+ s
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & G4 ]+ n3 ?9 d, u% F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 W. ]8 A7 |4 N8 w( S' C
" t$ {* n* a: c( o% o" t; |2 l3 W /* Write a 0, so that no underrun occurs after releasing the state machine */
# D9 [3 Y5 M5 M9 ]" o+ D, L4 R mcasp->regs->XBUF5 = 0;: q) a2 C+ I( Q$ D L& @) \
mcasp->regs->RBUF0 = 0;
0 a* ?- b: r2 g$ m* U; ~ l) x4 Y- L% v! g
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& j3 f4 {, X3 Q4 ~+ f8 M/ i. { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 h r: _8 ^, m& q
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& c) E2 C+ B8 l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! l) x& W' j& P" r
+ c* U3 z, g1 y9 A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + z2 d9 O+ y [5 J1 r$ |2 G& Z$ m$ ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, ~) R& g8 u# }
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' N5 a. w& X# R9 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 c* p& f/ G- J' s: B3 W- _+ M; w$ k- |: E' b0 C" T
CSR = 0x0000;
% V5 K3 M. |) l+ e' v7 t" Y INTC_INTMUX1 = 0x3d;6 f# a3 I4 w4 a0 M! W
ISTP = (unsigned int)vectors;
M( d! g4 f9 g- M8 I ICR = 0xFFF0; # P1 m7 y! j% q3 W
IER |= 0x12;
4 {' v o- `2 [5 ?# g" g CSR |= 0x01;
0 ~2 @3 b+ k# T% A6 }+ l# M, l( h. t& u& y; s/ `
- S) P- p! b6 l4 c' s; B
8 M; i. M9 K+ r! [2 q还有就是两个输入输出函数:. n" k0 Q2 t f. v
void output_sample(Int32 out_data)
$ N# n" E% s# C" Q' E }7 W{
" Z( f: L+ P9 P$ R! _ AIC31_data.uint = out_data;
' U. k3 j$ o) \9 t9 B MCASP1_XBUF5_32BIT = AIC31_data.uint;
. W2 }* ]) S: z$ B}
: X! I, F: z+ t! q) C2 o8 N3 A$ b0 ^$ |$ N( u- H
Int32 input_sample(void)
( x% |+ g/ _& R0 h, ?: s3 d! @{ 2 z6 _8 f8 c1 ?2 y; e6 e4 G$ `
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 j; W9 v& M/ {; n
return (AIC31_data.uint);
- ~* l" H* F, m( p}
: ~5 _2 H# r, M0 W4 a$ V. ^4 v
. V% \. |9 E1 r$ | |
|