|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, J: I; ~* ]0 v- g6 u6 Q
main文件:6 U+ |6 b7 ^) e- g! v( {4 B2 e0 Z* ^
interrupt void interrupt4(void) & ?3 X3 w6 w$ [9 c
{
6 A: l+ {0 o7 S' s2 O. [ Uint32 sample;
2 `; G8 R# l$ e# x5 G* u
& m3 q# p: F5 r% `5 v sample = input_sample(); // read L + R samples from ADC
* e) N j; x0 S0 c* t( O output_sample(sample); // write L + R samples to DAC ; L$ ]3 |' H# L5 U& S/ _1 v
return;
% \% u! J/ ~) f9 |0 u}
, k; t# ^' ^% y- W) O o# {) v% b( d% q5 w% v
int main( void )+ w6 \! C' X2 q) v& t% y! i
{3 d7 l: z7 Z% E8 x: t, V
2 o4 I$ a$ T- C/ P; }% ~
/* Initialize BSL */1 K: t( d/ L+ v: g/ O' h! _
EVMC6747_init( ); V9 P( \' _/ w
/* Call evmc6747_intr function */
5 ^# k8 ?% j, t, W2 u aic3106_init( );7 F) k7 f# H1 H$ C7 Q
while(1);5 o) ~# f a$ |- e# b
}
9 _' l9 t0 U: z" K" d5 e# Y. _& P q* [4 \3 E& v
; S! l7 f0 x( {. ]+ Q" _. \
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! @1 q- H" n/ p1 G* R/ A8 E0 h, a/* Initialize MCASP1 */0 r& B: o+ r4 T" S6 _! ?
mcasp = &MCASP_MODULE_1;9 Q- V o6 G2 |0 J, S! B# e& w
mcasp->regs->GBLCTL = 0; // Reset0 r2 Y' b0 a' b* x2 ?) K% _4 J/ P! g
mcasp->regs->RGBLCTL = 0; // Reset RX
% E! t2 ]! K& ~9 e% V: ? mcasp->regs->XGBLCTL = 0; // Reset TX4 ]2 F- i' i a
mcasp->regs->PWRDEMU = 1; // Free-running7 Y/ b2 H& G1 w8 {! h) k+ M
// configure McASP0 receive registers
( H/ b. U/ j+ K2 L$ x. L! o1 { mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% f9 U/ p# v7 a( Y+ a mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ k' a/ Z4 o8 Y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- |$ A' F: }+ v; u
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- ?3 ^: \. b/ M: B: d6 _ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 b1 T( @6 z3 Q mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* e. ~8 f! ~$ ^' A" V mcasp->regs->RINTCTL = 0x00000000; // Not used
; \9 k+ O" K; s9 R# B } mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ \& o$ r: l5 o
' S4 m0 v6 |" o" m, j0 A0 S7 T
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
% E* I: l. s5 k7 n. {. S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" L2 Z7 |! W, @* {- C1 d mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; p: {. V' ^! o3 A* h5 f
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 K! k5 e6 X0 N; g+ {, ^6 C mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
9 h: ~: I3 U$ h' Y mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' o3 B# C2 z& M+ P+ }3 y, O mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, e6 g1 {; g+ [6 v mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* B: V7 h. M+ A7 a1 P+ O: T
Z' K5 }0 Q' u2 r* t mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
, e3 G* @! g7 z" ~6 ?2 t mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 H9 K( l9 J1 v Z: @; r" g
mcasp->regs->PFUNC = 0; // All MCASPs
% S6 s! |" k4 q1 l# j# O3 u mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 u# K. `6 V: N/ x1 o
0 |) U" z; c4 P& w. J mcasp->regs->DITCTL = 0x00000000; // Not used% @2 x6 _+ D* @
mcasp->regs->DLBCTL = 0x00000000; // Not used; X; n" T, F) j5 w: O6 e
mcasp->regs->AMUTE = 0x00000000; // Not used
4 r: [+ Y# L$ U/ Y4 _" r7 u* v5 z) n# n$ d
/* Starting sections of the McASP*/$ x6 V: O$ O5 k- D6 G0 ]2 {
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + r5 w! z9 j4 K4 Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # j; o/ N9 N+ \$ L! Y" }
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 E8 A6 E) ~+ F ?9 d: o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! @. G1 ~: A, ]' r
3 @/ g( h3 k! q& E6 Y, Y
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ q8 b% B' w6 d0 K% } u0 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& W/ Z1 u& P' c4 @$ h$ s. h
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + \4 K7 q' C4 T7 f/ U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 W9 i2 F, W5 _& Z0 u# C& `
* T# D) E2 R Q; O: e$ A6 l mcasp->regs->XSTAT = 0x0000ffff;
7 c! l- H0 G, v mcasp->regs->RSTAT = 0x0000ffff;
J) x+ D2 {$ @6 L4 [* j7 Y$ ^/ \# s9 G: H8 U6 r
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 F* Z# n3 z: e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 u' I/ a( z! l mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 _4 x$ U, ^: q# b& J; X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# O4 [7 k8 Q5 A& K4 }$ A
* Y: F9 B8 k! s /* Write a 0, so that no underrun occurs after releasing the state machine */
1 a/ Y" c$ p8 d/ y8 H/ ^ mcasp->regs->XBUF5 = 0;
& J! c+ s% w/ z6 W. y) k# e8 E mcasp->regs->RBUF0 = 0;
$ j+ L: x# t: A3 i2 B V3 M
' l* l% x( a: D/ e* G% p; M( P$ ? mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' B4 V5 G! E0 v# \$ f. b9 O; S7 J% w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 k3 k; p. r0 d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# h! Q0 Y4 f* S/ W( p, D4 c3 n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );/ D$ y1 i( {, g6 z
7 o6 [' k; D5 E/ a mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . W$ p) ^- ^, g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 ^' I4 m4 V- C! ]: ?0 S
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * [4 R' x7 O, X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, H7 n5 [5 |& K' z6 J
+ U- K! U r) k) x1 P A$ N
CSR = 0x0000;
& s% X, B; `. V- N/ o4 d% l INTC_INTMUX1 = 0x3d;+ ?+ _! x9 `1 y: ^1 u
ISTP = (unsigned int)vectors;
0 a h) |1 q: M4 f; N5 y5 ~ ICR = 0xFFF0;
2 H3 k" G/ i3 q& E IER |= 0x12;
- i7 V3 P! g/ p CSR |= 0x01; 7 |( Y: W* g( F- W i* {; K) C
1 B8 N: b4 _# Y
% @/ g8 h4 J7 c! a$ R
. w( k$ E0 w R' S还有就是两个输入输出函数:( d* W" T, E. I x. U* D0 F& v- M
void output_sample(Int32 out_data)
7 C+ P& h( j3 f1 E' }{& {3 ?3 ~; L; I; [, P
AIC31_data.uint = out_data;
4 X# m8 B2 V8 e | MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 _4 X; y6 ?' t% i+ @0 J9 @}
2 ^# X7 m+ B0 u9 m6 t7 D u/ j
' o% [8 \( v* B$ ]9 v' W6 _, n! UInt32 input_sample(void)" M, H) H, W# n E) V8 p
{
: @. c! O2 X+ b) w8 L AIC31_data.uint = MCASP1_RBUF0_32BIT;1 |" |& o7 U) }; D- x
return (AIC31_data.uint);3 Y' w) V1 H2 d; w, a
}
9 s- H. N2 n5 v& H3 K
4 ], r3 G$ N6 r) q9 B! ^ |
|