|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?1 D( @7 [: n- R$ Z0 b/ Y
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:
, Q! c0 p" ?9 z* E- n( K& S1 Su32 UPP_Isr()4 v2 w* a8 I" {7 |( K8 C/ \
{5 l% k' X3 V. L, p. R7 X/ C$ Y5 f
Uint32 intr_status = upp_reg_hdl->UPIER;
3 ` C4 t' z* C6 m; n upp_reg_hdl->UPIER = intr_status;//clear( P6 `( O0 p: G; l
// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");7 Q% g6 ]3 J0 E4 p# Q' _% E& S& `
u32 ret=0;" o" @4 K1 B& U$ n
8 i; O4 W" v( [9 {+ U% I( ], F // inline functions
2 O7 }% B& P1 _ while (intr_status != 0)
* ?% c6 {$ a; r+ g" t/ c5 T/ i {7 R( R3 I' L4 g" a% G# K
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
" A. m) i. \* X! y; H9 Q! Q' e {5 c# N' q+ z8 D N1 ^8 R6 b
// Log_print0(Diags_INFO,"eoli.\n");# C6 B! q6 O4 Y/ H
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);* K7 M3 `) Y4 M, j) M
}; O1 |. s- N6 v: ?7 L
. {" q# \% v1 R7 Q1 j2 k4 ]" R
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件" q5 @$ Y8 k/ j/ u/ R7 J( B$ R
{
- W( h( T' F0 l Log_print0(Diags_INFO,"eowi.\n");$ v; w) s, P, g; f" O+ f
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);' J2 _2 U8 K- [, k3 B L1 r
upp_interrupt_count++;
8 ?- o& |8 K3 O5 | upp_interrupt_eowi_count++;) |* F0 B( H1 }" X. l0 [
4 K* @" I( u, F
#if UPP_DIR_QI==0
: F: v: B: i9 f) A& O( j upp_dma_receivestart();
" v/ Y# i7 x2 U# H: ] ret=1;
- `, i$ z. K8 n3 g#endif
* V3 @% E4 h. ?$ n }; X/ \& e {* b4 ~
: {- ^2 A- K# r if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件! [$ \: |! @8 ]
{9 b4 z1 O1 r3 j' W" g$ ^# q
Log_print0(Diags_INFO,"erri.\n");
+ ]& Q! W2 O/ K, w( P# I m upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);4 @' A+ \4 j/ A# s3 e
upp_error_count++;/ \. ?# F ?1 I! C* E+ C
}* ^ U% ?% f, t( a" j' X
, h. ^! s7 N/ M4 N' o if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件
: X7 J; z/ \) Y: s& z {
) }! _" C* l: h Log_print0(Diags_INFO,"uori.\n");
6 K: ^7 [& l6 }! y! F6 { upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
, V( {. s3 q/ L2 I3 V+ E upp_error_count++;
! D4 H; M- r' o- ^+ d' b6 U# h }1 {/ e& r4 o, V* j2 a9 a% m
1 l3 l) ~) e# S# o
if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件
4 @3 z. p$ {! \! i% J {
# R" d+ }8 H& Z, `% \# o Log_print0(Diags_INFO,"dpei.\n");' i; w3 `0 [/ l
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);0 T+ `$ F$ V/ l
upp_error_count++;3 l! D7 r( s! A8 c
}
& Z; g. X) o) B# d2 U2 H8 X H4 f O
% J* X& x& k: E( D$ o if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)' v$ H2 ^* `! x( f, P. U
{2 h. @0 w- t) ^
// Log_print0(Diags_INFO,"eolq.\n");6 t7 F" N, n' i. d
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);, ~5 v9 l# X5 c& x5 _7 s
}6 T! j. L$ k+ r& Q' \' {0 d4 ~3 I
3 [6 J2 X w! N5 p if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)
8 D5 F) ~" @9 K! m* l6 d# m/ ^ {
. ^; t8 o2 Z6 \& {, }" L/ d+ V// Log_print0(Diags_INFO,"eowq.\n");
0 `& J8 N6 ?7 ]* N o* O upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);/ R7 _1 |( T( ?; p
upp_interrupt_count++;. p9 f W, a2 w7 e1 q4 ^
#if UPP_DIR_QI==14 R0 _6 Y& ~. N4 b. x
upp_dma_receivestart();/ V7 m- [ j" C& c K* I9 Q
ret=1;+ k9 _- h; K9 a' C/ A
#endif( S! N }8 g7 V7 `# ?
}2 S0 O0 w6 D2 ~/ G1 n
m) f" f9 Z2 k8 a3 u( v/ z5 c
if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
5 M; a# ?0 G2 ^- Z/ X( a {
5 C n1 o1 ?; ~4 `: Y Log_print0(Diags_INFO,"errq.\n");# f7 A0 l1 t" g1 q- F
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);
* l6 J* _$ n, ]6 t8 v upp_error_count++;, h8 ~3 L8 Q+ |; E, b
}
% u% l/ _& Y# E- ~5 n+ k
8 m1 N n# j$ k9 O& o7 T3 h if (intr_status & CSL_UPP_UPISR_UORQ_MASK)* _$ U: K M2 \5 v8 K
{
& `9 R1 t! N# `6 R0 n+ f Log_print0(Diags_INFO,"uorq.\n");& y) R- i: J! Z: ?5 B# R
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);" {6 E1 H6 [8 n* m
upp_error_count++;( T) N2 I% X6 a( b# S5 g/ s
}
/ n" q/ o+ v5 w6 A' I" \$ ?% M4 w& z9 N8 E. G" ?' _- w2 e
if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)$ I6 x+ ^* F9 i: K1 Q. L
{
; }" _& C/ |+ s% W+ y Log_print0(Diags_INFO,"dpeq.\n");
: n2 [$ v; G# v% {+ X" Q! F5 {' @& O upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);
3 o7 s3 p$ M! X: d, [3 ^ upp_error_count++;
& O+ d" d3 P W! s7 \( L$ b }
0 ^, S7 T& j8 c" v1 v8 i" \9 t2 h/ w8 c5 t6 h( m
// make sure all interrupts are handled2 M# L% S( }7 Y7 y! z4 t
intr_status = upp_reg_hdl->UPIER; c: P7 z! C1 w* \. X8 j/ W3 o0 o" {+ }
}/ q! j. x& E/ m' A) r8 @
; u" p- Y* ]* ~6 V1 K! A
// finally: write 0 to EOI register6 ?8 e# E: w8 T+ g
upp_reg_hdl->UPEOI = 0;
2 b+ \$ p" V/ m return ret;8 h$ p! w) W( e0 X. c
}
' V3 S0 ^2 G: A0 k9 Udsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):, }' j/ R5 o4 ?) P3 u/ e
#define upp_dma_sendstartQI(x) {\
$ {2 E7 Y+ c* i2 s) \4 v6 f S Wait_upp_SendReadyQI(x); \3 Q! l2 C0 o+ c* [
upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \3 W" B* y+ t' h6 G$ [/ Z- X6 M% t
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
7 I6 o2 V5 F: }3 @ p upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\
. ?, |1 A$ T, |; ? }; k1 R0 l- M) Y' d5 `4 W D p7 ]" ]0 a
, g5 ? \! C I0 |$ d: f
0 x: ]8 m( Q% t) M k#define upp_dma_sendstart() upp_dma_sendstartQI(I)3 }5 ^6 I; W; G3 t
& E5 l2 L3 q$ j8 m, S- ?
) j1 m# j" ]7 _
想知道uori错误是在什么情况下面出现的,好做出修改。" [. A- V2 o3 y d- C) m9 A
6 j4 T4 d3 p+ w- o3 K/ \
' c9 s9 w" Q" ?( U" p A9 x* Y# d |
|