|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?% X5 J X. E0 W: d9 M% ?
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:% F/ t7 x. k: U
u32 UPP_Isr()& V( Z' L- L+ j# H* n" P
{2 Y# G$ ]0 d9 l! L
Uint32 intr_status = upp_reg_hdl->UPIER;- y* o" M" P1 u0 Z2 s* s( U
upp_reg_hdl->UPIER = intr_status;//clear, {& {7 S! B( S2 s) m
// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");+ B' k9 t0 g9 E- @
u32 ret=0;
* [) S) R% ]1 g1 Z' z
. D0 S+ B- R! \ }) g4 t$ Q // inline functions& g2 p0 R! ~; f/ Y7 ~
while (intr_status != 0)7 l8 p' ]2 w; i( t0 E
{6 K& s+ o/ f6 N2 E
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件: K2 |% A4 b+ L; j# I
{
6 {! I" q6 B0 H& Z( n// Log_print0(Diags_INFO,"eoli.\n");
+ T" C% B5 d! p V) | upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);
( z7 N1 c+ e- h3 S* v }) L8 i/ O* ?4 [- a, [
! b! I7 H/ n( P! I. e9 q if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件' a" Q: { W0 g4 t1 l
{: c( V+ X8 M9 ~: R
Log_print0(Diags_INFO,"eowi.\n");
* J$ @& Y! D9 \3 { } upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);
+ V: ^- k' F5 T0 O3 J upp_interrupt_count++; n, w2 p) y8 g2 P2 |
upp_interrupt_eowi_count++;
# @" W" J) V: j, |- ]4 [( M) D7 R. [, _- M/ O
#if UPP_DIR_QI==05 x: X, R) [6 b; I
upp_dma_receivestart();
3 z2 o; w2 g! q n1 q! M ret=1;
" P/ e1 _8 `$ e3 V7 G& z7 Y#endif! W' u3 c( e) d7 u/ y
}
+ J6 T: t. C0 ?+ I: X2 v
2 H' d* X# H' A& Y- { if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件
* R0 u3 h3 s# \2 Y! q8 N. L( [ {
7 l9 h$ \' E2 C' U2 d6 g) B Log_print0(Diags_INFO,"erri.\n");- X6 g% B3 Y7 }9 c7 _* R4 D8 e
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
. J0 k, Y% ]' \1 r upp_error_count++;
3 [4 m% [; E# ? }
1 G; K: o0 s6 a" {) n
: E5 A3 Z& m/ [; R. c; v if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件7 N& f. w3 a. e D7 r& Q; Z
{
; k& ~+ \$ |) f/ e Log_print0(Diags_INFO,"uori.\n");
, b8 [$ Q* a( A; E; U! r `1 ^ upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);9 r5 ^; t/ _7 @: c3 b5 |" N
upp_error_count++;5 _6 F" B/ {* x1 K
}
3 I0 {- D' ^2 s {. }( }6 p# J- |8 Y* _1 |% e
if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件6 u3 j g2 ^# U0 G1 I5 |
{, z0 y, ~6 _4 Y" R5 p1 p9 p
Log_print0(Diags_INFO,"dpei.\n");: {% ?# B( D) f( ]2 n
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);
; v7 T8 n* F2 F/ V8 i upp_error_count++; l9 V Q- W: O
}
/ e8 _: V- f; k8 Y" q: c+ E# ]" R$ }7 {4 K1 ^2 A% A" Z
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK) d/ \' B; z. b* v6 J
{- K( K+ k, N3 ?1 Z
// Log_print0(Diags_INFO,"eolq.\n");
- K, F5 A' y" `8 U% F& _ upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
; Y$ C# d4 |1 P+ H! h }
4 q+ Y8 O# ]9 k
( m- n+ b8 h6 s+ @1 r) o5 h if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)
' W, y" A G/ f. q. c, F7 P {
7 N$ k A% A7 G1 r+ M$ d// Log_print0(Diags_INFO,"eowq.\n");
8 H- \8 P- y, Q: z1 u- v2 F% t upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);, r8 }% H6 N, X$ c; M
upp_interrupt_count++;
& C( f3 }3 n8 N) O0 Q9 S7 U+ j#if UPP_DIR_QI==1
6 e: [. q* Q4 @% j upp_dma_receivestart();7 ^/ i2 W4 N% |! Q5 y1 G Z
ret=1;
4 h( t9 |9 F" R/ h, o* v! I#endif
, Z% M4 s+ |2 l/ X }# y" j3 w. I I, _ f$ m
( J% [0 _2 a+ s$ ^ if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
6 L; e) F a! _1 @( s" b {
: A# I3 t4 P6 P5 a Log_print0(Diags_INFO,"errq.\n");/ b+ q* {/ H% z5 d
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);
* A& e5 P) ^ {, e+ p- m' b upp_error_count++;8 S2 G# P$ ?: F7 l8 u, w& t$ G
}! F. B4 F, W h: I2 _
8 q: N. D2 z9 m* c# P if (intr_status & CSL_UPP_UPISR_UORQ_MASK)
! @9 c/ G# z- r {
$ R- H: J/ N/ u5 r4 T8 B Log_print0(Diags_INFO,"uorq.\n");
* O) u3 D- q9 B9 r) a upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);/ J2 a7 M& a$ M/ q
upp_error_count++;4 ?/ P1 x4 f Y% Z6 R
}4 t" f2 E3 Y7 h7 q, z5 Y7 j
$ z6 b/ {/ |. X2 W6 I if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)- R. ^0 z6 c1 m; D! e. l6 h
{& L; c2 y" p6 ]6 C/ L4 R4 R& ^: N" M
Log_print0(Diags_INFO,"dpeq.\n");
) i7 b6 d; U" \& u' p& W& X! X upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);
3 J/ i6 P" b% \ upp_error_count++;( ~2 `. n3 Q+ K+ @& X" y5 u
}3 m; z" B; X( ?6 ] D8 e# u' o
$ r& C# r& K: G: z- |8 z // make sure all interrupts are handled
) \0 }% n# ^ B: m( p E4 k intr_status = upp_reg_hdl->UPIER;
( ]( O. a) }, X! h } j& a! R( d4 _$ b
& _8 z& Y" N) q" {) h // finally: write 0 to EOI register
% r# W2 U. f4 {; A( I& s upp_reg_hdl->UPEOI = 0;
8 u& n! P$ @; k+ I2 x return ret;# g, r& Z' F" F( n* u
}4 T" h# U) W* K" O; w: m" _; ]! f
dsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):" w- z; G* X ?- z3 z
#define upp_dma_sendstartQI(x) {\
1 i9 ~, K. @- E2 W9 {# h$ n! e* r4 _ Wait_upp_SendReadyQI(x); \; m. x+ C% y1 ?: v! K; S8 C: P
upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \- |( G2 ~: h; y$ A0 U
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \ D$ N3 ]8 r6 L0 A5 s
upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\/ C& `3 J h) Z; S) h& E
}' [1 p, D4 O" w. P( R. S) V
: I" T5 V6 D% S7 Y
7 }) p4 W& ^3 v#define upp_dma_sendstart() upp_dma_sendstartQI(I)
( I6 i, W; G: ]1 _0 l7 x7 `2 N) G' [* e& M7 F
, Y$ h0 i; u" n4 A* Y
想知道uori错误是在什么情况下面出现的,好做出修改。
0 O& l% T) O' k5 j% k& O1 G& ^ I7 z, \( C. _+ k
3 I( k! z" z+ h2 z% X
|
|