|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' L# c/ A5 R6 c5 D3 Y( rmain文件:& X, d$ _) Y, S% T
interrupt void interrupt4(void)
% c8 z: x$ J6 C1 a4 m{
1 J& F$ L$ E+ _% |5 a' V3 ^# V3 K Uint32 sample;
: w% [: K. d+ o5 D/ j2 v# r' y. X. r' k5 T% t( ?2 \. ?4 I
sample = input_sample(); // read L + R samples from ADC
& q8 ]' R. r) d output_sample(sample); // write L + R samples to DAC
3 R2 @" d# L, V* Y& I- v& h return;: Z, Q8 f0 I* v$ C
}
, q6 W/ ^9 S& X8 Q( ^6 W
2 [( \: @. v" X' s; I! Rint main( void )
1 a7 G% A$ c/ w1 x7 u% H{
2 j9 v( d- N' D- k9 M' L& C7 C _ s. B
/* Initialize BSL */! F4 D9 Q& b& o+ [& ]
EVMC6747_init( );5 z. z& m2 g) W9 V$ N, l- @. C
/* Call evmc6747_intr function */6 B( k: R- X+ H G# b- A7 ]
aic3106_init( );
* H) Q0 k0 z; T5 h2 e7 h! [ while(1);, R% b# k# _! T
}
2 x/ z8 y6 B8 U, p) d
/ Y) n" z5 L# X' }) v
) S% n9 S! s8 d t r! |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 t1 |7 M& y( U5 f! H/* Initialize MCASP1 */+ m- B+ _. E( {& \/ Z! d7 Q
mcasp = &MCASP_MODULE_1;# F: @3 g) M8 Q
mcasp->regs->GBLCTL = 0; // Reset7 ^# {8 G( Z* t: K1 H
mcasp->regs->RGBLCTL = 0; // Reset RX
. D# V P; ]0 @1 M' @& G( P5 } mcasp->regs->XGBLCTL = 0; // Reset TX' X8 {/ s) L" V3 w6 x6 c
mcasp->regs->PWRDEMU = 1; // Free-running! |& z5 [. V7 \9 k" m7 O! l
// configure McASP0 receive registers
% u9 M4 w; @0 A4 V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 K3 x, x3 S% i3 O0 b' q" L mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
M S) A2 Q& O3 S mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
g4 s5 Y, A- e/ \; b! R+ _, N* r mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) ~" {/ A" B. V1 V4 T% R
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- w1 o+ i! c+ c mcasp->regs->RTDM = 0x00000003; // Slots 0,1
$ U( G1 C: k& n mcasp->regs->RINTCTL = 0x00000000; // Not used9 p- T6 v c' z# e5 t( f
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 Q$ a% G7 l* {/ e) g$ ]7 \5 y! a- o. w2 w$ m, x3 d+ p4 B s8 ^; C
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used! b" h) o" _- i5 [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, o" u2 ]3 e1 T* v! o
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: K) R% q4 K/ J' ~
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- f& b+ o7 ~ n2 X9 \1 g9 s( w
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK" [" q6 `, \) N a
mcasp->regs->XTDM = 0x00000003; // Slots 0,16 o) P( t( |6 f8 k& t) y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit" }( _0 v3 E6 T1 F' F. u
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( }: J2 L1 l& L A' S
& R& L+ c8 z" z# c7 |( E- o% [" } mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( H8 x6 o" l4 [" u( o2 R# _ D mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 Y }3 H- w' i0 p/ p7 f/ n3 e% B2 t
mcasp->regs->PFUNC = 0; // All MCASPs
4 F+ f: N; \# J5 a1 F mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- t4 m' D2 q2 E l6 g
, Q% R. X, l; ?$ H6 W, f( g8 A( s+ P mcasp->regs->DITCTL = 0x00000000; // Not used
4 G6 |* u3 L: @5 n mcasp->regs->DLBCTL = 0x00000000; // Not used
' D0 q) e9 r6 M) B* u/ V. b mcasp->regs->AMUTE = 0x00000000; // Not used$ i4 U8 f; h9 O
/ s" [4 @( z9 h9 P$ j0 O# `
/* Starting sections of the McASP*/- y( `; X( ^& o" i- X
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' L" J3 X* u4 t/ E* V; W. E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ~4 H; ~3 }6 w4 \4 a
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( N3 k t5 M! q$ J9 L A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ J1 x# X8 s3 l- E! h1 O
9 l# W+ ?3 D! B3 m: c( a% |* ^) I mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 h" s$ J) l, f: O# K- F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) S# j# R% K Z* z mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 |0 V. y" _! E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 Z9 u$ H6 L% ~) Y# O
' Z0 T" Q+ c, C0 M. F( o mcasp->regs->XSTAT = 0x0000ffff;
- \! I+ z, P2 G, G3 D- E3 `7 ]# X+ J mcasp->regs->RSTAT = 0x0000ffff;
! ^) @& B% u$ U. X; ^/ W- _- ]# T# L
3 r' W" `0 L8 k9 i+ t mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 R% o/ d! K# m) \& r& X. S* m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% d0 @+ J, Y2 [2 V6 V6 }: d1 e mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % R2 q/ T( V9 b' k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 s0 w. G- [& _9 K
; A! q1 ~+ `' m4 Z /* Write a 0, so that no underrun occurs after releasing the state machine */
" m2 _" p3 a$ Z7 _) _- b `) G mcasp->regs->XBUF5 = 0;
: A* M7 W( _- {# ^+ w. s mcasp->regs->RBUF0 = 0; O& h3 K# W. q7 w4 a3 r; G
8 I1 K( Q; U# z( L
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 u; ~) i% H! l5 b% U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% e% n/ O6 _# t3 V/ Y5 d# ?2 S2 d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 D! @. F6 U s4 O" j$ x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 ~" {+ L1 J+ l5 j, t) @8 B2 ?7 m, l
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . y* P: |. t; E* c! M0 n5 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* h4 t8 V( [; h) s+ L6 S+ d
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& o1 G. U- H! d7 @1 Z" j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' U+ n# [8 d- [- k
$ k6 V- K. S# U: L* }- e
CSR = 0x0000;
( @5 D) S0 u9 a6 }3 c1 S/ e INTC_INTMUX1 = 0x3d;% j+ D" Z7 ~- x4 H; e' B
ISTP = (unsigned int)vectors;4 W9 @% `/ Q- V" K1 `1 U, Y0 R- J
ICR = 0xFFF0; ( _1 |% |' c/ R* D% C6 y/ s& H" A- ^
IER |= 0x12; 2 G/ W l# E1 Z1 z0 g _$ G, l, C) N
CSR |= 0x01;
' p7 D& t2 W/ _$ p" X
. B& \2 L& a9 D4 Q! ~) K8 n7 F" o% S Z9 y {! l- Y/ L7 |$ x+ n- w
8 U8 x' g/ C2 R6 Z9 N/ c& H
还有就是两个输入输出函数:3 \4 ?2 v/ f9 z8 J) k
void output_sample(Int32 out_data)
* c: I( q4 k- o: }$ j' z{
?& q; W1 i4 F( M' f AIC31_data.uint = out_data;
; e! |' n! J N/ ^9 F9 P K$ Q MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 [5 z( ^* _7 E2 X7 \}
6 P0 r9 O/ A* Z4 h
$ J* e! n$ ^: A+ j% bInt32 input_sample(void)! |5 J" g+ j$ M y7 A
{ 8 {% V$ Q: F) ^% v
AIC31_data.uint = MCASP1_RBUF0_32BIT;+ X# _ Z( d8 ^/ J* N% N! _/ `
return (AIC31_data.uint);
, k7 \' k; x' V1 u) q5 Y( N7 ?}
! _, B% j) E: L; I9 s) K7 Z% b7 m, c6 F# T/ m( p3 R" G; y& F2 u' M
|
|