|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 V0 E, k. I' K, @* y, z. k
main文件:
$ K2 ~# j/ Q" J. t5 xinterrupt void interrupt4(void) ) d w- r9 |. ^4 r1 H. W1 ?6 |$ f
{
3 q5 P; k' O. q+ w Uint32 sample;2 b/ ]& n0 W) w9 K/ }
( f8 v) T: _( J* e; v sample = input_sample(); // read L + R samples from ADC
) D/ e: z. @& t/ V! \ output_sample(sample); // write L + R samples to DAC
& [) X! ^7 }7 j7 r# m8 e+ B return;$ A8 D$ d4 m# J( A- s R2 c
}* i; b: {8 {+ E) W
/ N: W, ?! C) x+ v. m% w; Bint main( void )% R" T9 E0 n* Z- G B
{, ^2 L. w% z u- U4 k; H6 t
8 n! G! h8 A. z: Z+ r) V7 `' y
/* Initialize BSL */" k+ U0 ?! f3 F2 V2 ^+ z; r ^
EVMC6747_init( );
2 ^) z% r1 F0 U9 L /* Call evmc6747_intr function */
0 `: |/ {9 |! e! A1 ]& m aic3106_init( );
! s) v R! O2 u# e9 z+ H while(1);
# z! r9 G2 o: o4 x6 u8 l' t# n# {. T! i}, D+ E8 A2 J+ x+ k
/ b% W9 z$ a c' h4 B
7 W' _2 e3 @! ~# V4 L. U$ `
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! J7 Z% A& V7 N8 z: s/* Initialize MCASP1 */
+ z$ ~) H, W8 D+ h2 r+ ?1 @/ \ mcasp = &MCASP_MODULE_1;
4 k, _/ T+ O- q2 K4 q: p/ N) B+ n mcasp->regs->GBLCTL = 0; // Reset
' L. i# Y" O# | u2 b. W mcasp->regs->RGBLCTL = 0; // Reset RX
8 i6 t) M% s- Q6 U$ r mcasp->regs->XGBLCTL = 0; // Reset TX
/ ~7 T! ~- k0 R/ ~, e$ Z- |3 x mcasp->regs->PWRDEMU = 1; // Free-running
* Z; ~8 y$ B. J // configure McASP0 receive registers
: }: V$ z9 U, w8 [! V& c mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 Z# @0 d; y/ y3 j* c% s/ J mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ O% P7 A* X0 R9 Y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word L% p# \) b3 _3 f
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) n3 z5 k( b+ k3 f6 w2 Q+ P6 i
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ k, ?( g7 C/ O1 {
mcasp->regs->RTDM = 0x00000003; // Slots 0,1' d5 P2 {9 ^! ?) r4 K$ R$ c* O+ t
mcasp->regs->RINTCTL = 0x00000000; // Not used
6 o+ Y/ {9 B7 ~6 V) b mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ O0 W. t+ k; l4 v2 P
7 x2 f( R. i0 Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 B: D$ S/ s$ p l! r2 X. ]& E) @7 u: ^
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" e1 ]. s u, [& q mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& O- C! i) |. [" N( N. N
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' y! X; r3 A' ^2 g
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 G; G$ O' I5 U& A# F8 I
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, Q% w, ~9 C6 G9 ? mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
9 R) p) d2 b/ @, d! _) x8 o mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 }$ q9 z! M$ [- W! Q' m0 t; X0 X$ I$ u' m4 r$ {
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ o4 u4 p* }. [* q- A mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 X9 t$ \8 q; h0 o3 } mcasp->regs->PFUNC = 0; // All MCASPs; ^) G; f2 L& O/ \! N7 Q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' z9 j( f, u% @& _/ K
, e0 f! T+ I8 y9 Z# b0 c/ e mcasp->regs->DITCTL = 0x00000000; // Not used
- G/ \" N. ~7 p6 L/ K1 t5 X mcasp->regs->DLBCTL = 0x00000000; // Not used7 ^. j' G$ w' d$ q, R1 F, R6 u
mcasp->regs->AMUTE = 0x00000000; // Not used5 c9 u+ e- B0 P3 v# R I
. u; b" o3 s' R$ C5 ^" e
/* Starting sections of the McASP*/) M E& t1 V* C+ B2 b! A- i' \
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* l3 M4 z! \. }$ N+ ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" Z7 a0 C& d$ j3 X8 } J6 d h# |( A mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% i U/ k) C: f! k- h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 q7 S7 l8 K* g4 U0 n+ q
% z+ \3 }) `) ? mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) W8 ?) C# U4 ~& j0 A, \" [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 ^; o+ u& r& s
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " }+ G/ Y: o: h& t" \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( D& O$ J% e6 \0 ^9 M+ k
( {2 G* p0 I( A: e% r/ g N
mcasp->regs->XSTAT = 0x0000ffff;
3 N" J: \6 V; \7 ^, i6 e+ G mcasp->regs->RSTAT = 0x0000ffff;
* v. \/ ]: s# ]3 w' n# i1 ~
. t! Y I( `9 m% w8 Y% G mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- u. g! u1 @' f6 M( E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* K# Y6 r7 k3 @7 ` mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , h1 Y( {# L3 k) M- v' A; x( s: G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
q( S7 v+ v! ]7 b1 X. p
! G$ D+ R# T" j /* Write a 0, so that no underrun occurs after releasing the state machine */" J6 u9 O4 I: h8 j f: @
mcasp->regs->XBUF5 = 0;
0 j: _; U n% @3 C" c" w mcasp->regs->RBUF0 = 0;
: M3 ^& R: f) J: d9 W2 u) I1 k- j8 j4 C& {' ?4 o) _; a! A
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) h4 _, m+ k2 \3 j1 u& ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 e m2 W. P5 z$ |: l+ ~: Z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 J0 }& g) v9 i# y; a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% \; J R, u$ Z' |# J% r+ w
: n" S. Z& Q) C- |, W mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 |/ A# ` b9 F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ h: {: p0 t4 ~0 ~ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; P# ] L' W; s+ T) T- P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# _0 S8 N+ W# b' _2 D+ A2 O
) r" P. P; r% Q+ L$ }% i CSR = 0x0000;6 r: h3 t( O9 x& {4 j8 M
INTC_INTMUX1 = 0x3d;
! h# X7 |+ A2 ~% W ISTP = (unsigned int)vectors;) [$ n) G1 }- ]
ICR = 0xFFF0; 9 T, g8 b, B) Y: Z2 K
IER |= 0x12;
0 Y! z7 I u( b& b6 v' {: P' b CSR |= 0x01;
- g5 d4 g1 S# X' y# Q8 ` i6 ?, w. N; F
9 L2 E" [6 ?# Z2 t$ E
3 P. Q$ {: q. e: L9 j还有就是两个输入输出函数:
7 g6 Y! O7 P7 E" V( c7 Xvoid output_sample(Int32 out_data), c+ q- o- T( h7 R7 N& u+ L! \
{# ?8 a' Q6 R: b1 |$ q
AIC31_data.uint = out_data; % _" ?+ q9 W1 o$ x2 V9 z2 e
MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ J% }7 Q' e$ Y4 `3 v}
, n) s+ l/ r+ m% d7 h2 h" q1 K9 l) B4 N$ A; m0 q
Int32 input_sample(void)
0 I/ Z8 i" j6 V{ 8 W7 z+ u1 w; h- P) [2 G
AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ c' A% T; M3 o: y. i) x2 L: {+ D. z# v8 b return (AIC31_data.uint);4 v' }2 ^) m, |, o" U4 W3 C& E2 A' S
}
) d4 L9 w f: ?9 m4 u' |7 l- v5 h4 G& }3 z5 h1 w9 K a$ X: L
|
|