|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% E* _: z7 _, y2 I3 }
main文件:
( e$ l# R2 S( N2 q( ninterrupt void interrupt4(void) + I2 H h1 K, Z
{- j& P( p: w, l+ c9 C
Uint32 sample;
/ v) O A4 _3 ?) I# `8 P- T
; V( D' Z- @% K+ u sample = input_sample(); // read L + R samples from ADC
. R3 |% ?+ |/ y4 i* L: w) [ output_sample(sample); // write L + R samples to DAC : q- ~$ K8 @* Z
return;/ r7 Z1 L' C( p) o: O
}$ d+ Z9 o% K' ]! C/ h2 l& A
- M K8 w5 t, i0 F9 C
int main( void )1 `. d- [ _) Z- U
{! V$ H- }3 a0 j$ o- k* k( Q
! L- w: G& W$ c6 @& _9 g /* Initialize BSL */: m# ]2 R% O7 T6 T
EVMC6747_init( );
0 A4 n- p- o5 c8 L% O" B /* Call evmc6747_intr function */
3 \, E8 o9 D" Q% U r2 c6 ? aic3106_init( );6 H' G. e/ i/ r4 [$ D b/ `( Y
while(1);
: s1 X+ ?& G; D0 j V}
7 o0 A/ p, Z# h9 Z2 A8 ?; I: X- k7 r& x3 p9 x8 T4 G7 M
. B! u, u! I& y! t( b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. v) Z) b' J3 u
/* Initialize MCASP1 */
$ A$ Y4 {: n9 x/ n+ A mcasp = &MCASP_MODULE_1;
, [# G; M0 b- j" [ mcasp->regs->GBLCTL = 0; // Reset3 ~- ~8 y3 J/ l2 ?
mcasp->regs->RGBLCTL = 0; // Reset RX
0 V5 Z7 ^, _# r mcasp->regs->XGBLCTL = 0; // Reset TX' _ t; A0 G% y; r* y
mcasp->regs->PWRDEMU = 1; // Free-running
& D f7 V3 _5 s$ p1 I# K+ `* F // configure McASP0 receive registers
$ U) G1 M' j) c( x& U8 x1 M# h mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
, `4 V5 c* x) f& }' [ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( x' W1 F7 P" R. q6 x0 B9 d" a mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. C' Q1 u( _2 s5 C& U/ _ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 q0 [( ^ w- s* h/ L( T mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ G q% l, ]4 k. L3 C+ Z' l" E0 T/ o mcasp->regs->RTDM = 0x00000003; // Slots 0,1
o' Q7 _4 F( P mcasp->regs->RINTCTL = 0x00000000; // Not used
& I5 ?3 ~1 T! [ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. G, c, C( Z* Y" Q( l1 H2 {7 X! c1 J. u
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
2 I7 `' \( ?6 I( n mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 t4 i) L4 Q- }8 i9 u0 B mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ `- {6 F; D( B9 h6 N9 i
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) ?6 q2 R1 j( ~" z( z2 Z8 ^' v mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 M4 E0 @: b' n& a3 X- ?5 W* Z mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 D: o) b4 P9 H/ K u& J& h mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- z. A, E' q2 \/ X0 U mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 G( }. \; N3 t7 H' U. J' f
b% W: E. o5 j4 h
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 T3 z; c% Y! i" y9 A J# }
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 ^! D" z' I1 C8 ]4 R3 K) E5 b
mcasp->regs->PFUNC = 0; // All MCASPs
: \- r) B: k* h& Q mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. B8 J* o& w" E% B. L m0 y& t1 o& H* Y) O. H1 w6 ?0 r' `2 s
mcasp->regs->DITCTL = 0x00000000; // Not used# S2 I3 b: Y: |" w* M0 O$ b
mcasp->regs->DLBCTL = 0x00000000; // Not used
! B9 |9 [6 j; s7 r, P mcasp->regs->AMUTE = 0x00000000; // Not used7 j6 N6 K/ i1 o# z
6 }. z; u* ~ f! K/ p- ~7 E
/* Starting sections of the McASP*/! u& ?1 X& i* U
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - x4 x4 R( n8 G3 O7 p/ n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 Q: U/ Y4 |, Z
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " d9 F# f K3 R, O3 T% p2 d5 g4 m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% ~) A; @2 @, [8 p" d; o! N
2 a! V7 n* J% L( O2 ] D mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) m/ O+ d- `9 m+ o2 |0 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 b) J8 P# o9 k mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 ?% a8 J! b8 i0 K3 |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 b9 S ?' _$ _
6 x0 u3 [; p6 V. N' p1 l- Y mcasp->regs->XSTAT = 0x0000ffff;
# l9 i/ [% U* E Q$ I mcasp->regs->RSTAT = 0x0000ffff; , b, p: X8 t5 |; y) R
! U3 A9 h! W+ j1 z( l
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ w8 ?1 a) d7 G' b* A7 N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% e* D! H4 s$ H% T
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 S S$ s6 j6 n# _+ x t3 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 E; v' Q9 c( y1 X5 H$ q+ U: p: A* o/ I
/* Write a 0, so that no underrun occurs after releasing the state machine */; t! H( m% i) ^3 f
mcasp->regs->XBUF5 = 0;
! J8 K% w0 q, C& O0 d% y mcasp->regs->RBUF0 = 0;
& ]0 I4 K: y/ j# u' {3 n% N6 T9 }; t: {
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # b5 P& U2 f# K) w7 Z/ l ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );. B( l! x: e5 `3 M: Q1 h% D
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 [- e" |' V0 p. z, ^* A. ^% g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 t: {6 z; K3 B) c8 n: _4 y: Q/ y: `- S: {# N
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 ~8 O5 K: R+ M( ]! E; ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& R3 o/ r4 S1 k- O/ j% ^& [4 `8 G
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; K7 f7 b% G6 R/ X+ }% o0 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: g( [$ L! P5 }* J
2 s/ I" N9 e8 d& J
CSR = 0x0000;/ _6 m# i! w; O, e5 R" Z
INTC_INTMUX1 = 0x3d;
: W {( N T" l3 P ISTP = (unsigned int)vectors;6 A y& D8 O2 J4 \/ N: D
ICR = 0xFFF0; * @# G! }% |" l" l0 _9 u" F, m' e- k: d
IER |= 0x12;
/ {- L5 l$ }2 W. w CSR |= 0x01;
* _. p- O) K: W- |8 \7 c5 T2 Y7 v- U. J( V5 k: G
( f! G K+ Z2 D0 X, M4 `& q
# r# o; n; t, C! T! B/ ]7 t' A还有就是两个输入输出函数:
* o& h# s$ B) b+ A6 Jvoid output_sample(Int32 out_data)7 x9 V# j1 F& I/ i, n
{
( f% F( C( J- A/ I AIC31_data.uint = out_data;
+ H6 Q) w# t0 b M7 x MCASP1_XBUF5_32BIT = AIC31_data.uint;) s! f% M# e; [
}
, G+ P, [5 ~* y: L$ W
7 r/ |& X* r8 S$ c I+ |' ~Int32 input_sample(void)
$ X; L8 N4 L8 m0 b7 `) Z6 x{
- m' G- T' J K3 s AIC31_data.uint = MCASP1_RBUF0_32BIT;5 p" k) g' O1 r3 [1 u. M0 D5 l8 B
return (AIC31_data.uint);+ c6 y# S/ G: G' P$ o$ ~/ r% G
}! g+ M# O( Z4 S: K
# v3 s5 V0 o: d |
|