|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 G, j6 [, g( F$ smain文件:% ~6 L1 k0 k# T @3 W: z
interrupt void interrupt4(void)
0 V+ ^: c; k3 K! \8 ~0 ~{. Z' j/ u% c) Q' F* C, i3 G
Uint32 sample;
! Y4 Q9 R% p t/ M
0 h; _& n! a0 o# N7 t# d sample = input_sample(); // read L + R samples from ADC8 [7 W( f L9 r# O3 n [
output_sample(sample); // write L + R samples to DAC 0 P1 |7 J6 y" q8 _& d
return;! G4 e$ \+ s+ M; C. p# I9 A5 d% H
}' e6 s, @2 K) H* l
1 m, g+ T, ]" {9 I4 R( X3 E4 W/ z
int main( void )
" c/ \' o) C$ J, r( F{
I2 o5 j, J5 h. k# e% S; r6 `
/* Initialize BSL */
* |- f+ x8 p& {" M8 p6 ~ EVMC6747_init( );
7 ` C' n7 }, x& S /* Call evmc6747_intr function */
/ M. `( \7 h- i* a aic3106_init( );! L' Z' D/ a7 N* x" C8 N2 z
while(1);9 n q3 i; C: j$ r- T" e4 Q
}
- O+ D3 S; p, v0 Z. I
: C/ @3 n) G/ C& ~; V$ v7 K. T( a$ I+ q1 V: L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 J. z! V# v1 U0 S% U/* Initialize MCASP1 */
0 n \! s1 E c* f* M, e. M3 [ mcasp = &MCASP_MODULE_1;6 e+ i$ f, N1 K$ ?' D, O5 v
mcasp->regs->GBLCTL = 0; // Reset
$ ?& Y0 k" F' T4 ` mcasp->regs->RGBLCTL = 0; // Reset RX3 L1 N! t2 ^+ C2 V6 C2 l6 }
mcasp->regs->XGBLCTL = 0; // Reset TX
7 D: p9 O! A0 j+ u mcasp->regs->PWRDEMU = 1; // Free-running
2 @' k, U1 H3 S# t/ o/ I5 W1 [ // configure McASP0 receive registers! x! t: F4 ?% c. @! T
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, {$ G) ]( ^5 I+ ] mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" i! T4 c; r6 ~& K5 E8 L0 d1 J mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 R8 Y) C5 Q2 d" O mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) t2 u* F, [/ c, @* ~ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 o+ D1 x Y1 y% s& A6 S4 \ mcasp->regs->RTDM = 0x00000003; // Slots 0,1
( }' F8 J' t/ i: R& l" z mcasp->regs->RINTCTL = 0x00000000; // Not used# {; f: z v: Q1 U h5 v" p/ ^+ v
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 I+ j {& ^$ l- f: d0 q7 H1 R
; d3 ?4 u4 P, T; f, E
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
$ I/ d$ u' }2 E0 d: W- B1 I% i mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" _' [& H" W" G$ g7 s mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! C3 j) W7 r# Q& M& N) T7 k. U) B
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 B# l* A% m5 R, |3 D mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 N8 I3 `- m$ c E1 U1 D e
mcasp->regs->XTDM = 0x00000003; // Slots 0,15 w2 u/ M! d% @, e6 p! v
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! A5 p8 j P" S6 \5 T3 i7 K5 q* p mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 }1 Y' M/ A+ k$ F
+ t4 ?& L1 u% k mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN% C& W% w' `( c: h$ M8 W: M! |
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 ^+ \/ G5 R2 ~2 [
mcasp->regs->PFUNC = 0; // All MCASPs5 h2 ?; H2 y1 v
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; o' r3 H7 S# e, g9 E
5 S0 d# m- O2 m" Y5 }( E' m: l! f mcasp->regs->DITCTL = 0x00000000; // Not used B( D ~% w5 [1 ]% Q( x5 Y
mcasp->regs->DLBCTL = 0x00000000; // Not used) |/ J- c8 ~9 _, w4 ?7 T
mcasp->regs->AMUTE = 0x00000000; // Not used
$ d+ L; i8 M+ x$ ]/ a
! V' q$ Z6 N6 h) z/* Starting sections of the McASP*/
* i1 I, } \" L mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# T6 D0 z+ P4 ~6 c7 `, x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % E8 N2 R& _) l. b5 p2 E
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 t! K3 M2 I) V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' b8 p; j3 _+ R! p! H1 d$ y) ~5 H) o
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / h% z' X" `+ G4 ^- B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( [) g- H9 j1 a! d* | mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 A8 e2 l: l; Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: O; s5 @ F: t" \7 u' n2 |
6 [, l: N7 E5 c6 Z mcasp->regs->XSTAT = 0x0000ffff; 7 a; m. [ V, o/ {8 N6 \/ F) ~
mcasp->regs->RSTAT = 0x0000ffff; ; h* S. j$ r& s P
: Y$ M; n7 W" _$ n7 d
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. x" i; `' T. u: p) D4 I$ { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 V/ M9 I8 y: u5 b* Q% i
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # y- D0 @* f) J2 c$ J! L- n$ p5 K% m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! Q9 N# w. w+ z8 b, Q0 N
8 P9 e, R, j9 F% Z: }0 h( }* \! g
/* Write a 0, so that no underrun occurs after releasing the state machine */
9 G5 t& |' E! E# X+ B" ?, A, @. V' b mcasp->regs->XBUF5 = 0;
: J& I7 l* I0 a+ w mcasp->regs->RBUF0 = 0;% p3 F- C% T0 ^) `) L. l$ m) s
9 r% ~; D; H) L" q4 h$ q) s) T mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 e* n* g' A1 f5 U! B9 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ Y+ k& ?: b; h/ C mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # _7 L; d; d7 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 H# u$ f0 T) d, h
5 Z: ?3 t# |1 L0 {& s+ u mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / a2 {# ]4 b' a0 h$ ^# d' x" b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! D, f! R5 B; l" e" U$ q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' e" e( B& a6 T& X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& N3 a! _' Q/ n4 I* ^2 M& U
) B* L9 \" ~, b8 z# O CSR = 0x0000;
% z! b( r% V- b. x7 |0 B INTC_INTMUX1 = 0x3d;9 F8 `1 M, h( w
ISTP = (unsigned int)vectors;
4 S4 }/ t1 w/ Z" o9 ^. m- f7 | ICR = 0xFFF0;
( g1 ^" P2 G" ]: \* E1 h IER |= 0x12;
( f( K5 x, z3 K' \ CSR |= 0x01; % w3 K& N- {( \( k% C
- F+ k, R4 {: ]" S/ F1 f
( u3 Q3 A: N. T. F
4 o8 Y: \/ d" t/ C9 _还有就是两个输入输出函数:* I- O8 |1 V4 C) I. n3 T9 Q @
void output_sample(Int32 out_data)
* h4 y* o7 I+ W7 i5 u{$ z1 @9 N9 ~5 y- z g) n
AIC31_data.uint = out_data; % u1 p! y2 q7 n
MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 ~! l" [" D& L& ]! T}
, c$ k7 ]8 c$ O, Z% p3 e% Z1 n# j4 q9 b3 S5 v3 i
Int32 input_sample(void)9 B6 X2 o! \9 u; S( {; _, O
{
. O( m+ q8 ] T- G0 ` AIC31_data.uint = MCASP1_RBUF0_32BIT;
, W4 ]0 ^0 I6 Y2 {7 I# c* O return (AIC31_data.uint);
. h) A4 O. @+ c# z}% H7 `8 ], {8 x! W
) B. F9 D4 i! r) c' }& B% @ |
|