|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; y, @# U' N- t3 Jmain文件:
! l* ^9 g0 d. ]. _+ h- Sinterrupt void interrupt4(void)
* D! T) X+ y# S' w* z4 p9 C{' l: f* @5 r1 B9 U$ |# t( W
Uint32 sample;
/ H# a1 ?6 C T, k
' x) C8 C3 [# z' D sample = input_sample(); // read L + R samples from ADC
& ~( J: z+ |0 }3 ^: L! y output_sample(sample); // write L + R samples to DAC
, ^! m" i& \6 N, ] return;7 F% o& ]4 P* q, C0 g# P
}
7 R9 [4 A" C* `9 W6 t( J9 X! I+ m! e* K) L% b8 a) l
int main( void )
9 k* a: t L* Q* n9 R2 j0 w, X{ Q6 b! W- t; n) y" } u6 l. \/ k' n
) F9 j( K! `: a2 v- `; ?# W+ U( j
/* Initialize BSL */
4 g9 g& c! ?2 D2 r: Q* t! r' |& z8 W! e EVMC6747_init( );
! t! j! K0 ~3 r: N! u3 g3 I! ]. `/ G /* Call evmc6747_intr function */
4 K/ e5 Z3 Y7 O7 r% { aic3106_init( );
. |1 v# x. A) Y7 n" ], U5 g while(1);3 Y( b6 P u6 c
}
- }7 h, M- z8 i# i- {3 Q3 ]- T, y& u, Y6 ?7 M/ w
' x) A6 b! o: Q1 o0 s6 [* q6 o. iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 o4 ?) g2 V' b2 s6 k' v/* Initialize MCASP1 */# I' l: d9 d9 G
mcasp = &MCASP_MODULE_1;- O+ c/ L9 X# `/ t& _
mcasp->regs->GBLCTL = 0; // Reset5 s* C! c% a) w9 Z
mcasp->regs->RGBLCTL = 0; // Reset RX/ q8 l8 x4 Y$ z; | X) k y0 W
mcasp->regs->XGBLCTL = 0; // Reset TX1 H: l( S" f1 \# ^" h2 K+ M
mcasp->regs->PWRDEMU = 1; // Free-running' N' M# r7 M# Y. s' _
// configure McASP0 receive registers
1 m2 r1 X5 a3 e mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
$ d- x5 S+ f7 N1 q m8 p. l mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 a* U, [- T0 h, L/ f( D; T& ]! t mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% a V( P( ?& h' B8 n/ L5 C
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): E) C9 {; l1 N/ Z% d# O
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 q: t& y% l: k2 t6 k P8 ?; J mcasp->regs->RTDM = 0x00000003; // Slots 0,1
& b: h) I0 U/ K: W( M. g mcasp->regs->RINTCTL = 0x00000000; // Not used1 t* c6 c' H: M6 p3 P# Z
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 f' E' x' M3 L- B: A
1 g& [ V2 D, [1 j
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
2 c- A8 R8 S4 w3 @ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& n2 W4 F- O' P# { D mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 Q5 [* _6 n7 P mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ W P2 ~$ _! `2 Q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* f0 Z' K; }# V* N% X+ i mcasp->regs->XTDM = 0x00000003; // Slots 0,1) A9 ?& v1 ^& |1 D2 l. H4 B6 }/ o% | E
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
8 m2 h, u/ g; V+ K ~0 @# i ` mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. V9 P1 d6 g1 g6 {: b
! Z5 d/ h, w" e# \& N$ D' o
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
' A' O! ^6 o5 [2 T: @8 ]. w8 e mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* [* x/ _ w1 B: }! y$ o! W3 H
mcasp->regs->PFUNC = 0; // All MCASPs
: Z' ]4 M& ^9 G( ^6 B: Y0 I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* l% E& V% L- T% U' u7 Z5 M0 i$ g" }
. C3 M$ _+ ^- L2 \ \4 K3 I
mcasp->regs->DITCTL = 0x00000000; // Not used
2 Z# L2 R" _# S/ m& c) Q mcasp->regs->DLBCTL = 0x00000000; // Not used( i- k. q6 d" q1 m4 n3 ?
mcasp->regs->AMUTE = 0x00000000; // Not used
/ G- U% h8 x3 T% R/ w+ `; z `) j& c% d+ v n, i* @8 s) N
/* Starting sections of the McASP*/
`2 s% O9 j v. v5 \3 G' ~& D mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# j0 z; v' C' Z1 y& u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! x+ R4 l! J6 ~8 t6 E mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
8 D& V& d8 i2 C# g! P5 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; \& c# s( ?7 E1 ~7 q% c+ a
3 d4 J! j' o* `9 |! D& v
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 z& E. B. j% o0 g6 C/ y$ V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); }7 n# P6 B' {& [5 B. d5 U
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' M$ h- I o0 |9 U# `8 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, r; t* I$ V3 c6 x. h! l
8 @- m8 N% j9 a7 v" Q
mcasp->regs->XSTAT = 0x0000ffff; # h, t) z! H* U/ k- Y9 N
mcasp->regs->RSTAT = 0x0000ffff;
% c, w* a# e N, A' } |
' y% _( ]/ C! R- c+ W5 B; ? mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 Q" z4 C9 U* z0 J: s1 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 A; q. \( j2 D0 S4 H mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! S5 e2 q) r+ n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 l, z/ m: M6 {" u6 ]+ p
8 h6 f1 `% R. Z( H: A; ] /* Write a 0, so that no underrun occurs after releasing the state machine */. `) U& a, W1 E+ ]
mcasp->regs->XBUF5 = 0;0 s2 y6 I, @% U7 D
mcasp->regs->RBUF0 = 0;0 I0 C0 ^* z% g4 V- e) i
* _. Q% O9 t. y+ k) O mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 ^+ n* x. A% G& m& {- P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 D8 `1 i' N6 P/ @
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 e' @; n- D6 o. D. U3 G3 h5 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 e, T+ y% f; b: S' I' L+ s+ [
: Z4 G/ v1 H1 S. u: y mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- F$ m: w( K$ t/ A; B% u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 z0 i8 A4 C6 B! ^9 X mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ I+ E* r! ?" ^2 t% a. F, `$ r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' P' }# _1 E- C! z9 B* \9 n3 f
7 M# R7 p- f9 n5 M( W
CSR = 0x0000;* x: ?6 o; i7 y) C
INTC_INTMUX1 = 0x3d;
2 t$ m. y% }2 d4 y7 R" f ISTP = (unsigned int)vectors;% `1 Z+ v" S! U2 K; p" w5 l1 q4 ~
ICR = 0xFFF0; - L3 h7 z+ r. V9 \9 t4 N
IER |= 0x12;
7 _. f$ K: h0 l# H CSR |= 0x01;
" K7 n( {$ \$ @/ c0 Y9 m+ U0 _" t; a0 Z8 }* i+ o6 W& d
8 Q: B0 v$ i) P0 e6 r
" U6 N* p, s( ]- d8 v1 y4 P还有就是两个输入输出函数:
! K* [. [& j3 _+ m, P9 Gvoid output_sample(Int32 out_data)
5 O* J" P9 R& E( v$ y- w2 J{5 e: C [; Q0 D7 |. _3 q/ k) s1 N5 [- x
AIC31_data.uint = out_data;
- I( h6 t: H9 g: j2 [9 R( d8 b+ y MCASP1_XBUF5_32BIT = AIC31_data.uint;
: f# t( N& D3 K' w: i; x}
3 K+ B1 o; E1 H+ `$ }/ O
0 F' s* b+ |& oInt32 input_sample(void)! q* {1 P8 {9 E- x
{
0 D$ ? ]! g9 {1 I9 k( P3 S1 a AIC31_data.uint = MCASP1_RBUF0_32BIT;# e7 v; n" f) y0 L
return (AIC31_data.uint);3 S7 V) K0 p% x: m% K
}
5 X# [" O2 L1 ~5 l
$ s+ v A2 X) r/ c) I |
|