|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! e% h) _: e7 @2 n3 ?4 O5 B. e
main文件:
, e0 q0 v4 Z6 T' winterrupt void interrupt4(void)
) Z9 Y9 m7 y- x6 ]( b5 q, w) d3 O{
0 i& H7 \6 K3 D1 d9 E5 y) {; y. [1 } Uint32 sample;; g+ i1 w6 Q8 m6 L; d% `7 y
9 c1 l9 {+ q+ ?/ K9 w& D ^ sample = input_sample(); // read L + R samples from ADC
2 L3 q: ^: L9 f. f- B+ l output_sample(sample); // write L + R samples to DAC
6 l: e/ n* _% S- k+ R+ M return;! m( d! f/ V' M0 s4 }( M
}3 \) O2 \6 q1 Q* }: H( m" y
8 R6 s |6 N+ ]: ~ vint main( void )0 n+ u; ~& f; ?7 e& w
{% o( |! `5 t& r0 f. \+ a5 [
3 j n8 H# n- m. n0 M1 w
/* Initialize BSL */
" G! M7 B8 J7 Q EVMC6747_init( );+ o) ~" u$ p ?# @; }
/* Call evmc6747_intr function */
s q7 t1 d2 w/ b. ]4 \" g aic3106_init( ); S; f7 n k4 J. t: M
while(1);6 J4 w" ^& C# a7 L( s+ y9 L
}
1 f; q* n K y, S% P: T1 G' u& Z6 U! m. N+ Q6 F' j E
& _% N2 k$ X6 Q( J* u4 Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
w# ]3 W! O8 O/* Initialize MCASP1 */& @ D* B9 f; M. U5 n: P
mcasp = &MCASP_MODULE_1;0 C% i+ ?5 H6 |1 [& s" }
mcasp->regs->GBLCTL = 0; // Reset
( U% R/ v# ~) Z6 t `( e) f& U mcasp->regs->RGBLCTL = 0; // Reset RX
$ w O# ~9 w1 @ mcasp->regs->XGBLCTL = 0; // Reset TX* {+ G+ F) H4 s( B, c) Y, f& ]
mcasp->regs->PWRDEMU = 1; // Free-running, A4 S" m% p! j0 Q) i9 m4 R
// configure McASP0 receive registers, ^) t2 ~, i. ?' g' H. a
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" q7 o/ a( m8 r/ \/ o: D( j+ h mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 i" U1 W) L# k8 b# Y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. X* ]; u/ i1 j& y2 r' t mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" t: s7 q6 N6 I7 O
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& V! d" z2 {: l I/ x
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
0 W3 o$ v$ _4 ]7 `9 ]; ?/ p mcasp->regs->RINTCTL = 0x00000000; // Not used
2 \+ T" r6 q- ` mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: O" U6 _4 ?8 M) U
# J% V+ }( f$ z3 W z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- z/ y) s( @ A# Z/ n2 Q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 Y2 b# g9 V, E2 q$ [; D* \ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) o8 _/ ?- u7 A4 R* Y: s2 W
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 I) J) f+ Z8 V5 W& \: P% |
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- ~+ h: O/ J7 H9 e
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
6 z/ r3 }# i' X+ L: w: {8 g mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit8 J H/ p. B7 |( r- R7 U' r
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 K' @2 _( e. o+ o" U" S
% k! \ {" U ~8 E, y5 V P1 U mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
7 ?& H3 ^- A* [- |0 x+ V6 e mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT r0 J4 p, C9 ~
mcasp->regs->PFUNC = 0; // All MCASPs
9 i+ }/ r2 @; g mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; L! a$ j+ D1 Y$ }) n6 E4 J
0 B0 M0 t3 L* X& C! _: }" y+ W mcasp->regs->DITCTL = 0x00000000; // Not used
7 V3 T2 h* t* n mcasp->regs->DLBCTL = 0x00000000; // Not used
9 }# {( a" n; r4 i- t mcasp->regs->AMUTE = 0x00000000; // Not used: H* p2 b7 D2 v' b1 g# l
' Q& `5 {* P6 D Q/ b( L' v0 G& \/* Starting sections of the McASP*/
. |9 ^8 F! V5 O# x0 `4 A& G mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: W. E* w7 T @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 x& t- \7 c* l {' s2 z mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ a/ k, d7 ?! f+ {2 D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( @! L3 x& y* {9 d7 ^$ ?( E F' @# N/ G9 X) p# `& z7 k
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 M% e* N( z. T. F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 w* V6 m S0 }: j; g
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; Y3 N! W% K# i; t3 u& H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% G! x) ~+ ?+ K# k% R% `3 h$ |; S/ Z3 D; t
mcasp->regs->XSTAT = 0x0000ffff;
2 F, v! b5 F$ o/ z) n1 g mcasp->regs->RSTAT = 0x0000ffff;
7 o7 }1 R+ S2 ?# f+ o
) M! ^$ @ Z/ Z4 ^7 o mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. b4 W, E v0 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; N0 {3 P7 {* {3 p% A
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ N, G& \4 }. u, B% J6 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ S' @7 c4 C: j- M4 g7 m1 G7 [& R6 Z I! q4 Z8 L/ X
/* Write a 0, so that no underrun occurs after releasing the state machine */4 M( l; e9 P: x! P
mcasp->regs->XBUF5 = 0;5 g5 r$ d. P: r" O+ N
mcasp->regs->RBUF0 = 0;
6 [+ V4 j$ D) X/ F [' q+ q/ m
2 t" {" k1 @+ P! \( r$ [/ b mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - m' _' H; G) r4 Q" A9 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% h5 s& c2 e: N. w# S2 ]' b t mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # d$ p& T, s( K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% S v, G l A% n2 ?
) z' K- r- q, T% F
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / v$ O5 B/ j( R) J; _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 V7 l) U9 H, Q% f3 ~1 m3 x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! F s9 p# G. C" g! [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) k) f, M2 r! a. ]$ x. S6 G7 g0 f; W/ |+ Y
CSR = 0x0000;, ]; a5 j/ j, }+ `$ S8 _
INTC_INTMUX1 = 0x3d;: i4 W2 I6 e0 ]
ISTP = (unsigned int)vectors;
% o3 H' I7 U3 q* F% |1 W9 H. U ICR = 0xFFF0;
, s5 B$ E9 j8 h/ Z1 H; W& ]5 r IER |= 0x12;
! B" j3 z( k+ u3 a- J) q CSR |= 0x01; . G$ U- ^3 z$ z4 x+ e0 [
+ F: E/ g7 Z! u9 m4 S
. {5 d2 Y" `, B8 N8 Z9 Z" ]+ x m0 o, \- `7 E& Y- U$ D
还有就是两个输入输出函数:& r( g, w. ^8 ~
void output_sample(Int32 out_data)4 _6 `% u* [3 i. g+ ^9 q( x0 j" _
{
) Z) U0 N3 S9 I AIC31_data.uint = out_data;
& \2 k7 V) T. a" S* Y- Y MCASP1_XBUF5_32BIT = AIC31_data.uint;: _ T, S, H/ H q, E, Q i5 Y
} e- j6 N- q. F# A& c8 D
0 ^' N) e5 V/ a; l. b" S n) T
Int32 input_sample(void)+ X/ H: x1 ^7 r5 E5 n
{ 0 W& c( A" q' {! ?% n6 x
AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 w, {( e3 C9 m. `7 h# E2 A# B2 Z return (AIC31_data.uint);) |9 F: S# C) n! s7 g5 e% j6 p
}+ t! f; ?) F7 C ~( _, W2 q, Q
- x8 \% u( F) e3 f& P, c
|
|