|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- o! _' v4 ~3 f) b4 S4 D6 Dmain文件:
2 T+ r, p5 e* R( l& U7 Zinterrupt void interrupt4(void)
5 j$ ]: V5 Z; s0 Z+ u. y{
' D8 ~5 H$ }" V5 B Uint32 sample;
# J) `9 I2 G E% W# N& H7 T e# Z& b8 {) L4 G& U5 A
sample = input_sample(); // read L + R samples from ADC2 x( z% r! ^ H. a4 s
output_sample(sample); // write L + R samples to DAC
N, | N; C; v+ z return;
7 o: Q3 g" i! j( Z}
& R, M' @6 ^0 j8 |8 ], z H4 E; V
int main( void )
9 u, k. ]7 r$ {{$ t- H. \! Q( t2 x9 u
5 n& b. |: P; y8 D
/* Initialize BSL */9 O1 \% Z: Z& l( d* D
EVMC6747_init( );
6 K* j7 _! h0 Z, e7 P: F9 {2 ^ /* Call evmc6747_intr function */. E$ x0 {: n0 S& K( d1 y) ~. V
aic3106_init( );5 U; U: v, F. N* `
while(1);- G3 X# K$ q- Q9 e4 @5 E
}' `$ Y2 i6 z7 h6 V+ r
4 x [8 N9 h/ d P+ w
. Y- ^; n* x& u% H% aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! }$ q) c) h% l1 ^4 ]6 g$ l/* Initialize MCASP1 */# ^- T0 l. ^) V/ d% x
mcasp = &MCASP_MODULE_1;
# F9 J; Z- F4 \* ? mcasp->regs->GBLCTL = 0; // Reset2 o6 i& u$ g, I- C. _. I
mcasp->regs->RGBLCTL = 0; // Reset RX- D* K2 b* a& |$ R1 j
mcasp->regs->XGBLCTL = 0; // Reset TX
0 T( [$ F$ @" G; L7 K mcasp->regs->PWRDEMU = 1; // Free-running7 Q+ {2 m5 ~6 u& u W7 w
// configure McASP0 receive registers
6 I/ n' u0 Y( n4 W mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used6 K9 ]( B' F3 p' F9 r3 y' u
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- `6 X }; x2 x
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 ]/ u$ X- q r0 p! V/ H mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& l J" ~7 t! k7 z* F, g7 { mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 T( k b6 N0 C+ Q7 M% n* I' r mcasp->regs->RTDM = 0x00000003; // Slots 0,17 ~% X; E% D( ~% e
mcasp->regs->RINTCTL = 0x00000000; // Not used
; F. \& ? m- t0 z9 i9 f1 E0 e mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* e7 x( l. | N C$ L1 G1 f& P n F+ q H! e& x( X9 R. ?0 C6 U; N
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
/ t$ w' m- F5 s) V: P0 U0 Y7 w mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- g9 N0 H+ o. { mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, ~9 l+ @0 P$ c$ W6 G. A5 L! f R mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 J4 [4 e4 Q$ U
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- L A& E" g, B( X# m
mcasp->regs->XTDM = 0x00000003; // Slots 0,13 v" I+ P. T) [0 Y& Y# Z! g6 Y( G
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, \6 z" ]9 ?: N3 X4 ` mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 n3 j X# d7 a) N
: \9 V6 i7 K! ~9 _, y2 U mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN% M3 p( Q& e! g. F4 G
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
$ `$ ~( x1 D1 |1 b; h+ _& P mcasp->regs->PFUNC = 0; // All MCASPs" ~; ^4 p; P0 \4 X- E2 E
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" ~" J" u* e4 U8 o$ p
6 \6 |" C( ]7 x
mcasp->regs->DITCTL = 0x00000000; // Not used
# s B! c( b5 I0 S6 _0 `* q$ r1 j mcasp->regs->DLBCTL = 0x00000000; // Not used+ j k2 z/ k4 C- ]
mcasp->regs->AMUTE = 0x00000000; // Not used
/ ]7 G% {) @7 M1 c, L7 U: R; G2 t6 b& H5 A7 h' h4 C, h1 n) P8 M
/* Starting sections of the McASP*/
* ?1 M( @6 O, e- Z6 G4 T, B mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; r8 T5 C7 F2 B7 a" `- ~. u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ) n! y* m* g8 t/ [% a
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % p4 q$ Q3 j' L) z p7 {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; ?/ n! G& a& X- ~: E% R
. q& \9 t6 O% t+ K
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* i/ g K# z7 g% D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 C1 V, g+ _$ U/ c/ t O mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & f Y, Q p" z, E0 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. n; S- |% U9 P0 \
4 V' d7 k$ g+ o# p' w/ ` mcasp->regs->XSTAT = 0x0000ffff;
' m2 I& J. z0 G$ }# Z$ x mcasp->regs->RSTAT = 0x0000ffff; 4 c1 B. l% w" F0 p
3 }* T1 e$ u% T7 f0 I8 k# w0 {
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! e# N$ h _5 C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! ?) r) u, R& ^1 o, q' b
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( s3 k* T* p" F' @7 P0 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) I% u J0 ?7 R0 n$ x, [8 e ~2 P2 y
/* Write a 0, so that no underrun occurs after releasing the state machine */) J3 |/ O5 Y: g7 @6 M Q
mcasp->regs->XBUF5 = 0;( Y6 ]$ K& F) R2 A/ C
mcasp->regs->RBUF0 = 0;# S2 b5 j* C6 D
8 K, }' T( P; X+ T: }9 P7 C" B5 g" d
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; H W9 Q+ H9 M: D. e0 G) z+ [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; F2 M. x* ~- Z K& U6 F2 s% p) j
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 O8 v: D. y4 T e) [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% R& z: c$ g$ a: g, G5 v# ~& m- [
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ ^0 [" E! X% Z+ R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 C' N X7 o" Z) i1 B: \9 L
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " m/ M5 Q' X: P9 Z& f( I! F! q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- p" Z7 k7 ~7 f( N5 q2 I( v# @; Y/ U3 J. d1 Y: d; `/ H: K! ?& b
CSR = 0x0000;7 b/ f+ j: ~" m. M( K; v- b
INTC_INTMUX1 = 0x3d;; Q0 H$ U7 K5 w5 _, B& w. t
ISTP = (unsigned int)vectors; g0 }2 G$ B# Q* l; s
ICR = 0xFFF0; ' t" T$ _+ @7 B! Y' Z
IER |= 0x12;
f2 W: Z; U7 { CSR |= 0x01;
2 P6 M+ w* p; \2 R
( H3 [! Y3 w, [# N3 ]2 g+ A
* O# {) o5 V# U0 A) T3 y( w0 V- r& t1 W% n/ w. U
还有就是两个输入输出函数:6 \5 V# P3 @( d- S3 C
void output_sample(Int32 out_data)
6 B- L; b1 a g/ F4 i/ I) M{
* w, ^0 d" T- `0 I; x AIC31_data.uint = out_data;
6 J/ ^1 y+ ^% p) V; h% K' ^ MCASP1_XBUF5_32BIT = AIC31_data.uint;( S5 K# Z; N) k9 j# p6 y, M( U
}
* |# u1 ?/ Y, k6 j8 [0 `, y3 ?$ M1 w L# j6 W% y, i9 Z) F
Int32 input_sample(void)
) o1 k7 @9 r" M$ \; N- ?{ ; A3 E' l, r+ M+ \
AIC31_data.uint = MCASP1_RBUF0_32BIT;: K5 q" x" o1 t2 W7 a
return (AIC31_data.uint);& \0 S9 x* m7 C2 ?; p
}
1 }5 m6 r4 R+ N, Y3 I* s$ _$ Y# b% |& ?. I' j4 p: |, `
|
|