|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: \! ?. _) H/ ?- A
main文件:" z% f# {0 K- @4 k1 \( b7 M2 T
interrupt void interrupt4(void)
/ V1 p( f7 J: e$ {) ]{
+ M7 c1 J8 K8 }; j9 k& a- b. t8 G Uint32 sample;( P. w+ @' D* v" H v( P0 {' ^2 g
3 {7 H6 r9 ^8 o4 f
sample = input_sample(); // read L + R samples from ADC$ s; D+ J/ A1 s6 R; Q: Z. A! m: M
output_sample(sample); // write L + R samples to DAC ; G: n5 d2 n& c
return;% W9 D5 l Y- C
}- U2 o3 b! S. \
* J! Z3 A' U* T0 D! ?
int main( void )" T; ~/ l1 E% c B# u7 @) V
{6 U6 {, d* Y" D& V
4 s4 L8 C6 [ D& l, d
/* Initialize BSL */, E$ E: m( v3 Y$ L
EVMC6747_init( );
$ V" \$ p7 |* E% K; z( z/ U /* Call evmc6747_intr function */
) w# ]; Z4 _3 h1 ~2 Y, A aic3106_init( );" o* D* I6 j: G" I8 j; m" _
while(1);
0 Z9 I# j$ n t5 ?. i# E}
3 u6 T, M; Y9 U. r# `+ h, G2 O- p' F3 D$ d, f
( g+ g2 M* @( A7 Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 L- Y+ U+ @/ V0 T$ H5 V
/* Initialize MCASP1 */
% g1 t2 A0 t" v# a% n* Q5 E& N mcasp = &MCASP_MODULE_1;
: T' i) L8 T+ V, \ e mcasp->regs->GBLCTL = 0; // Reset
" `9 m* i8 D5 `- H n8 {9 l mcasp->regs->RGBLCTL = 0; // Reset RX: N5 X7 K! t# j! ~8 l% I
mcasp->regs->XGBLCTL = 0; // Reset TX: h! g0 d- o1 Z, l' |
mcasp->regs->PWRDEMU = 1; // Free-running+ X1 V1 K' d0 @7 L5 q! u( _& ^
// configure McASP0 receive registers
0 g0 T/ E- |3 M; h: } mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
. O. t7 a! x, E* G2 n mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! ?5 U, i8 Z: J8 j9 l mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ T( B: A) B' n8 }8 V2 F mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( K1 x/ ?7 n8 H" I s+ A mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 \( S" r( s% e6 w( G/ s mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 A( B6 T4 l$ B mcasp->regs->RINTCTL = 0x00000000; // Not used
1 n5 F A( E; b: v/ \9 L9 G mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 u9 i! |9 ]4 M9 O5 v M
2 d) O! q+ v5 U# E( |- U
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% @2 L7 c" T9 b0 l2 K; k. a- w
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% p& \) L# [9 X0 M9 ] mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 j6 M* a# C9 k' Z% @ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ v, E/ j, D8 Z) i- T2 t/ b
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK+ W" s( H) b4 k) K H+ o( F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 ?4 Z4 s: g: `( M mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit5 p( q0 t- B1 z, j- d
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* J% \. S' [9 n% ?" Q B6 y0 w
- C# E1 t# Q9 L( x' E3 m
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; U; |! i1 D" d; D( R3 _4 X8 g7 c
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT+ y6 ]) l4 | d; i L
mcasp->regs->PFUNC = 0; // All MCASPs- _& ?# }$ P- b5 J [# @9 |; j: c
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ D: s# r# E9 F7 _& S
2 U2 |7 a6 N/ ^( M" Q4 q: L( I
mcasp->regs->DITCTL = 0x00000000; // Not used
/ S. a. u$ n' }9 D2 f5 Y mcasp->regs->DLBCTL = 0x00000000; // Not used7 Y9 o* l* N# ]0 |8 [# z' `
mcasp->regs->AMUTE = 0x00000000; // Not used# b( b3 s% P' P5 N4 s
7 I- \( |! b' S- ?" @4 t0 \
/* Starting sections of the McASP*/& J. ]7 u8 B7 ?0 m& X$ O
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; E' N h* M. V3 V1 s7 U4 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 y/ k+ W$ h6 Q; b6 g# C
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . q, [+ W$ B6 j4 z% ]8 R5 K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 w2 [) \3 W1 i. [
' D" h* ]4 ~/ c& n7 j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( f6 ]# m& s! S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 l9 Z# s( O$ M( u1 f: _
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 w3 d/ A3 l0 U8 o# E" X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 `' X+ S/ ~; n* j3 B+ [& U; R& w& [6 b" g3 @
mcasp->regs->XSTAT = 0x0000ffff; , ~! S- Q8 ~; \5 Z/ C
mcasp->regs->RSTAT = 0x0000ffff;
7 }( N' m: m g e2 n, ^# ^1 X. ~; z* Q8 n( \7 M
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 _0 G& W4 Z, g; T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ M9 a& i- D. ^& W. v1 @
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - X5 y5 X5 V- d8 p7 x) C. h. \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; B1 T: W2 Q9 ?+ w
0 X0 d9 x4 a5 F8 M" w# z2 F /* Write a 0, so that no underrun occurs after releasing the state machine */3 X) i1 E4 i+ u1 d2 M- O
mcasp->regs->XBUF5 = 0;
1 o0 ~ f& j5 q- ^ mcasp->regs->RBUF0 = 0;. F# q, f2 a4 b1 q5 x: W( Q
; ^! n( _ _) @" F mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / Y4 x" R* c6 d/ X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# U- z& H8 K& H# c- g/ }& v
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' }4 |3 ~( u; Y1 @ I2 a! X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 W& G' t$ w1 B% P p6 N! f
" ~+ V( l/ ~0 M7 [; [- [6 B mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 y- X4 V) \+ |1 E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( F% Z; U* N8 Y1 y* X/ p mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 V; t0 L; c- M5 b7 ?( s+ d( H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# L3 b% b X1 V4 a! h
* X/ y4 e3 W- W4 J
CSR = 0x0000;5 h6 d/ `$ O* i. N- l
INTC_INTMUX1 = 0x3d;
( h. \. h, M' ]' H ISTP = (unsigned int)vectors;: c1 U1 X6 l2 ^3 G1 ]$ x: g. |5 R
ICR = 0xFFF0; 6 J0 C/ Q# g I
IER |= 0x12; & C. S6 T; t: i- z
CSR |= 0x01;
% I# @( x* k$ c
+ f _5 Z% C& S6 A; _: [
6 F- q l, B, P6 h" w, o! ^+ |! X% G0 Q2 ~2 b" I' R0 t5 y
还有就是两个输入输出函数:
) `7 e C! D6 e" f5 d- g& Kvoid output_sample(Int32 out_data)7 V+ X8 G5 G1 E# K" K' }" m+ f; I
{4 _9 }# I0 o4 ^# u; l) @( W* T2 b: Q
AIC31_data.uint = out_data;
) g D0 P& m9 C8 i MCASP1_XBUF5_32BIT = AIC31_data.uint;
( S) g# C! x3 R+ _6 K: J3 v}
: d8 ?% ^9 D& V6 h0 l9 w" U$ K& f8 W, |' I0 m% |
Int32 input_sample(void)
# E, C0 f! K7 {/ E/ r: e( W{ , F! l+ k/ A' ]/ N: F5 G) D
AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 O4 D" M+ o; M5 V/ w1 y+ ~1 f return (AIC31_data.uint);$ L7 n* F* V2 n6 c5 G7 S( G
}5 Z5 p/ X- i$ Q1 r7 {# L' s4 h) C
6 W5 n/ B, O8 i7 ~9 p! r
|
|