|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
. T& |# u8 s6 U% d* C% rmain文件:$ l( H+ s$ t5 E# U6 `
interrupt void interrupt4(void) 9 m5 M9 H9 ?; V, [8 y0 j. C
{- k5 j/ ^* A. a# O. P d- Z
Uint32 sample;& k4 {8 D5 S# Q+ J+ v2 n j
" U9 j: Z6 W( g R; b
sample = input_sample(); // read L + R samples from ADC) G- I+ i, f. \2 P$ ]9 B
output_sample(sample); // write L + R samples to DAC - _: A, U2 U6 Y# K+ c
return;6 _1 v8 P( ~3 u. N
}! U- L3 g; G' f4 o. W, j; d* |
( V0 K3 E( E( v. G, M" Aint main( void )
* O' {: P! t- S) H% b8 Q ?& `{
$ Q) M+ @' l0 t5 d' u+ M/ O' V) X u5 }
/* Initialize BSL */8 e' `: M. j- N& u+ b* r
EVMC6747_init( );4 J; V, G% _, i1 ^* Y) v. v
/* Call evmc6747_intr function */- f' z# K7 J4 H' a8 {$ s
aic3106_init( );
# s0 ~7 K/ u' P3 D+ ? while(1);5 p# C e5 d3 E
}
" F/ \- r$ U4 ~# W' K1 |2 |) r9 _8 b
; ^8 {5 d- y# I4 ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 \2 M4 m& h! x* }5 V1 Q E
/* Initialize MCASP1 */
0 ^! b; ^& w; a0 `! e8 ^$ L) `8 T mcasp = &MCASP_MODULE_1;0 {9 C% O. C1 \6 L+ [
mcasp->regs->GBLCTL = 0; // Reset
+ B* c- l/ E* b W- k6 r5 } mcasp->regs->RGBLCTL = 0; // Reset RX
n" t3 p7 L9 S4 s mcasp->regs->XGBLCTL = 0; // Reset TX/ U& `1 W3 g* a( J5 z
mcasp->regs->PWRDEMU = 1; // Free-running, }9 L" A) ^) U- N+ _6 s
// configure McASP0 receive registers9 v0 H' ~% W" C/ I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used4 x; [ J8 x3 N3 e6 k" N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 n& A& G0 Z9 P mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 P5 b1 Y' X! i+ p0 I
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) G) O0 m/ n+ W, q. F3 x; U& a mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ W5 R, c" U3 ]
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
" b% }8 \, d/ f, J( h0 H mcasp->regs->RINTCTL = 0x00000000; // Not used0 K1 E% _' S1 o0 g0 y8 C
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 T* o; z8 _0 V' n' x1 n
|+ E7 v+ }) k. z, }. T
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 f9 `9 s) G5 m0 u! Q
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 C! r3 K8 ~' U+ n+ T; |8 t( s6 X
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 G( X% @- t4 k/ S mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* E1 k0 r- }: v- ]5 f mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 z m3 Q6 l; G* V5 a mcasp->regs->XTDM = 0x00000003; // Slots 0,1) ~& q; R$ I2 @3 N. N
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" f% g8 d4 `' t, u& W mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% E+ i8 B" c" X) T' \% G; O+ o) L l; f6 p/ o
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- H( L9 R! C/ r3 U
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
- R- {3 J" l5 t" H& Y1 _ mcasp->regs->PFUNC = 0; // All MCASPs% B3 R& B6 ?& W1 a3 N% F2 C
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" @ K/ i# J# G3 ^* {9 d Z* w) ^$ ^( e: U7 G
mcasp->regs->DITCTL = 0x00000000; // Not used% i) ?) Y" s8 h! k
mcasp->regs->DLBCTL = 0x00000000; // Not used, E6 e0 {. T" @9 J: ?
mcasp->regs->AMUTE = 0x00000000; // Not used
, f: C: z. \/ `8 i, r: x- s, v+ ]' H! q6 l. {( L" ]; O; l
/* Starting sections of the McASP*/
+ E0 P) e* L/ x mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * L( w1 ~. Z9 C; o/ E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 M- k# k: m" l. T6 }* h8 p1 ] mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; @) g ^7 N# Q2 J. B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' L6 [2 I- Z" M8 E2 X1 f' B3 t# @- x1 |! g, H2 \$ ?
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; y. D+ p7 J- i9 W. w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' j3 y0 ?$ G7 U7 g k5 L \ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* j$ j& E' Q5 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON ); L+ S; W" Y6 L5 `5 d
% S5 Q' y: Z5 [
mcasp->regs->XSTAT = 0x0000ffff;
3 D1 Q" v. m2 I( f- B mcasp->regs->RSTAT = 0x0000ffff; 3 B+ x4 O. r+ p1 [( E* b- e: i
4 s/ D# B4 l! N8 \( K
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: c& [$ X: W4 a- t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 k- n5 q5 G1 d mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 s, c4 R% ~9 h7 s8 B3 K8 Q% E! C2 ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ ]- t; X7 w$ c$ D
5 X3 V# G( G$ P( s! z
/* Write a 0, so that no underrun occurs after releasing the state machine */8 R) i ^; v/ r$ s! x1 n% D; S
mcasp->regs->XBUF5 = 0;
: s2 k8 n8 D1 @1 t3 f+ Z1 U mcasp->regs->RBUF0 = 0;
! Y4 M& ~! k/ Q" J" A$ i V7 B0 h, ^9 I
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 q) C( X5 _+ o" c" y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, s# ?* R" l: n) O7 Q
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : A* H, w2 o4 Z" N4 I2 S" j3 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' X: c+ O$ d) b- ?
. S8 ]; C! v. K& ^3 e% V* ?0 J mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ [( {- K8 ^% X* ] J2 |* k! Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* K: p! p: f% g* q! \. M h& Z0 h mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 P- b- p; {$ F2 o0 h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 |& k2 d0 M' l7 d; Y% \7 J& x/ x; R/ @! W2 l# k" j7 g" ~
CSR = 0x0000;+ W Q# h1 D$ X, e9 t7 v) h
INTC_INTMUX1 = 0x3d;
' l, i" v& R' Y' v/ |) p2 |" Y3 P" F ISTP = (unsigned int)vectors;+ x- i% ~. X4 i8 Z$ L" N7 L$ n
ICR = 0xFFF0;
: X- g) e+ Y4 p IER |= 0x12; & E# s$ E# {/ x4 j3 j5 O+ r
CSR |= 0x01;
# M1 T9 K- I( O* I
) Q; u. M9 o; J( e
' d4 T0 `, Z+ A$ a1 P
8 E' I! y# i$ g8 [ i还有就是两个输入输出函数:
+ B: d/ \ M/ @: s3 w' lvoid output_sample(Int32 out_data)1 p' B. ?* r3 W- b
{/ @0 C% Z) d5 v9 m( `, U- P' d# W
AIC31_data.uint = out_data; # Y+ v, w- k) W
MCASP1_XBUF5_32BIT = AIC31_data.uint;
" X7 l( S2 [( B6 R7 \2 ~- c0 W}
2 {: h P: X2 j0 P. u7 H
3 S. T; S% U9 `$ R5 _Int32 input_sample(void), ~& S( j; R; G$ e: B, a1 ?
{ $ Q' G) H, D, q1 L) G4 q G* ^" `
AIC31_data.uint = MCASP1_RBUF0_32BIT;+ Q; |7 t3 _! m; `2 |
return (AIC31_data.uint);
- O# Q7 y* l# z8 b* G}/ I% W$ Y4 h5 x8 h
3 y3 ]( @& {$ S/ n8 e$ l |
|