|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( |! @0 L1 N0 l
main文件:7 D9 n8 Z4 }, w+ o7 Q1 r. q' q
interrupt void interrupt4(void) : E5 ^" l7 i: Z. W6 z2 e. u1 s7 R
{
- g* Y4 }% a# d2 b& I d Uint32 sample;
3 \2 l6 \+ G2 q# v L
6 W: w+ W9 l( g" H# ~8 x6 D; j9 N sample = input_sample(); // read L + R samples from ADC4 \2 Y2 R8 |/ J2 ~% u. d
output_sample(sample); // write L + R samples to DAC 7 C% }8 _+ z, e
return;2 a/ ?. F" Y* _: K# D# E6 B# `
}
7 Q+ F7 L1 W6 B! ]0 E# |
+ K2 i# Y4 P, i( U" |) Aint main( void )" x; [1 }, N5 A( |% q9 {: I
{+ `+ ^+ H) [) {
2 |) f0 n6 X* `: q9 e /* Initialize BSL */
+ R; R6 u& g3 F) V EVMC6747_init( );' ^1 s. j8 ]4 Y" B, h/ k$ V- Q
/* Call evmc6747_intr function */
, r2 Q4 g& D0 T7 S" L/ m# m) M- H/ D aic3106_init( );
0 M" B2 O+ @+ L while(1);4 s0 r) m& D7 I9 c' \$ g! z
}; [) L0 i( A5 _" @
, s+ [1 j( {% @- F
7 Q- m1 W4 C/ I* Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 e( A9 U. P2 p+ z* \4 u
/* Initialize MCASP1 */! D1 u- A+ H, s9 d; S0 i3 ^
mcasp = &MCASP_MODULE_1;
# R. N9 @7 k1 P' m K mcasp->regs->GBLCTL = 0; // Reset! z- _- F" K( N2 q
mcasp->regs->RGBLCTL = 0; // Reset RX
3 |* o% i4 z7 D# K mcasp->regs->XGBLCTL = 0; // Reset TX6 w% ^$ x6 L" \' u5 ?
mcasp->regs->PWRDEMU = 1; // Free-running
5 ]! g+ U& y% ~( F. K1 W* x4 @, B // configure McASP0 receive registers( v+ k& O% ~5 M* |9 {
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used" ]" ?6 l2 h L) K& G S# [+ M
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& F( e, H& @* ^8 l/ y7 ]' `$ h mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
\9 _, y* e+ _! f mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) }, R8 V/ Y u! w/ Y' X6 `# M mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% O, G! ~/ S$ `4 P
mcasp->regs->RTDM = 0x00000003; // Slots 0,18 s( {5 U3 {" T( |" }9 X
mcasp->regs->RINTCTL = 0x00000000; // Not used
, n6 G5 Y" e: s mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 H3 e) v# v. L4 X& y
( M( V' s# q- R+ w% z$ J1 L mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 O* B7 q" M+ V1 o3 w' g mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* E3 L' K; T$ g: @ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 W8 Y* o0 X( v; W. p# l# b mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 T) B6 Z. M/ Q) b- Q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ t7 r( `; a2 y p) B( }# ^' I mcasp->regs->XTDM = 0x00000003; // Slots 0,17 b( z, S4 S2 E8 H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit8 b: p' v( y/ O9 I& c& H: R
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ?* U( P3 W6 x& W7 ]/ \$ W4 T/ E; c# A( g- r
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; d6 P1 M) P& r! m0 l( j0 W
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' T1 W( f T% ~8 q, x
mcasp->regs->PFUNC = 0; // All MCASPs
6 ]. a0 M p, }/ S( H mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, X" S/ A, C% w4 t& Z6 [2 _/ Z- _* o; {" A: a/ U, b8 w
mcasp->regs->DITCTL = 0x00000000; // Not used1 Y( J6 c+ z4 f7 {$ Y
mcasp->regs->DLBCTL = 0x00000000; // Not used. J6 x& J9 |& F7 c. i( f' A$ p
mcasp->regs->AMUTE = 0x00000000; // Not used& A. I/ C# @' r6 G3 q1 @' a" W v
2 J) a- [' n3 F$ G4 S. l$ I8 l/* Starting sections of the McASP*/
& L5 h2 y: l* d0 O/ Z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 g: n8 d/ e0 S3 O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ D; g7 K: T$ Q# j7 l* g; w3 A/ o
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- |6 x- w9 ^! x, x4 O$ q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' D6 X8 r6 L& P) Y
* m2 L: y5 l9 W
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! [' s1 O) O) u8 @9 l H0 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* T- h$ y8 g/ H% A c4 x
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " C/ r/ h7 d! ]6 D% K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# t( b" C! R8 Z! J( A$ R
; m+ x- ^0 ^2 N2 C mcasp->regs->XSTAT = 0x0000ffff; 4 e/ ~3 \& h6 C2 w; p6 t+ i
mcasp->regs->RSTAT = 0x0000ffff;
+ r- W$ b6 ~1 A* i) F6 Z/ M' x& v) m$ Y0 ?* X$ Q( U
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 G: C+ C; [, m" e5 Z: E! r9 \, k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- [* @: @' w' a4 U. C& ] mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! K6 |7 }. h2 }, P5 I( ?# w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 N2 | y: B6 s k$ }9 \2 f; |; K' @; o
/* Write a 0, so that no underrun occurs after releasing the state machine */9 S) k. R! g: g' D
mcasp->regs->XBUF5 = 0;
" I2 o6 u, o& e& B6 N% y2 I$ I( |) O* x mcasp->regs->RBUF0 = 0;
- _/ H* B. Y C8 W! |( c% f' Y0 w: k/ g- Z
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& a/ @* c( Y0 P$ c; ^) ?9 V( K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- C5 ]0 J" _8 r. O mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 d' b" y; W' s$ Y# A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ |3 A+ \4 b5 d
! H% A5 B5 F4 u) t mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # e* w3 k# Q0 j0 M! k, @9 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 ]& v' n! ~4 l9 b6 p1 Y
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, C( w& y7 U. I- X4 V4 K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 w1 C6 J5 d6 L j
1 E: }2 r5 b7 l. ]) p1 Z4 a$ O, J CSR = 0x0000;$ _+ i) C! L. i8 b1 T5 x Q2 E
INTC_INTMUX1 = 0x3d;
0 N# ~, B* D% ~7 z7 w) U( e. v/ { ISTP = (unsigned int)vectors;0 V ^/ {2 k; R4 X5 x2 s
ICR = 0xFFF0; ' Z# N" S* {2 x' X9 x( M# Q$ z
IER |= 0x12; ; M. p. m. o) _
CSR |= 0x01; . e7 }7 Q. S4 v% _
/ m, I6 F- c: n2 U/ E; |/ Y# c2 I* {5 {6 j
9 `! x$ l/ n" E# C& r+ { l5 e3 j2 y还有就是两个输入输出函数:
d; f7 o; ~: F) y% {3 G7 _void output_sample(Int32 out_data)
' y) r b% _% ?4 l{2 E# I# m2 a& F, F% Z
AIC31_data.uint = out_data; , ~/ M3 ^* I/ z3 W
MCASP1_XBUF5_32BIT = AIC31_data.uint;
; A# t j, X+ Q+ T* z) F: H% i}: o4 R, Q9 P6 T1 @* t) r( s
8 l# x% \2 M. m8 e/ \Int32 input_sample(void)
. d# G3 X7 ~" C; |6 R% \+ x! E: r{
: h- m& H4 p2 u7 Z0 s @ AIC31_data.uint = MCASP1_RBUF0_32BIT;' u/ l, J" h' ], e* g) y& Q
return (AIC31_data.uint);
6 H( F0 m4 a# l' Z$ B}) F6 Q! Y' i+ m* X8 L: D1 {3 o
' p/ g1 ]. Q7 Z- T: W' T
|
|