|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ u# S3 N2 _( O1 W w: Bmain文件:% U% }6 m+ z* r: `- t
interrupt void interrupt4(void) 8 X" l0 K7 q* T
{# F3 J) v; Z/ d) }9 v8 P/ C+ r
Uint32 sample;% c G; Z' K# Q( \# A$ E! m
: S+ ?6 @7 N/ x
sample = input_sample(); // read L + R samples from ADC
( h! P- {' Z' P$ ~' r+ m) M output_sample(sample); // write L + R samples to DAC 4 \( @" ~9 f% `
return;* J* k- c8 ?( [6 P; O
}" a5 T. p5 r' Y6 u9 _# |; p9 g
# H& K/ Y0 O. i& R- R+ x: vint main( void )
7 G2 i4 [ J+ W* j1 d" o5 Y% Y{! ]$ ^5 Q; \* u Q J
) n) O1 t1 w& z0 z/ @
/* Initialize BSL */
; z7 N f0 b: T. ]) F P EVMC6747_init( );( n! L9 Z# E: }' g8 D
/* Call evmc6747_intr function */
1 g! V* ]6 W) K8 s1 g aic3106_init( );3 ]& u% S& w a5 o j7 m
while(1);" G& T9 o# W! K# j
}
6 F. i; d8 ^, k# r# W1 O. l; `
, p! L% x A z9 laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ n- \) ^! ?7 ~/* Initialize MCASP1 */. |3 f3 E( i9 V+ c1 p
mcasp = &MCASP_MODULE_1;& ]0 @7 S3 J3 T$ w" Z% V
mcasp->regs->GBLCTL = 0; // Reset
" e ]3 h' A( V- `3 h% d# M mcasp->regs->RGBLCTL = 0; // Reset RX
1 E3 ?+ a% j- Z; h: E mcasp->regs->XGBLCTL = 0; // Reset TX
/ D$ E$ m" f9 o1 U/ n* E8 i t mcasp->regs->PWRDEMU = 1; // Free-running
: E4 p4 h1 S, P" U* P. Y // configure McASP0 receive registers
" O( O6 }# s' M% ] mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used6 t0 ~, N7 ^' b' [. ]& }, i
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# O+ r4 l9 z" V9 }( h# G mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ _# ?" b. q2 {4 b mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ c* B5 P1 y# W- F# l8 H; ?, @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 ?8 p* a. z% b8 b mcasp->regs->RTDM = 0x00000003; // Slots 0,1% b: `1 s1 r m- y; R/ x/ o$ s
mcasp->regs->RINTCTL = 0x00000000; // Not used9 m1 O2 c. o0 ~7 n: D# j
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: |2 |" t$ a! ?" E. G
& o" B+ V/ N2 a% F& u3 N mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used; i M9 a/ k1 ]6 V7 a0 Y8 I
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* H$ S! E/ k; @# ]5 Z, s; H
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! I9 ^. \0 M+ }3 H2 s( U2 ]" K
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% O: U& W2 I0 \
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK# f/ r, K* t+ b- l7 R* H5 P& D/ f
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, R, O* h! N3 j. m1 ]1 N mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# `; x8 N+ e" O7 I6 M
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' B+ R" l9 C1 q& o) `+ Y* u
6 M8 W2 T+ i% D0 t mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
0 s! [4 T0 c* f6 p5 r9 I2 C mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 x! X/ l: u+ k/ ^ A
mcasp->regs->PFUNC = 0; // All MCASPs3 n* d( C9 q0 A3 j' Y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 G, C5 o# }, @+ ?, F3 V, y; |- Q# q3 e) Q$ |
mcasp->regs->DITCTL = 0x00000000; // Not used
) w- T) D, B7 M% u& Q8 w5 C* m7 D mcasp->regs->DLBCTL = 0x00000000; // Not used
. P4 @7 k, F2 S4 } mcasp->regs->AMUTE = 0x00000000; // Not used
/ K; z8 {3 w' U: ?1 r( z
3 [0 C/ _" X: d/* Starting sections of the McASP*/
) R" E+ B0 I' O" c mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 v" N0 x% m: @5 G* ~8 ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , b! o( Y7 q9 i/ U; @
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 U4 ^& S2 X4 Z/ U4 t4 }; v4 {5 y& Z( P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; M' R# U* |2 n# ^+ |$ ~2 p7 v# ]! q- K0 Z8 P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / f; {- }8 v3 P0 f6 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( e4 [/ s- n$ `# o( B3 ^3 a1 P4 z mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: ]! \' I G y0 }6 C: e- u" z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 J V( J; l! K% Y+ C2 k4 c. ?
8 U* c/ h! B" q2 N9 F7 Z" q/ u; |
mcasp->regs->XSTAT = 0x0000ffff;
$ y7 F7 ]$ ?0 i$ }4 a- c mcasp->regs->RSTAT = 0x0000ffff;
4 {# z% G# B- B0 e
5 _, M W5 C6 ~: I6 a% |; } mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% I5 K# i9 D2 J1 M- a- L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# O$ P' q* C' H mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 L# b- J4 y+ U- n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. e7 `0 n1 g, D& F/ O
1 E) x6 \6 |" @2 D4 c. i /* Write a 0, so that no underrun occurs after releasing the state machine */
O3 I& F% W& I8 N7 c mcasp->regs->XBUF5 = 0;7 K% \! c7 B( x2 n7 g+ G; n
mcasp->regs->RBUF0 = 0;% I4 ^1 X }: C; u4 |7 `9 _
) j! Y8 ^" E: Z mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! e; M9 a$ u5 k3 s5 s) x5 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ h) }0 L: Z% V/ s9 @; T! F mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 N* H# @/ D; b$ X( Y( _# B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# ^: X6 S! l6 P6 ]; s3 C( h, f
5 N, u, g; E# O% R! g
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ A2 M2 C# a. s# O. u4 M/ K) J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 \1 X# B- K2 ?! t, p mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' }1 V1 G, S& X9 ~" w$ t ?3 K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( N, _, f4 x3 N8 d( N7 d9 ~
6 ^5 e/ @8 E3 g; a* M) v CSR = 0x0000;) ^/ Q+ I3 l8 ^
INTC_INTMUX1 = 0x3d;
; D6 ^0 n1 H7 j, a Z* n I ISTP = (unsigned int)vectors;# M5 J( B! u7 G2 g( b
ICR = 0xFFF0; ) H! D: [- Y8 U3 s% p+ F* ?
IER |= 0x12; * m7 S* S1 w/ m
CSR |= 0x01;
' ?* ?+ a6 Y" V R
2 f" _" U4 |$ h' t* O" B
e y- W5 ]: Z( b, p/ P- ]* ^% s+ P/ _9 v6 O7 `+ | B! t* H: H/ g
还有就是两个输入输出函数:; ]5 `3 C" r# f( ^8 _
void output_sample(Int32 out_data)1 O \8 j z" M& z0 ~6 `) u
{
( u9 a6 N2 ]# B9 J6 z, ^9 T AIC31_data.uint = out_data;
) C/ A5 W( [$ B& P* ?2 j! f: X! E MCASP1_XBUF5_32BIT = AIC31_data.uint;
: v9 ^; `4 @, E4 p9 T}
: \) j% b/ B. j9 p
) K9 Q! T: {# ~, _) ~; YInt32 input_sample(void)
8 P; c! A: D! Q' c. N{
& V9 j+ M8 a4 d AIC31_data.uint = MCASP1_RBUF0_32BIT; w$ H* y) z# y+ w9 i. z8 n
return (AIC31_data.uint);
" l' n# a' G" W/ D. E; j/ m}/ R0 w' N* G- J' H; e0 R2 K: q
# U B6 J1 F. n9 L |
|