|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! T' {9 j' R# D7 ~4 W( w% u6 e; u1 ^ I
main文件:
/ M: X8 {' \9 Z: Qinterrupt void interrupt4(void)
, n$ f' k: @+ `$ o" u+ q8 `7 J{# \+ Y! ~: m. h* K& A( m9 s7 n
Uint32 sample;
3 |# d$ D3 o M4 T3 u& q+ e& O8 Q e: G' Y2 s
sample = input_sample(); // read L + R samples from ADC6 x/ W0 ~! D$ O+ \) d
output_sample(sample); // write L + R samples to DAC % J8 s2 V) `: }2 ]4 S
return;
) ]5 ?: e) I h) d7 N8 P7 N}" S) M8 n+ V" p$ b8 ?4 @ a' n. j
7 c/ I. a0 W9 S* p3 [
int main( void )4 m1 M; K0 D2 C9 x" X
{6 K* l! {' L7 v: ^
8 d6 L Y: x7 _/ S: s8 D/ o /* Initialize BSL */# |$ w$ H$ @* _5 r, E; D9 f* `8 F5 W/ p
EVMC6747_init( );
8 `6 P5 z& L# k* f /* Call evmc6747_intr function */
2 e$ _$ Z/ k) u; \! E+ w aic3106_init( );/ @. i: f* x8 K" V0 R- U5 y
while(1);
6 C+ y9 h# c, ?4 W8 [: a}
: u: b1 y% W$ D, g2 b; S5 }! Z! m1 ]! _4 a( q
# w; l, w# K; X& p6 y: Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* w# g& }6 h% L- q1 D) M% i
/* Initialize MCASP1 */% _! W- ^2 a2 A2 h! e
mcasp = &MCASP_MODULE_1;$ k* w0 [4 u1 ~2 [- U+ U
mcasp->regs->GBLCTL = 0; // Reset
|4 c' n% f* V [6 V mcasp->regs->RGBLCTL = 0; // Reset RX' P) t* c' b3 f, w
mcasp->regs->XGBLCTL = 0; // Reset TX
( O: S7 _0 R# R% u" y mcasp->regs->PWRDEMU = 1; // Free-running! z1 R1 z5 {0 u* }8 b# E
// configure McASP0 receive registers
4 p+ m" s' }0 J( I2 ~; Z mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; C( a# x) m' u
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 j4 U: Y3 L! k% D! I6 J9 L mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 D' b1 }: q, g: K7 c1 j' F9 D) ^5 w
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" L! s7 `0 {/ e% Q' N: }' u* a mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" X* [% r0 }: C% w1 t mcasp->regs->RTDM = 0x00000003; // Slots 0,1
# E) L/ i) X4 T mcasp->regs->RINTCTL = 0x00000000; // Not used
1 r$ |+ t; _: { mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; ]+ g: b8 z/ R' H$ W3 ^6 a8 \/ B9 R9 ^% y, K: t
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
% V$ y, n/ l) C- P# C mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 O2 c; y7 W+ ]. R mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 O O4 r& w3 m- k/ j; [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 h7 M- N- V2 ?5 e2 Y+ d+ x! c
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK1 h8 S- I4 Q' B5 t J
mcasp->regs->XTDM = 0x00000003; // Slots 0,17 l6 u: q" o0 W: |( t1 m1 C" C# n
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 c# ?9 U9 q* C) H5 M7 q mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% h5 X+ m: f# |- e5 F- m* r
7 H+ [& t( w& A6 R9 ~7 ]/ [7 i
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) n9 c$ N+ o; a, R
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 |* X' v+ K# u# C1 X mcasp->regs->PFUNC = 0; // All MCASPs& ~$ S7 t3 W- X ]* |! a8 V
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ w9 ` U6 w# [7 N' q
1 d" \" O* N2 ~7 c4 @* J mcasp->regs->DITCTL = 0x00000000; // Not used
& _% i" k' k V/ I5 B5 B mcasp->regs->DLBCTL = 0x00000000; // Not used1 ^) V* b5 T8 c2 |( Y* u
mcasp->regs->AMUTE = 0x00000000; // Not used
; e4 Y( O7 b. V9 j3 L( I8 `# ?& _! y
/* Starting sections of the McASP*/
5 l; H& s3 L$ W' N% \ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 k/ J5 r2 X" T. T9 I* f+ R: V d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ a1 v. v) n7 U" x& K
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : o( E/ Z& T. V' C% o2 C& F( L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( }* O/ e9 i5 D0 W+ m- T% h
0 ~" i6 T5 U! o9 c mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( r' z/ p/ ~3 k5 M; n o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 ?' T( A/ Q5 M
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& C/ L4 O' a0 @4 Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 X' G* U3 \1 D1 J" J9 \# W# M
+ @% t2 z) S5 I% a: J8 `9 x0 X7 O
mcasp->regs->XSTAT = 0x0000ffff;
e3 Y$ ` P$ F mcasp->regs->RSTAT = 0x0000ffff; ! d1 c, `6 R- ?- Q) w( e
0 o1 m- d4 V6 Y8 r, _) U0 j! ] mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 z! Q3 v V% i! e: B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ T* W$ @2 ? W. E0 P# L4 w
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 ~& f5 G9 \1 l, w1 }' Z/ Y- m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 d$ L0 I( s' ^1 W) t7 s- I a) Z: |. H5 |
/* Write a 0, so that no underrun occurs after releasing the state machine */) v; q$ I* i" j9 A- @
mcasp->regs->XBUF5 = 0;
2 `! i. ^' O; {( r mcasp->regs->RBUF0 = 0;/ q# A$ e9 ^+ x1 J3 x
; @$ Q6 J6 P/ i# Q }7 I6 t0 M: C
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : y( V( T: H$ ?6 `7 e4 Y: T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 ]- ~: _- A% T% z% a
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 v2 {9 R1 ^# y7 y8 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! _1 I" B/ J! L8 Q% w* }( _/ n; l1 E8 f/ Q) ^0 I8 I/ F2 ]
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: V$ k3 X+ ]3 j! m9 T0 i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; ]( d* R% t5 m& x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ |: a! R0 U: N0 T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ b% ` k2 I/ z1 n
2 J7 y3 @4 ?3 O m6 d
CSR = 0x0000;. h2 d- g9 I: d# s
INTC_INTMUX1 = 0x3d;
* g! E9 B% G4 t/ o' l. C7 V+ \- c$ B ISTP = (unsigned int)vectors;
! ~! N" n" {1 M$ J ICR = 0xFFF0; 4 `+ \2 V2 h& S! V0 F
IER |= 0x12;
% h5 X1 F( |" F2 I CSR |= 0x01; 0 t' P5 k1 n. F; m5 m M8 [( @
; |$ S6 G: [( i( C. j1 z( r
8 {6 a* U. R/ q. T/ t
2 u) Y8 l8 T8 {9 M/ _还有就是两个输入输出函数:
! @' w4 ]2 c# ~4 Rvoid output_sample(Int32 out_data) x& V7 m5 Q( Y4 }, g, T
{5 q* m. P5 S" v, C, Q/ I. i- a/ Q
AIC31_data.uint = out_data;
5 e, e9 _* |7 o- y, x+ x MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 i# i# }* {$ [' |6 ]7 i}: o! ? Q. \7 w& {: D8 v
$ ]/ P1 j$ r( F# ^
Int32 input_sample(void)
" L3 _, C' F/ k$ t. W{ # Q9 T& d0 G; T# F9 x$ B
AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 ^! t. F2 G" I7 [3 N# l% `6 Q return (AIC31_data.uint);* a% E9 l# t: B* ^: ]; e
}
- o7 l l7 V3 p2 Q9 }8 L$ [3 T5 C0 C/ H8 U& ]* l7 F1 D0 V
|
|