|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?4 u& ^6 ^2 y$ z1 z
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:! B( z1 n6 F, a: s0 s3 d5 e
u32 UPP_Isr()
) [) a& x# U. M' e+ `4 E: [{- X' V2 S/ I* H: h: X1 y8 x
Uint32 intr_status = upp_reg_hdl->UPIER; y* o3 K3 |) b1 H4 }& ~
upp_reg_hdl->UPIER = intr_status;//clear
. \9 }$ [& E& H2 _7 P+ w// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");
, ?* f1 _. Q& |3 f7 q! E u32 ret=0;6 r, m l$ I; D! I3 t
% B* y5 Y3 h5 t" u7 | c
// inline functions
. }1 |3 P: ^6 Z& H8 s while (intr_status != 0)
8 |2 o0 |% _8 t {" f* {" l) G0 C) o" J$ Q" ?9 Y
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
+ A( l+ f9 s& q( \1 `: Q) A {" c( l+ d# d; O- B, o$ T7 F
// Log_print0(Diags_INFO,"eoli.\n");9 i1 S! n( l& h v
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);3 e0 Y, z- c, g2 z
}1 B' L) D# Q& }! U, \, o$ `* ]
! V1 N. C N. e* \8 _# } if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件$ u5 E7 ]4 z% y8 D
{
: A8 o) F3 D: t2 F8 O Log_print0(Diags_INFO,"eowi.\n");0 J; K* ?: }" X: {
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);8 X& J1 b2 f. N3 ^
upp_interrupt_count++;$ C2 M8 U, ~1 v& T5 Y, @' R; C
upp_interrupt_eowi_count++;
8 a/ q5 Z& b" k3 ?4 j, ~1 S/ U1 X1 b, g* [* p/ C
#if UPP_DIR_QI==0# n/ i! @8 m( F1 z; B% M6 f' b! T
upp_dma_receivestart();
# f$ a& m k+ M4 h ret=1;/ ]: ]3 A8 L* i" E
#endif
3 F w9 k9 Q3 r+ _ }/ R- W) M5 M$ n& Y' ?5 L2 Q$ @
2 {' ~9 r0 q" S/ d. S4 r; T
if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件1 P. r' g2 S# B, A8 g2 e
{
) [, P4 G$ ^* i! t' o- ^; p. N Log_print0(Diags_INFO,"erri.\n");
?: i4 L% b; ~4 K& D( X upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
5 A; z0 _. j' Z upp_error_count++;
6 f) q* H" M0 p. X: V0 _" W; U$ O2 e* q }
# @5 T3 O* y! P
: f4 x3 ^2 V7 y if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件; t! C8 X4 C3 @" Q
{# R( @6 z1 R& t2 Q+ Y& \3 ]
Log_print0(Diags_INFO,"uori.\n");: j, Q2 a" \0 m. V3 Z6 [ K& g i
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
( v0 J- k J8 Z0 P upp_error_count++;; j+ Y9 M2 W3 ~8 B! {! Y$ Z
}
' b% G( i8 y8 Y! ?4 C0 Q# p, ]; o! y$ P* V- h$ }! [/ Z
if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件; E. Y2 b5 w- U0 O \8 a
{6 A1 o' C- H" M6 q! ^" _( z. l. l
Log_print0(Diags_INFO,"dpei.\n");
* N; \6 D! D5 Y) ?3 G! O upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);
- s6 H5 b8 K M- \' H! E upp_error_count++;
$ |4 M9 t3 [4 E$ e5 U }7 f; ^3 @& _$ J: v6 L6 R" y
5 g8 s& b+ x, T2 ?1 z! r8 x6 E, N/ t if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)
3 O! E, v$ l3 P4 t- h5 s {
: U. x8 N- ?1 _4 O0 i) L% Y// Log_print0(Diags_INFO,"eolq.\n");
- t3 k! q0 ?6 V upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
: e" E0 x8 z$ B! g }$ \. _# }$ m7 g0 ]
8 }9 C' o! t2 }% j3 j* f5 j if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)
8 \* n6 h4 `7 D; A) L {
% o4 ]" k8 Q4 j; `3 x% |* S// Log_print0(Diags_INFO,"eowq.\n");
# A6 U* C( m; A% y- e upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);; W; P2 s8 f4 r+ S1 a9 O
upp_interrupt_count++;
& g1 ]5 k* J7 t# K6 M5 n#if UPP_DIR_QI==1+ [$ B) P+ ^' W1 V
upp_dma_receivestart();
& D9 r/ W" x( Y/ A" X ret=1;) W7 h1 u3 D( j9 d- A
#endif$ f) v0 E" y% p; Z4 E! ?
}
: }* y9 I$ b3 S% v& ?
' e: E( t6 @1 G% P+ f if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
3 G5 N! a j9 b- [. V% u {% h* @7 t) `3 j* d: `2 B) J
Log_print0(Diags_INFO,"errq.\n");+ f# ^4 y9 m0 e) D+ J
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);
% p8 D$ E8 K! d/ g upp_error_count++;
& Y% s g2 o& u. R( f+ T }
7 F1 ] A+ @6 \
) Z. J+ N$ j* m1 | if (intr_status & CSL_UPP_UPISR_UORQ_MASK)
( ^# l# B3 L! N' q' G {3 }8 c- U ^- o, d
Log_print0(Diags_INFO,"uorq.\n");
# C. N g- K' L5 m3 R upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);
2 Q% U; f* ^1 i3 d. S5 s upp_error_count++;
& [+ }1 [9 r0 t3 t9 O; h } j) v" B5 u& e% ?# |6 ]6 M
) E, n! L9 Y+ o3 c* W* h2 L5 w$ R if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)) E. p* v" {% \1 e& ?1 G+ m
{( Q3 h9 @ p' C. n9 u
Log_print0(Diags_INFO,"dpeq.\n");" c7 F2 P; \& }* B! Y
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);2 G" ~" }/ n! z1 a
upp_error_count++;* X: R0 ~4 {" s# }2 w$ Y
}9 Q8 m$ P' i- y
2 o) _, L; V, H P // make sure all interrupts are handled9 n- l6 p6 e: g
intr_status = upp_reg_hdl->UPIER;
; C( R2 ^2 a* M4 T1 I }
7 ~7 F7 P9 k' j# \( f
5 B$ C8 a% G4 O l // finally: write 0 to EOI register7 p6 R" O, l( D1 B* Q# O
upp_reg_hdl->UPEOI = 0;
$ p2 c- X) M6 ?' B: a+ l1 r0 v3 g return ret;5 T% l: r( b( M& H6 H- y7 H$ e
}
( F- r0 [# i0 @8 h- j, Y7 n* {2 xdsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):
) C. {$ B! ?# W* p& h* @#define upp_dma_sendstartQI(x) {\5 z, L: m! q: q
Wait_upp_SendReadyQI(x); \
\* i: b" w2 [% t/ F upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \+ ~! z% f$ y0 J7 D
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
# {3 K9 P. X1 O9 D9 r. x" Z+ U upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\9 X5 p9 o5 n8 g! r/ Q
}
0 ~: H' R9 { ~1 `1 c4 A. Y
4 p6 h% ?' _5 H0 Q' e: z3 `
9 v8 U# ^! o6 l1 j8 }; |/ T$ j) H#define upp_dma_sendstart() upp_dma_sendstartQI(I)1 o: S) i1 ?3 L$ L8 V
* T N J5 o2 V, I, a* J* Y0 W, G# D: @. [ f
想知道uori错误是在什么情况下面出现的,好做出修改。. E9 a/ v9 S) n1 P0 ^, B9 {8 A
' f( B1 S) f0 X% I& l
- N6 `4 Y; ^# J: R1 W/ B# H
|
|