|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& ~% ]( d, ]0 j% V: s4 C( rmain文件:9 p, G8 }, O7 R# _1 Z$ {: {0 t
interrupt void interrupt4(void) , W2 p Q0 d# w6 \
{ a: L2 s0 W; M5 p
Uint32 sample;# r) n; ~) Z+ A( Y+ u2 U/ j9 L
2 e) A* N0 h, h0 H sample = input_sample(); // read L + R samples from ADC6 _6 M. L6 R! F: a" D+ y/ U
output_sample(sample); // write L + R samples to DAC
( j5 Q- }1 L/ A% i% T return;) X% T) v9 r/ Q) M8 r
}
& P& z! v- l" P4 X, K# H4 E; b" X+ T% `( M& o- X; b d
int main( void )
$ u$ b: h8 ?, R! E! G% W% [6 K{+ L$ E! m- ^* j8 Z2 r) R$ \! \- K1 f
9 q; I# l3 l$ ^; a
/* Initialize BSL */7 l6 R9 k- {. M: G
EVMC6747_init( );, s: I* q1 H8 Y1 w" v
/* Call evmc6747_intr function */" g) D) P0 a- ]
aic3106_init( );
& v+ Q V( E1 B! @, D) @* F+ G6 E while(1);: p2 Q% J4 @9 r) |
}; F( X: |, _) z% Y# \0 ?4 v
0 Y4 P% g4 {: o2 J% X( O6 |/ v; J
# t' G; o4 O8 ]6 k& j3 {& n! S6 taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, h: b r- H* Y/ i& a
/* Initialize MCASP1 */0 Y' l4 h' m( k( M' Q+ e* Y
mcasp = &MCASP_MODULE_1;
$ [! ?0 f$ j! S( ^2 d: A mcasp->regs->GBLCTL = 0; // Reset r f9 [; e* u$ C7 O; Z! v
mcasp->regs->RGBLCTL = 0; // Reset RX
' A7 Q; l; h$ V6 N mcasp->regs->XGBLCTL = 0; // Reset TX
6 O8 X) f" G% g9 R. X7 P mcasp->regs->PWRDEMU = 1; // Free-running
* j& b) p" P1 Q; ~) a // configure McASP0 receive registers
5 F/ o+ [. a9 }& N3 ~7 C" T! `3 K mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' y/ F6 c X( o) i
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. i" }! T7 T* {/ v) P mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# R( t2 ^0 p3 p& e mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ x& \8 ~- u7 w4 z mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 B) p* w3 N' j! |. R9 Z, n4 B mcasp->regs->RTDM = 0x00000003; // Slots 0,1
- u+ \5 K. K9 `+ c. a6 p mcasp->regs->RINTCTL = 0x00000000; // Not used+ C5 y1 L9 K! ?5 W/ y
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 J1 t9 G# s' ]% z) F( C5 @9 g
, \. p8 r: a4 O7 p mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) A" z" h6 m* N% X
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# b9 p8 b0 ]8 |5 h
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word t; J; o1 k5 l. J9 w
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 W' R3 }( ?+ l
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK9 m0 ~# d( s+ B% g+ Q3 k
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
6 l( [7 D& N& Q1 Q) G mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" d2 i8 J4 g: n& a5 E mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 i/ r, \! n6 _' d( U3 f6 |/ h+ o' {! @' i
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) w3 A8 B- t; ]0 X7 K
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; b& s9 Q o2 R# n% } mcasp->regs->PFUNC = 0; // All MCASPs
% u+ C2 j. k: A {9 O9 s' W. \3 P mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 c/ I, H X5 t# }. f( f+ G9 r& a: x6 B6 y
mcasp->regs->DITCTL = 0x00000000; // Not used
$ l6 {. x+ p+ _1 }1 ?9 T* h mcasp->regs->DLBCTL = 0x00000000; // Not used
1 a J2 O4 h- V* b$ a! E) \; R3 A3 | mcasp->regs->AMUTE = 0x00000000; // Not used
% q! m) U& B5 N& N+ o; l5 L! ?9 Z: x% f, S8 o9 K6 q7 k
/* Starting sections of the McASP*/1 {) X1 h# p: ?5 ^6 [2 e; u
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; J' G* w* E8 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 2 Y' I3 W& t B
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, n8 j4 ~/ M7 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ ?4 A$ v% Q! _ D* R
% r. t3 ~4 t, D! A: W" L5 a- ? mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - x, B, o: v/ p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* x) X8 H/ h ~+ X9 K$ i" r1 R; ?
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & N5 Q! x: r* o; c' i. s, J8 t' v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) a+ N, G; m1 o9 U0 P1 c. P# F }7 ]1 w+ o9 V
mcasp->regs->XSTAT = 0x0000ffff;
, } o9 T; R7 ^4 h mcasp->regs->RSTAT = 0x0000ffff; ) X! f0 ~ _" u3 E c. S% W9 i( i
) U, r$ O9 I) }
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' B6 e% C6 ?& q9 j6 r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ c8 c; F+ y7 m9 |- h5 ~1 R$ V3 _ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! L: u* Q# N# o6 N) p+ D/ ?: r7 t# E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& N. p2 @9 f5 o( Q' h P
& e5 w( e* d) a( y- w @1 Y
/* Write a 0, so that no underrun occurs after releasing the state machine */
8 H {4 f- [; t6 B! C) ` mcasp->regs->XBUF5 = 0;& n7 ?( }5 p, \, _
mcasp->regs->RBUF0 = 0;
( P' i+ Z3 R5 D- O3 {& Y8 }6 g* G# F: F& M3 X; f& L1 |
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 X0 r- z% D. K" E4 N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, X7 U5 W0 I S1 I* z ^, z0 s/ F L
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) Q5 P3 N! B* N" ?; ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" e4 V- D2 l2 q8 ]" r% C, r3 L
6 | k3 j" K/ Z$ O+ n mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . R7 S0 O0 i* {6 J# n- i# |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: ~4 g5 s! ^, P: K6 H5 L mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" P( \3 z: Y) _; i( w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 @; U( J5 B, J% A: B+ M+ Q
: G q/ S5 w- @* y3 }2 B. s
CSR = 0x0000;5 R$ G, k+ P! V, Q* E' F
INTC_INTMUX1 = 0x3d;$ J. g. V1 _: q5 k8 ]7 L
ISTP = (unsigned int)vectors;
" a+ z& o6 U- s8 ?6 p+ V ICR = 0xFFF0;
7 F# E9 ~7 ?, h$ q' L; C( v9 B IER |= 0x12; : T$ ?9 e! J+ i) s5 d% _( w
CSR |= 0x01;
. h$ x: v' ^) U- ]. R
2 o* o; ]# P+ D7 w9 G/ a, |, { X4 ]7 M. ?# y
/ ]7 W, l6 m& v- O2 G( S4 _还有就是两个输入输出函数:
2 Q0 y+ [* D0 Z! p+ b Evoid output_sample(Int32 out_data)
/ y2 J o+ ~8 l7 \! G0 g{
4 T1 n! T4 }7 Q6 h! r& q2 u AIC31_data.uint = out_data; * E0 U& `7 K8 D" k+ k/ u9 L
MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 T$ r, d+ i$ v/ ^- j- S8 p}. x! z3 X+ Z2 |; @( C* S
1 q) w1 j# q7 r; l& H0 s4 d( o: C* y
Int32 input_sample(void); ?' ]3 w+ h4 {: d% R. ]
{ . s$ Y3 Z: B4 r% o, u) O: x" o
AIC31_data.uint = MCASP1_RBUF0_32BIT;
% B, y+ V* ?, B# Q# B! ^ return (AIC31_data.uint);% N! g6 K- z3 G7 i9 u- e
}
/ Z. C+ O* h& o) I, T' r- S
! A5 x& R# G) k7 V4 K |
|