|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. s6 q1 N5 b9 L2 r8 j: Gmain文件:7 H& d! q4 v) n) e1 U
interrupt void interrupt4(void)
6 a/ @3 U2 T) x# C$ J{: K( u3 ]; H- g% R& u) W
Uint32 sample;# ]9 g$ {6 u6 q4 |
. g2 z, H3 ~7 a$ R
sample = input_sample(); // read L + R samples from ADC- S, g" _* _; o" z" }
output_sample(sample); // write L + R samples to DAC
' U1 y- x" j! L# {6 a, d return;
. x% N$ |3 u8 Z, W8 d}* O7 o3 {+ `" `. N9 J/ Q5 |# s
4 P' Z1 p9 f8 a1 kint main( void ) G9 K4 g( P/ [
{
; ]' X6 V9 P/ N3 H/ a! w/ Q' B
2 P9 M% K( P: O* }: ` /* Initialize BSL */
4 c7 v# F1 f2 v' q7 B/ p/ w8 g EVMC6747_init( );
7 M0 S6 ^. {. L7 Y6 l /* Call evmc6747_intr function */
5 A6 C) @4 I& Y6 j7 | aic3106_init( );+ U* g* c! \6 r( ]/ m
while(1);8 A2 v7 U* {( z' B
}
% c7 R7 D8 s: ? w
" g2 O1 ^& j! D5 b- g+ U1 B6 |/ ~ ~& b% I( M1 d' I1 W% }& g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 @. q9 \5 b' e* Y/* Initialize MCASP1 */
- l8 x( I' _1 T mcasp = &MCASP_MODULE_1;
( x' n9 W( k* c; z* x mcasp->regs->GBLCTL = 0; // Reset1 Z: w$ S( S1 r8 d& }/ V( P& D1 U
mcasp->regs->RGBLCTL = 0; // Reset RX# r* |/ y! l* Q6 p: G
mcasp->regs->XGBLCTL = 0; // Reset TX
" @- U& d0 n- g# W% t; ^9 o" ` mcasp->regs->PWRDEMU = 1; // Free-running% _- S' \) v# p1 {! o7 ?; w- i
// configure McASP0 receive registers- i8 S" a: u- k U" D# Q! g" p) Z+ `$ O
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
$ s+ C1 \% [8 w/ H6 o! |) t mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 v" S9 }- _1 r( `; I% C; c* B' y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 W6 q& U- B/ N5 c
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): v; a# I+ L6 B' a
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
/ C" T8 L. \/ V" v0 y& a0 i( N( U mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, B6 Z" N4 |$ ^' D( w- X! |1 d mcasp->regs->RINTCTL = 0x00000000; // Not used
) w7 m8 [* z$ D mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: h+ h' k5 E5 M s% t
$ S% I0 b9 M2 E. J7 u% k: k3 ~ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% Q: [- b1 { a. y) E; F
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 Y0 ^5 y& f& M' U mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 C% h: u) A/ G' m5 M, n( x; A3 J mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 M4 v' E. ^( B) q: H
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
y9 d* k4 a5 K/ ?' M+ [) [ mcasp->regs->XTDM = 0x00000003; // Slots 0,11 o/ z$ s( Q6 h
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- G, M1 l. }+ t9 s4 l mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# |* i0 J8 R% K+ g
2 \2 J* D% \9 E& U( [
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
0 I6 x2 {7 n2 t4 m( `; a- x mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; ~: R- \/ w o, W mcasp->regs->PFUNC = 0; // All MCASPs
! a: u" z& m3 k% r mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! |: u9 R) v- w1 ]5 |* P: C$ [/ M) f: n$ R: m6 N/ Y
mcasp->regs->DITCTL = 0x00000000; // Not used( Q$ ^$ n0 n6 U6 Y8 i
mcasp->regs->DLBCTL = 0x00000000; // Not used6 @. W8 t- h) @2 z" c: }, H, h% y
mcasp->regs->AMUTE = 0x00000000; // Not used
5 N1 W, K& b: A' m1 M& \8 c" F* U% D( U5 ~2 M3 Q2 Q* `0 B
/* Starting sections of the McASP*/
& r) I. o6 e5 ?; x8 C! q* J mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 r5 w% c6 K5 Y. @! p* t w, v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( r8 G G: ?: J2 v+ G6 n+ O mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 v5 [1 n2 e8 i. c4 C+ D6 J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" b( B# v5 F; V# I: u* A1 A6 ^( I v- ~5 b Z
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' u, R9 b( r+ M) Z+ r. p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ o, L) P2 U: v4 K
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ ^) K8 X4 k4 k# Q% B( V8 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ \; `: [2 O% \. V* G8 J
- @+ b1 h' x& B9 J8 B W9 D, J& s mcasp->regs->XSTAT = 0x0000ffff;
( h" i0 j! k+ u+ f( K2 P" ^# q mcasp->regs->RSTAT = 0x0000ffff;
% F! r4 N- n+ R. }
/ A1 o. q D6 V+ Q# N* A mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 k4 s: N0 T- A/ d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 ]& }4 V& n" Y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - W S& @. C% E7 T5 k: v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 J7 P' x8 _2 j- M1 g, Z8 Y$ u' t7 ~, I! ~+ Z
/* Write a 0, so that no underrun occurs after releasing the state machine */3 W1 P, `7 B ~7 X# K7 I
mcasp->regs->XBUF5 = 0;
$ f9 w! Y0 k3 u& T' T1 e) t, U$ x mcasp->regs->RBUF0 = 0;
: T7 a1 l1 u" H ]2 r' A. e( A- G
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 m3 {7 s, W s; M2 S( I* a, E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% ]# m' }! r: o# r" T ^. C+ O
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& l5 e& q- L; g) V3 d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ?9 ?; [* V+ W& l# V
0 N2 H6 g* U' q7 l mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! q6 B3 d# S! d1 c2 E0 Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* ?0 {& Z7 n: Z- X8 v; m mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 g6 S5 _' T& b6 W, l$ } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- P9 R7 v' [- V5 B
' H& J1 I& ]" m7 G/ q. O" ]
CSR = 0x0000;
/ ]/ N0 z2 Q3 e3 P5 `5 | INTC_INTMUX1 = 0x3d;) a3 H$ S7 q! `* t9 f( U
ISTP = (unsigned int)vectors;
& ^" A4 Q, ^! d% i3 w# c& c ICR = 0xFFF0; & x7 b1 k6 K% a5 g, d) S$ t
IER |= 0x12;
! _) Y: M6 |% t8 x# x' U CSR |= 0x01; 0 A) m% }5 h* R, {2 ?" K
( l7 j6 w. @# s' }8 o
- R9 [) E. r+ L/ m; o
; X" ]6 t& i" W N8 I还有就是两个输入输出函数:$ t) l1 m7 S1 \# a% K9 `
void output_sample(Int32 out_data)9 \. V/ ]7 p1 H, @4 O
{
+ E4 M2 @) O" o7 D' P AIC31_data.uint = out_data; p% F6 k4 `1 k- \# v8 T! |* t
MCASP1_XBUF5_32BIT = AIC31_data.uint;
) Z( p/ C% {9 ^# ]; A! i}, a+ f$ B: V; u- S* ~2 Z
8 u; `: G& {8 c5 P4 V- y
Int32 input_sample(void)
, o3 l3 j" h( ]* K# \{
' \/ @: c1 W. L; S8 y AIC31_data.uint = MCASP1_RBUF0_32BIT;
( G) r& Z) K1 K" V0 u$ |1 r return (AIC31_data.uint);
+ z" _/ H3 v% u* c Q$ i5 r}& A* N+ m2 t2 y) D
( y. `3 n) ^1 Z4 H, {0 d# _& a. b" b |
|