|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" M# p4 C0 X) x' C0 Q8 R
main文件:8 B v1 H) n7 t! r
interrupt void interrupt4(void)
- {% K0 I/ b3 q" O6 x9 O{
# B. [( }/ t2 a8 [- o Uint32 sample;
$ O: @8 u( F. `2 ?2 N9 @
0 c3 D1 ^. \- Z) c. d sample = input_sample(); // read L + R samples from ADC# k1 p3 Q2 u0 M3 j; s" t. ~; g
output_sample(sample); // write L + R samples to DAC 0 [4 D$ E/ J: _- s/ w
return;
, X, G* U4 E2 K' G+ `1 x}
6 \2 |+ |8 a" V3 m7 t
: G0 j5 }- X, f- a3 i7 `; q* vint main( void )0 k% r& m, _, A+ Y
{
, N q$ a3 ]- {1 k, X
; w: m& k6 K0 t /* Initialize BSL */
9 Q4 I4 k9 F7 n8 \5 T7 b EVMC6747_init( );
! Z. T; a S3 B/ J0 w, r3 ?1 n. q /* Call evmc6747_intr function */0 D) \2 N2 `& U/ T9 j! i
aic3106_init( );3 j+ q F3 \, A2 G. L
while(1);
' Y) J1 @% f9 ~7 l}2 I/ Y3 x' E7 K! j, b! B8 O4 F
9 A6 \' u {, O+ o; y
; h0 p# i' x# ^- ~% ]; U, laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 A6 _+ O/ A0 R5 W4 h
/* Initialize MCASP1 */3 H) k+ r+ q) |8 k9 s$ z7 ]" l2 G
mcasp = &MCASP_MODULE_1;0 b1 o1 `4 G \& i3 c# n
mcasp->regs->GBLCTL = 0; // Reset* k# L; o3 o" L- g$ N
mcasp->regs->RGBLCTL = 0; // Reset RX
+ D. e! v: j6 F% U4 k. B/ N mcasp->regs->XGBLCTL = 0; // Reset TX$ T1 c: n( f& V4 y; g7 p
mcasp->regs->PWRDEMU = 1; // Free-running
+ g1 m% e$ h& \2 T // configure McASP0 receive registers
S4 y' K8 k- @; a4 C+ @ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 n- `( {! Q4 ^+ K- ]7 \
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. O/ i' M# ]6 C
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 v# P: x2 n' X7 X* o* f7 U
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), y ?* u+ Q; u, O' o
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 ^& h \ g% ` mcasp->regs->RTDM = 0x00000003; // Slots 0,1& x+ _4 e! [5 F c# w! ]# K* j
mcasp->regs->RINTCTL = 0x00000000; // Not used
7 a# P5 n. G( R mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, x$ F; G4 F, p: V5 x% M/ A7 |/ b: l5 @! D7 w% T0 [4 r
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) u; v% j1 v, L9 f1 g/ e- T
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' H" y. x0 ^- p( w' p! {8 r, y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 |. @5 L& } v0 K) h& J7 q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* h& P: k0 z4 C, m mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK' z& R, S- @9 u V" _1 E
mcasp->regs->XTDM = 0x00000003; // Slots 0,1% Y6 P$ d3 ?9 S+ e1 g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, o$ L' k8 F8 C7 s% q: C, N mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 ?" [4 d% ?' U# e
& U4 g7 m, V9 E+ N o A/ w$ C mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
7 Q2 L: B& l/ ?7 O mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
9 b! n* d$ `3 j$ i mcasp->regs->PFUNC = 0; // All MCASPs" p% W. |) f$ ?5 U
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# [* d1 B: J4 s& t8 W( h" Z3 p' w$ [( _" m. h# \
mcasp->regs->DITCTL = 0x00000000; // Not used, m, v8 E5 c8 L/ ]3 O# t6 Y
mcasp->regs->DLBCTL = 0x00000000; // Not used
0 L( }4 R1 X0 G& Y7 u/ u+ _+ i9 [5 } mcasp->regs->AMUTE = 0x00000000; // Not used# I, a V) u( x
' ~# R ]/ M& T" H2 ]5 b9 |/ c/ m/* Starting sections of the McASP*/
. x4 W8 W9 h) [ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) J/ T: c; z% c6 ?* D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 {7 O( n7 c5 ~' Q! }
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 x' S: ~; u' l. g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ y4 D$ I7 v" ~: E7 d
! x! ^4 T0 N: z/ ^% M% B& a. G
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # k( k9 W6 ?& g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# z7 I9 y1 o7 _! F7 @- V+ D. `" w mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & I% {' [* J6 H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
v* q) I# U- R F
# L; v+ c, T8 d# l# ^4 D mcasp->regs->XSTAT = 0x0000ffff; # v' z# O8 L$ V# R* K
mcasp->regs->RSTAT = 0x0000ffff; 5 Y1 y, @' b0 O2 k/ c* {$ C2 m
. l7 O5 t- u# d# n B D
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& f( _/ n r( J) w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, m+ q' j9 i% d. N9 f4 _% ]
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( Y5 c, |) m: m: Z$ M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 b/ V% C7 ]7 F* G6 U: A0 V
) ]# k) d# o8 Z$ F /* Write a 0, so that no underrun occurs after releasing the state machine */9 `0 p) }/ C3 z y
mcasp->regs->XBUF5 = 0;
3 _+ S+ S7 y6 E6 @7 p: i$ M* d( A mcasp->regs->RBUF0 = 0;0 N5 ~, J6 T+ ]' h/ b# n0 V- @
6 e4 y0 ^4 [9 u* `# r/ q mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 R! o1 c! t# e3 y4 S% I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( B9 t5 p+ }; o
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 i% u5 S" i, J* p R! K$ {$ s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );/ z3 G* l+ I; m& b
- G, w' f6 _7 E: _8 x( Y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 ^1 [3 u b7 G& P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 {0 F+ l: Z) j- t7 I/ |- s; p$ R mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. K7 W \) s. k$ G; B& y+ E! C5 L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 R& h8 }0 b: G& h( X
& d" I$ U4 F1 I+ k; P0 X9 R CSR = 0x0000;7 P) _6 d" x' b
INTC_INTMUX1 = 0x3d;
- z3 M, \. q( \& L/ J ISTP = (unsigned int)vectors;& h/ Z* }0 g, i. W( j
ICR = 0xFFF0; . S1 p9 z o( d" N3 z! q, k
IER |= 0x12;
, e; M2 D: N) ~! ]! e CSR |= 0x01;
" I9 c: _4 y* s4 N
: {- u9 C8 ?& x2 S- G" `3 N
' m, R3 I& k2 U
; L5 g% Q0 y+ F+ @, K" x还有就是两个输入输出函数:" {2 T6 K! K* T: j+ j) x" O
void output_sample(Int32 out_data)- f/ s; w/ h( ~- H( P5 A
{
) F9 F$ R1 ]' a- c" I/ r- k* c AIC31_data.uint = out_data;
' f4 p( D- T% N! w, z MCASP1_XBUF5_32BIT = AIC31_data.uint;
- I* v# s* E1 _: n5 w; z- |$ p b}
+ A0 R( r- P) L1 o; _& h# G( v
7 n: H' k2 M- ]2 a% ?4 S, sInt32 input_sample(void)
/ J0 v v O+ Y @{
: x, j& D9 Z0 D' ^) s6 [- N AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 K4 z% Y* ]# V4 g return (AIC31_data.uint);( T1 O. t8 r" x; U4 m
}) x# d7 t7 @7 o8 a0 {( _( i
9 D9 L9 a% ~4 b% c6 C# }) a
|
|