|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?- {0 K8 E& d% `
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:6 R$ y' A; a8 d$ v7 _: l
u32 UPP_Isr()
, Q& u0 B6 g; N{" t& K9 x; ~. ?7 ]( F4 n3 D* U
Uint32 intr_status = upp_reg_hdl->UPIER;
1 y! p+ ?6 T+ }8 w1 G upp_reg_hdl->UPIER = intr_status;//clear
' K7 \. E. ?# N2 t* x" U0 f// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");
2 G" B7 ?3 z- I2 ^: L* i+ N u32 ret=0;* q! s* j; Q$ B* e
, m' A9 S0 r% J" V // inline functions" q& C) |& ]2 N( M" E: H6 K+ m
while (intr_status != 0)4 u8 O3 b" v2 P4 S4 Z' ^( }* u
{) g0 i5 @. a r$ V8 i/ L5 B
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
r. ~: o9 V/ c# ? {
4 f9 w8 f; b/ J/ N// Log_print0(Diags_INFO,"eoli.\n");" A- v2 j+ ~1 f5 [# M
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);8 j! i; q5 L' f3 C7 ?
}6 |, W$ n) _7 {' l
& ~, a- E- o2 ?7 _; `) r
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件2 ]1 e& \! i8 M* v/ S1 v# O
{' I- Y" ]7 b4 Z+ t
Log_print0(Diags_INFO,"eowi.\n");
" P. p/ x8 Y6 n3 M2 K$ _1 D upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);* a5 x9 P5 e3 h' V4 \
upp_interrupt_count++;9 j! B% p: P9 M1 T0 i, \2 V8 S
upp_interrupt_eowi_count++;
% P' Q- \) M( ], m( k# O+ n+ \5 L" i/ L
#if UPP_DIR_QI==0( J- S: Y0 W1 b3 v
upp_dma_receivestart();4 r- b8 e: J) ?: o" t
ret=1;; @& a2 R! O4 z2 c! G' U& `
#endif# Q1 t% G: q! J ]/ ^4 p1 ~4 E
} ?6 M% V: w s! F# P
; G$ @/ B& k; H if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件
0 _7 h" m$ l0 ^$ z6 g3 f! S! _' o {
) M2 n9 f$ J0 i+ o3 H& S Log_print0(Diags_INFO,"erri.\n");& F2 |% }/ U5 H/ i
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
' E# f0 q! e G8 T& g upp_error_count++;
8 }2 z% v, R8 M( W( A; I/ c, l1 h }
8 p v3 @( i; O. q
. x8 j5 ]) q* W% c1 Q/ o if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件$ i: I# ~2 B) r0 E& [7 K
{
1 Z4 L' S8 R5 p( X Log_print0(Diags_INFO,"uori.\n");
' P6 f! k& y2 I, x Q upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
! j8 g9 o3 z( l# D1 Q upp_error_count++;
3 Y& G5 N# y9 t. j+ z }1 ?/ z( a# b/ {: S
. X0 v0 k+ E; B% q1 A if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件, v r. t- P$ O
{; M8 i& ?- ^0 a* S% u* ^1 l
Log_print0(Diags_INFO,"dpei.\n");+ D8 o" u6 ~8 d/ B6 k
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);. y& ^# B& `7 A5 |) ]6 P- w
upp_error_count++;
8 ~* q( T* Q. H. k9 g' X }
' A* L u# H' x' J+ p7 v, }6 {0 N# a! p' r# N5 x
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)2 g- a0 z# K5 R9 A
{$ R. ?# _" F. R& Q" D6 N. B( @! r
// Log_print0(Diags_INFO,"eolq.\n");
- { i3 I0 ^1 O3 q9 P upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);3 n3 {$ u) y5 Q& g& A* D) Z
} C3 ~* a& F9 b' j1 Z) i
5 r: [2 W$ u& t: S; U# r5 q
if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)' o4 p* p! r! m: r) }
{& H, `: m. d: b5 ^
// Log_print0(Diags_INFO,"eowq.\n");
m8 ^. t4 W# S7 i5 L$ c p% v* [ upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);
) ?1 L, X7 C& {) @0 J upp_interrupt_count++;( H' m! ^% f% x/ c! c* S
#if UPP_DIR_QI==1
7 G3 u2 J! Y$ \9 k7 f5 ^4 c upp_dma_receivestart();' P: M- {" O3 n: L
ret=1;1 u. @! X+ G* a- q. W3 H1 Q T
#endif
# G8 T v) x% {4 v }5 K0 |# p% Q( U6 [( U4 E
% s. I4 N4 B0 B* {8 ]
if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)$ Q5 L7 N7 G( |, S2 H7 V$ y2 `+ \
{
' v& ~8 J. [/ N, ?& _/ Z% h W3 l Log_print0(Diags_INFO,"errq.\n");
& F& M( K- C9 B; n3 x upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);
+ o9 a# H8 @- `) M/ Z. Z upp_error_count++;
/ ]/ ~+ t: G- ~* B: O# ]/ s }- B. t( g1 b$ |6 k' o( ?: E. m$ I
! n: Z2 E" n* E5 }
if (intr_status & CSL_UPP_UPISR_UORQ_MASK)( p4 {: z# f+ i
{, `) J+ h" w G6 g8 o
Log_print0(Diags_INFO,"uorq.\n");( L) q& E* e" H, h& k9 A7 D
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);4 t6 _5 C& l7 M- u+ s, }
upp_error_count++;
+ v& k, [5 ~* A, a3 Q }& F& `$ a1 `6 u+ \
( c2 w* X/ s- B. [! `8 D if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)
4 A+ f9 [ o# ~& C4 n {
9 r* p3 S. j5 J3 v Log_print0(Diags_INFO,"dpeq.\n");, d0 g: S+ ^# n0 }. w, e
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);& s* ?4 c& R) J( w1 h$ j/ v7 m
upp_error_count++;
6 _! t* S+ r' ?: h2 F! { }$ r( f+ U$ q1 U/ }6 D4 q0 e
9 p1 u* o& Q/ t: x
// make sure all interrupts are handled' [. S8 h; J' |3 N1 w
intr_status = upp_reg_hdl->UPIER;
( [9 E. f" j3 y, s$ J& ? }
0 R/ S% l2 j( D3 I
2 R5 N/ C7 e; [ // finally: write 0 to EOI register5 n. p' u$ j1 u
upp_reg_hdl->UPEOI = 0;5 X0 v/ k6 Z6 G4 Q5 E
return ret;- R6 d- W1 V' N+ [- b
}
! {% |# U$ m2 ?( y& fdsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):
4 D" }5 c" J! K& Z#define upp_dma_sendstartQI(x) {\/ G) C! m5 ?5 R/ }1 c4 [+ P. _2 [
Wait_upp_SendReadyQI(x); \4 [) u A" _ b1 ~# P
upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \ \! R# T8 r* M2 }/ r( {
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \( ^+ x. D1 k0 y9 e+ A
upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\) N( z, C, l# n" k2 u! o
}
/ s2 m: a7 c; S8 `- m# X% Q3 u: y5 j( @9 j" \$ e
& \: z7 L( h x6 b#define upp_dma_sendstart() upp_dma_sendstartQI(I)
" [! D, M9 h% \' N% l3 X8 j6 I }- w: [: c; T
, z9 u8 e$ v* T% h
想知道uori错误是在什么情况下面出现的,好做出修改。
! _9 X! ^$ e) {+ y" Y8 @
1 K$ g1 P* x- N% ^/ ^9 @ w# N. x7 h6 M% n/ c/ T3 @" @
|
|