|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 T9 S* v4 `! y% I
main文件:4 o1 ]& T' p; _! {" P5 z
interrupt void interrupt4(void) M# O+ p) b0 L3 j& }
{5 x2 y$ ?, Q: z/ f4 t4 g, s& A
Uint32 sample;
7 O3 l% _$ ]' I" M/ ]8 e
4 k: v, P& q* ?1 i5 t( K5 D5 a sample = input_sample(); // read L + R samples from ADC
# s9 E- s! W8 d* v8 P0 |" m3 ?) } output_sample(sample); // write L + R samples to DAC
P/ \9 B5 K/ g- H4 L/ B return;
& Q' q- U# k1 e& y9 V8 t0 f1 X5 r}
# e/ Z: W- v3 c& d4 M/ t( i& B: I5 A
int main( void )
8 t) }1 [. ]. Z: g/ T{
, N) Q; d' l* e
Q) T" B# B" N /* Initialize BSL */
y4 t$ c/ d9 P EVMC6747_init( );- N1 T" l8 i1 r. r0 H' |
/* Call evmc6747_intr function */
5 l9 Q# v$ h1 s# p) T0 C9 F7 L aic3106_init( );+ `+ a# \4 w% m% |
while(1);
5 O1 c/ [ c! ?; |9 w}
2 k: ?" O; | m' H+ z5 N: j1 t9 M: b! [! n
) t+ ?0 m" O4 j; j: k
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题 T- h+ b4 I+ |5 o$ w- a q. K2 G4 a
/* Initialize MCASP1 */
$ U I# _3 @1 u, V8 K! r4 B mcasp = &MCASP_MODULE_1;
z8 g) F& j9 c mcasp->regs->GBLCTL = 0; // Reset
4 p9 n3 O8 W' p1 ]0 v, R: X% } mcasp->regs->RGBLCTL = 0; // Reset RX
/ ^, {3 ] G+ l3 x mcasp->regs->XGBLCTL = 0; // Reset TX* ~3 V! C8 {- X5 E4 c
mcasp->regs->PWRDEMU = 1; // Free-running
* k1 \$ ~6 a+ z9 _, B/ W0 C$ P- y // configure McASP0 receive registers4 E4 |# W B8 \" u
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
! q0 z' y) ~2 k# Z/ w: H k# G8 F3 r1 } mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 n2 Y$ q& Y2 g
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 n1 G' p, Q0 D8 s/ n
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 _3 ^/ A$ e& Z( r% I4 H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 A3 b+ n1 Q; g mcasp->regs->RTDM = 0x00000003; // Slots 0,1( i! z/ l5 M! f" ]3 E& \5 v/ x
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 ^. Y: I. C3 F" x) K& M mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- ^) `9 S% b1 m( l
, @1 m4 [6 h1 Q2 N mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 s8 J9 f2 ]% w# X3 H
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 Y4 A. e) D& l0 `" o$ a- \ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% y9 l( N. l' l. H2 t: W' N mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ p4 p8 r; x# l$ i" U
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
1 ?# F' E9 r! ^ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
3 x- J8 @, [6 E4 X mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
2 H3 V, X" z' Z: M mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 w% v- J4 @) I! Q9 r3 ?! A+ {) J. x1 d- ^* o) |
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 ]3 Z. H2 t( y# [) B mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
1 ]9 c' H1 q' L3 Y5 g) E0 | mcasp->regs->PFUNC = 0; // All MCASPs
) ]* W+ b: t% G; M+ a+ s' z9 a$ r mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" A. M! y% y6 a1 V# |! E
' o2 a% c O! k
mcasp->regs->DITCTL = 0x00000000; // Not used
+ Z: p s) I& a" | mcasp->regs->DLBCTL = 0x00000000; // Not used$ l1 w6 [- b$ {1 H/ z9 \& S" k
mcasp->regs->AMUTE = 0x00000000; // Not used5 W5 W# E. I$ x) x! _# {
$ ]9 D& }0 s k) x6 u/* Starting sections of the McASP*/
4 L1 A* z9 I& G* O% W mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! K# v7 }+ N5 n Y- x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 U8 F T: \6 m. U, b mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ R. G5 a1 k# J* c: @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 I! v9 A; N0 F; t2 `
F, j3 q! D. l# { mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 |3 m; e D. c- g D6 m. P# p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 s* u1 e( Y* w! T$ |
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 l( t' S+ j: r1 X& {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: I3 j l0 R' K( n
) i) V, q" s8 H
mcasp->regs->XSTAT = 0x0000ffff;
( b3 L1 A5 ]. O/ F mcasp->regs->RSTAT = 0x0000ffff; " }. r* R! |9 `* t- i
) p ]+ M1 o. D% N2 r
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' J: |9 ^7 V1 y. `( J1 L/ z. V6 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% Y& r4 L+ c6 ?0 ] mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " ~! m: ^1 s6 S* `$ u. G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ S: O/ y5 v2 Y0 ]9 U7 n6 a0 G3 Q' L; N) V0 ~! U
/* Write a 0, so that no underrun occurs after releasing the state machine */6 _+ ], d" v- i1 K s t
mcasp->regs->XBUF5 = 0;
7 ?: y. V' V0 n" w5 c: ?8 ?& ] mcasp->regs->RBUF0 = 0;
5 q, S3 h, `2 D1 t0 X4 x
' c2 I0 S2 F9 m* T mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + ]0 v2 J6 P) H$ L9 L' I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 H5 [. v1 e& y; S" E7 [
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / C6 N1 T0 _8 c) }. O5 J& m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
o7 n$ K+ ~ ~% M3 G; f, }2 k. B; j+ n
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 S# U& B& V; a/ {. O; D1 i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
n/ ]7 |9 ~/ p# X0 q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# `. b# H# q" i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! b5 R+ `: I$ I r- K( A
0 o9 j# N5 V2 j( n CSR = 0x0000;
) U$ U6 \- k1 g* q INTC_INTMUX1 = 0x3d;4 t4 O. w" a" `
ISTP = (unsigned int)vectors;
! Z# q& }# q" Z8 E: F ICR = 0xFFF0;
4 Z3 s, B M3 Z; V8 N- [ IER |= 0x12;
0 }/ P& R( s3 n6 @( l CSR |= 0x01; 7 }* U. F' w! L1 Q2 n$ M
- V. b1 d1 ~1 M$ K
- L2 b8 B- m* A1 q) U) _% r- g9 m/ b* r% S3 I) X2 Q; k
还有就是两个输入输出函数:
5 B! q' y3 H; V- o2 U- J; qvoid output_sample(Int32 out_data)
8 r% W" X& w+ d m4 J. B{* @$ E+ n3 s# _
AIC31_data.uint = out_data; ; L# P$ s- g9 K# j
MCASP1_XBUF5_32BIT = AIC31_data.uint;' t9 L7 _' V* }0 s
}1 S2 j3 G. q# ^2 I" |% S
" u! m6 h' T- [( _9 SInt32 input_sample(void)9 X5 P! d, G, ^& N% s
{
x& j1 A. _9 Y AIC31_data.uint = MCASP1_RBUF0_32BIT;( ^" O! P* x! S8 B" O! ^: | w( O
return (AIC31_data.uint);
% r7 j. b) i5 c1 }}
4 N+ K9 W2 G( R- M a) W
' d$ F' s5 B8 x5 r |
|