|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 _" ]( M4 y: X2 q; h4 k3 W5 cmain文件:% z4 b' y8 a; a! B+ Q' v+ S
interrupt void interrupt4(void) 3 y: |% @8 @/ F+ U* @
{
% D) Q& P ?* b+ d1 _ Uint32 sample;7 w" u# A5 G# ^& i6 q" U1 p- ]
* Z4 {: U. @1 f& g' D+ J4 k
sample = input_sample(); // read L + R samples from ADC
8 @( A; l% g6 o2 h, \ output_sample(sample); // write L + R samples to DAC + e& i0 r7 [7 ~/ h" t8 N
return;
# ]1 b8 ~1 ?3 R8 Q" J}
g& [3 Z' s! x" p9 x+ z4 u% S& O6 y0 Z) b' j! i) t+ U7 R
int main( void )
, p: b- A$ e+ z% b{; E7 _* l j- q) @6 i" u
! l7 b8 `4 k; D) R6 B
/* Initialize BSL */
7 L. {2 _' X" o1 p EVMC6747_init( );; s) _, c/ _# q. V# f
/* Call evmc6747_intr function */
' |8 x; x$ w( _+ Y i/ [. o; W aic3106_init( );
' e3 i M9 _/ F% n6 L+ d5 R7 e while(1);
1 H6 p! \7 G+ g9 O}
, S$ Q- a1 L- P8 f" \" x0 }! \. ^. c8 O0 b" P5 @1 T% O1 p
6 R: \: g+ H b$ w- f v/ w. q/ K/ Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ f* x. a/ S- d, N/ K7 B/* Initialize MCASP1 */+ j e8 ?; S0 D) `4 q" w
mcasp = &MCASP_MODULE_1;# T( f3 G6 f' x) H
mcasp->regs->GBLCTL = 0; // Reset7 ]( B. ?9 c; v& L
mcasp->regs->RGBLCTL = 0; // Reset RX9 `3 q, V, O% ~& ^ R
mcasp->regs->XGBLCTL = 0; // Reset TX
S- t9 |; K* b2 m mcasp->regs->PWRDEMU = 1; // Free-running1 v* `* i p- \5 Y& o- B
// configure McASP0 receive registers7 H. |* T: R# G* Z
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
; k" |# _ O* j) X mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 _6 g3 i* l$ p1 E2 z- }/ ` mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* D2 K2 V2 C" k/ g+ o+ ?
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 ^0 a! h: _0 B1 D0 m8 w5 K
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
* [2 S& K8 A+ m# S e3 }& q mcasp->regs->RTDM = 0x00000003; // Slots 0,1& K a" X" x5 Y1 ?; \7 ~3 G0 B
mcasp->regs->RINTCTL = 0x00000000; // Not used7 u+ W# z& ?2 B. j) Q/ x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% _( P$ Q' A; b7 K+ t' b H3 E
0 T' D; H& n6 m; V8 x3 i mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' @1 L8 h! W% G8 m3 G2 { w# u mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 e- Q/ Q' ^- B3 m; l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* Z. p5 k9 m( j8 x+ a8 q# l, r
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 T5 l4 K( P+ k' x mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK4 Y7 r0 z. }. W: Y2 s6 _2 I1 `
mcasp->regs->XTDM = 0x00000003; // Slots 0,14 T# [* X' T0 s' O# h
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
7 y% ?9 e! E1 t mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 h) U" {* l! a
, p! x$ ^, u$ x( [4 ~0 r6 d. V% u mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
9 T) j7 Y: J& C2 g9 U, ?; {- B. j mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; [$ q+ v3 U4 A mcasp->regs->PFUNC = 0; // All MCASPs
' M3 v* O- c y- R8 s n: M1 u mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: D, i m8 y5 b9 _
5 p3 g; p- P. J) S% \" p$ s% s; W0 d
mcasp->regs->DITCTL = 0x00000000; // Not used
1 r! b* v% f* j l mcasp->regs->DLBCTL = 0x00000000; // Not used8 _- B2 s# y4 r" o' q& I. \
mcasp->regs->AMUTE = 0x00000000; // Not used
& O( R C& f7 N+ G1 Z
. K. U) B. d2 M* T5 ~7 |2 ^( P! T/* Starting sections of the McASP*/) p0 s* J( Z& O9 }; W
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! v7 k' o' Z( H1 p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; {. ^) }' u6 E& F6 s4 y
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% C! ?" |9 Z% m+ }8 b, M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 m; }, i# i% O8 J, N0 H" W2 {3 j, ]* f- d) w3 J. _
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & [! W$ I( t' q2 C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 E+ e1 ^; V6 g" z# X mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ ?4 G% P: f) V6 t) U' ]; |- z- X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ P' O+ N2 y! M6 @5 E! c
$ w m+ T/ R0 E |& v. ?. x! X3 N mcasp->regs->XSTAT = 0x0000ffff;
- A+ P; x/ o+ M4 `4 v mcasp->regs->RSTAT = 0x0000ffff; 1 z, U/ N, U' P+ L4 {3 ~& i
: t- |8 k2 B& L9 J2 u& q0 C mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ R9 a) g* M4 J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- d9 \4 n1 |& H2 V mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, s! T3 c) g* K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' Y8 R. _0 A$ M/ w$ ?) b5 a9 `9 h" v
/* Write a 0, so that no underrun occurs after releasing the state machine */
- D4 e+ t% r" K1 E$ r0 l mcasp->regs->XBUF5 = 0;" x" f4 _8 g5 [- P2 E
mcasp->regs->RBUF0 = 0;
- O, S0 w' ]# d4 @, X3 _/ ^" q* P' p7 |. }5 e8 I' ]4 ~
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 T# d8 E% X- x+ D2 Y, s+ z. q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 P- k: I" l% U* W: r I mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 K/ K4 R Z- \' h& ]6 r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: _" u5 ^, |9 E
- j! |7 o. _8 A. T ? mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' k. G, H* s0 I# a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% v. P# U& r' y8 z& s5 F- Z5 G$ r mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 m9 v9 a, x* r3 i( h6 P+ [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" L; s: Z) ^: {5 H" d! w' R
( v& } p7 Z: F CSR = 0x0000;0 C# h @/ B1 P3 S! p$ c
INTC_INTMUX1 = 0x3d;! D l: Z( M9 E2 }# E% D" p
ISTP = (unsigned int)vectors;
8 P. v# P6 u; `) R! Z ICR = 0xFFF0;
3 Z# v) g: j) I6 \& } IER |= 0x12; K* U6 G( Z8 P/ ^/ f! i) w/ i, J
CSR |= 0x01;
; T% Z( A( }4 k$ M: \4 `4 U8 z; X! G1 h& g, y& u, W
# {$ L k* P. A9 X+ i. v3 G3 h0 K
: U6 M. N$ V, e5 V& @1 l
还有就是两个输入输出函数:
; ?, B: a/ K. H3 O* \. W' e) Z$ Avoid output_sample(Int32 out_data)$ O$ y& g+ t3 Q9 b6 O, J
{0 j5 n8 `- y/ l. h1 _0 t. i) D
AIC31_data.uint = out_data; " q8 L+ I% {! y" W6 ^2 v) k: m. ^
MCASP1_XBUF5_32BIT = AIC31_data.uint;
( y. K/ U4 G; m5 Y+ P* e# h8 d}
' Q; z" l% m, h0 {, J
+ W$ h" l% Y; Q# s& uInt32 input_sample(void)% U0 ?9 p1 q# G! b
{ 5 I4 a. _* P# V* P" ~
AIC31_data.uint = MCASP1_RBUF0_32BIT;# _% G/ s- t0 `/ U4 c
return (AIC31_data.uint);. `7 P. o _3 J
}8 N% X% g% O! C! d0 f6 V* y s
7 e. v9 R* _& r" n |
|