|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: _6 `% F5 f, I+ e/ b4 gmain文件:
+ d0 I. U* K, n# a4 s% ?2 Cinterrupt void interrupt4(void) ; {9 b# S$ @8 g0 _5 I$ L
{
3 e9 y6 k- N% S' c( o- k) D$ r Uint32 sample;
/ i4 V( g, `3 K; A' k5 m3 I3 }9 N8 ]) C: P! y
sample = input_sample(); // read L + R samples from ADC1 H) x4 a" a+ R5 t) _ O
output_sample(sample); // write L + R samples to DAC
& K% X+ u/ P! S# G3 R7 @ return;
6 U1 d% {2 R. v* }5 u8 e}
, w8 u5 Y9 Y+ ]3 K
9 A% s0 |) ~) a0 Mint main( void )* m8 v0 l/ p$ Y
{
" i# k) \ i, P, V" J3 ^, Z
0 K0 F |% R# u# f0 `3 h7 O /* Initialize BSL */
& q$ I% D; k! v& Y% b EVMC6747_init( );( J U& P: K1 I! L3 w9 K7 I6 r1 B
/* Call evmc6747_intr function */
, N# a- _* }1 g+ L, [! i3 u3 e4 e aic3106_init( );" b5 z. [# ~) a+ `) S2 s
while(1);1 n. S3 e5 F, L6 b M# O4 S+ o" z5 N
}3 _1 \$ M7 m- @. T/ T1 G7 W
8 ^, a. Y& N \2 S2 q
# i' ?7 X2 \0 j# c- F7 E* A9 ?! e4 D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 X5 X9 r% p y ^- N* U
/* Initialize MCASP1 */
4 l: r# |+ u* W1 f# h mcasp = &MCASP_MODULE_1;9 E) l2 Q+ I. t
mcasp->regs->GBLCTL = 0; // Reset
* T# {& q2 p0 M5 r' V3 i mcasp->regs->RGBLCTL = 0; // Reset RX3 T1 k. x7 p( `4 E2 U ]) q; j+ v
mcasp->regs->XGBLCTL = 0; // Reset TX* X1 B/ O, s5 L9 E# }& y
mcasp->regs->PWRDEMU = 1; // Free-running: j% x+ v y3 {) n: n* z
// configure McASP0 receive registers
+ Q9 Z1 e! f# L5 F' @* _4 l mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ ~0 z& \" ]- @7 x1 M0 i# T6 H
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 G T6 C9 t, P& k* Y+ { mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* w1 A# N; r2 d1 R mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 g, a7 A- e1 \/ C mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ ?% ^$ a( ^- n( \ mcasp->regs->RTDM = 0x00000003; // Slots 0,1
, Y+ e G- H, h mcasp->regs->RINTCTL = 0x00000000; // Not used
( w2 s! w3 L1 b! O mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( S( T! d- l- ^& m: r
?0 w6 q; R* T mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 n; T) i7 H7 R% M5 |
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 V* V& d7 Y' q. x& l% ]
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- ^* ]& p4 A& V8 _- b% G' P
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: F" k* V" ^3 h0 O/ a
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
S: v" }2 C+ b9 _* p) [0 U2 r mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" b* }3 w# O' T mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
/ Z& d" ` C! T6 d: s! M3 M mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 N7 P4 o$ F& y4 b4 }3 s
: Y+ H5 b; C. z. ]$ R1 k s mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: [5 e5 o9 u q& x; G1 V mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 s1 v6 Q4 f7 K4 l6 z$ e7 e0 P mcasp->regs->PFUNC = 0; // All MCASPs$ F' i" |' x o/ O7 S
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 B* V3 z5 L, Y1 s! ~1 Q
0 ~+ F% h2 @& C, }% J5 n
mcasp->regs->DITCTL = 0x00000000; // Not used
3 |6 Z, M6 f1 V mcasp->regs->DLBCTL = 0x00000000; // Not used
& S( n H1 f+ x; J9 Q mcasp->regs->AMUTE = 0x00000000; // Not used
! G$ p* A3 m5 S
% z" u, u5 c, W0 m$ g/* Starting sections of the McASP*/
) _) l5 Z, H" s( Q mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
q0 O F: ~0 Q% W3 M( j3 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 l4 I0 o o0 w% |; @2 s7 I mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; M: t* A; A- m9 P! z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 b& v, c. z/ u0 N/ H, p5 d4 O
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 n" `5 s5 k5 V* a! [6 R) j5 d w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ e4 z; w$ N- K. S; b; }( D
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 S7 d9 L. J# [/ a5 S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' |( o$ E$ M: g/ ?
; q0 p4 }4 F2 s, F mcasp->regs->XSTAT = 0x0000ffff; 6 B3 s5 ]1 ]- u; Y I! o
mcasp->regs->RSTAT = 0x0000ffff; # a6 p; ]3 \6 B" [& U
4 f, N ?! O! `5 ` mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 `4 ~" J5 ~8 w5 z* M2 c+ s0 u. B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) `% ~% y' x) U `+ v/ a
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & J' k" @5 @3 c+ U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# R* f, ~; Z& b7 n
6 j" o& W4 J/ |! J
/* Write a 0, so that no underrun occurs after releasing the state machine */5 d& S9 z2 H: V( S' g5 I: }1 S; S) Q
mcasp->regs->XBUF5 = 0;8 E8 v" ^" x' q8 T# A' j9 R( I
mcasp->regs->RBUF0 = 0;1 z8 }% C! w- A/ D
' _9 u3 G% z1 J- ?4 c7 p8 F2 d mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - e: y3 Q& Z' \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) I; y; h) c8 k) s- b5 D, ?! F mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 h7 k( ?% E/ s- d2 s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( P+ S, I: \" E1 x$ {& u
# x- `. i; Q' s7 M mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! N+ M! w* ?" G* L9 k4 J6 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 y% c; e, a! k: y
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. s3 O$ s6 }/ v+ s% `+ U5 [5 p3 P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, c' u% R5 a0 U" u6 ]6 m8 Q4 k9 `8 X; {$ c) A" O2 g
CSR = 0x0000;" @) w$ H& r! m) K7 F4 j7 B
INTC_INTMUX1 = 0x3d;
2 t" \/ e5 o9 t/ T4 k3 R. h ISTP = (unsigned int)vectors;5 ?4 J( R. }- R. n# V' j
ICR = 0xFFF0; $ ^/ F2 b! l8 e
IER |= 0x12; 4 s) t/ f* Q6 R9 }6 n( K
CSR |= 0x01; ) J4 W, B/ [' x4 w9 f. j5 f' k
) Z5 N1 S. n4 N4 _$ @% Q# d$ r+ u. M' T# w( V
2 H) D( n! A; Q( z( ~9 D) y4 _
还有就是两个输入输出函数:
0 H3 c! D3 y8 p" P0 t( Mvoid output_sample(Int32 out_data)" N/ k. K3 B: [3 E9 G
{5 C( ]. n7 s$ {! C5 s
AIC31_data.uint = out_data;
) ~( E- k, |* ?% F4 z3 Z9 g MCASP1_XBUF5_32BIT = AIC31_data.uint;& a! w S% C+ q! K& \: M
}
) h0 L* @4 n3 K6 c# y# N5 i i- X3 j7 t7 m1 `5 m8 S3 J
Int32 input_sample(void)
( o( N( U7 `( M; _6 K{
) w& t' R# k$ l5 ~6 J, I AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 @3 X% |1 E' e* @5 m& y- ^, ]0 D return (AIC31_data.uint);0 |! p7 |" Z" L" v$ r
}
4 Q& @" I4 g& t* o; I/ l( X4 y# v) w/ C# M5 b$ V& g* @) k/ S
|
|