|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?% L- C b" k+ i8 ?4 G& W
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:8 o6 L- }: j4 E+ K# _6 `- v& K
u32 UPP_Isr()
/ B4 s3 z t- _0 Z, V, t{
2 e9 H' H2 K- Q. c( e Uint32 intr_status = upp_reg_hdl->UPIER;; K1 `. D8 Z! ~7 O1 ?1 f2 F Z! }
upp_reg_hdl->UPIER = intr_status;//clear- k- J# N8 x% ~- w& c4 z4 F' U6 n! S% ^
// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");8 S+ }+ n+ v5 a, j7 B% L
u32 ret=0;
# f$ ^" o' E, ]5 o1 G* @* n& y" O; m2 H5 ~5 P
// inline functions
& Z) k' n1 W) \# T while (intr_status != 0)
9 S& F s) M/ z; h* f+ O {
# j8 N7 W% j, ?, ?9 |" K if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
- s+ D* O7 {7 G. p {
; E; i" U7 Q' h$ x2 ]// Log_print0(Diags_INFO,"eoli.\n");
( }7 O5 W9 B9 E- W2 I upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);( Q4 T' K" O: l- |* n
}
, M1 C8 h) g! r, U+ P, S9 V* Y- R0 n. h2 D6 q
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件, f$ n0 o2 d( a& ~2 E
{0 I5 _4 y1 N% k$ P+ C
Log_print0(Diags_INFO,"eowi.\n");3 h: Q- ?& i0 \& s' s3 s+ W5 M
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);
+ l; l$ f2 Y& f# e M! J upp_interrupt_count++;$ n; N- W% I. J
upp_interrupt_eowi_count++;: c3 ]8 O6 D9 v/ @
! H1 l, O8 x8 d" u" K
#if UPP_DIR_QI==06 y3 o! M% N" H
upp_dma_receivestart();
- t/ `1 r1 B: C: N3 B ret=1;3 T# c7 b. j2 f0 k! s* |- M
#endif
- q6 j1 w6 v) g" w3 s }
& P+ t/ K5 n |( J* w" e) L; Y/ g% p8 R
if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件3 T( a* j1 z$ \% L1 c
{- _3 r7 j7 r2 U( r
Log_print0(Diags_INFO,"erri.\n");7 Z j( _' O+ i$ Y) \) e& w
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
6 R: G& w9 k+ p& Y: [4 k upp_error_count++;
9 T( w& N8 o: Q0 Z2 W6 m0 ^ }1 G! n2 W) e, v" i1 A4 G
. i3 J9 e! F0 O4 g R if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件6 y4 L- f1 ], ]1 |! _
{
4 S* j- q0 _* ]$ U9 [0 b Log_print0(Diags_INFO,"uori.\n");* o3 o4 g0 t6 t% w3 w
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);- ~. G# O9 e1 A( p: E
upp_error_count++;
) a0 g1 t$ c& G. |" S0 D }, i6 i: D- V* A- g; V" J5 A! M2 `
* v' Y7 } W# r# E0 S5 b' F( V: ]/ x if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件
) X6 g5 W6 A- d' u, H9 q {
$ M' V# z+ f, f" \; v4 t' O Log_print0(Diags_INFO,"dpei.\n");* J; h0 v# M" J0 T- q7 Z F
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);
9 ?6 [* K$ I: a O+ N6 q upp_error_count++;
c( w3 I) z+ Y# w, b) V0 d }6 Y# T4 i0 I K( W* I) W$ c7 u
+ y2 D$ Y$ |& c- H- n: C. G if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)& e8 v: k% h- K. G! q7 _8 E
{7 h# b* A$ T6 q: O6 w7 S' A7 }3 h
// Log_print0(Diags_INFO,"eolq.\n");
E# f/ l- z" {- T* ] upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
+ w2 G' k# H; s0 f" c$ U }4 ]( l* J0 `0 M7 M) X
3 O2 V! N% M( H x! S if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)
1 h2 ?; X: l. U% U- N3 V/ y* y1 L {7 _: G* m6 ?( k3 w1 Q' c
// Log_print0(Diags_INFO,"eowq.\n");
' c7 |; @# T, f, C upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK); I! U6 I% ~6 v" M b2 w& w
upp_interrupt_count++;
j: K7 z* ^) b( ]6 f. R#if UPP_DIR_QI==1
$ F+ \0 ^1 E$ D& l* y9 V upp_dma_receivestart();
! ^( e9 i( H) A ret=1;
* {% K1 q6 \* @+ S, h& @: n#endif) n2 Z f* @7 d- T. D7 S
}
2 Q8 V: I6 }# G' t: h
9 z% M U( J1 Q if (intr_status & CSL_UPP_UPISR_ERRQ_MASK). `9 L: e4 R8 e$ i2 g
{
/ ~! q4 O# C6 G1 j, t0 l Log_print0(Diags_INFO,"errq.\n");
% b: ^4 S$ h5 i upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);( r: ^& |' G$ T
upp_error_count++;; R2 f' a8 [: i9 s& F3 z
}
/ n! h( s1 J8 {7 i* e5 K4 G. A% M b% j3 T# [( X
if (intr_status & CSL_UPP_UPISR_UORQ_MASK); S0 C/ J( Y$ \* i' q
{8 K4 d* f9 c% G3 ]1 C
Log_print0(Diags_INFO,"uorq.\n");, p2 W# y& X* N7 ~& V# P( ^3 [
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);; ~) `, f2 Z% f, w1 {6 }
upp_error_count++;
$ ]& ]9 a+ J4 i3 f/ U1 X }
) R2 v( o+ U. A" f) V+ b6 e
" R0 v/ e1 G, Y6 F$ ^2 F if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)
4 _ n# p7 b* O1 D S8 W4 A {
4 |/ Z9 R; C* u Log_print0(Diags_INFO,"dpeq.\n");
2 `2 y1 D# }8 ]$ q4 | upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);9 v& ^; L u2 S; n
upp_error_count++;1 Y8 }1 }" a: w L! W9 |2 `, L! {
}- r! N/ I1 K' A# ]
+ ]1 Q3 L+ b( w" j' o: i0 L
// make sure all interrupts are handled/ J. a9 }* n6 S5 B
intr_status = upp_reg_hdl->UPIER;6 A C3 g$ }# N* @3 M2 @5 J8 W
}4 K$ d8 _% N9 ?: K# {( Q: k8 G2 v
& X4 ` Z( Z% z% o/ {" s0 D7 s1 A // finally: write 0 to EOI register7 \' S; E7 l' A3 v6 K9 ^8 I
upp_reg_hdl->UPEOI = 0;! L; y' u. H6 y9 J4 G' o
return ret;, R, C' l( B% Y" X9 s% G& M' N2 i3 s
}& r7 t0 `9 `) f( W5 u! B# @
dsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):
) }0 j, o' [" c+ T#define upp_dma_sendstartQI(x) {\: d/ ^( s- ^5 F1 d0 w* Y% x" c
Wait_upp_SendReadyQI(x); \6 v& e) ~) w5 a$ M
upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \
' l9 M+ V' v" V( ~' t upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
6 C R8 M' l% `( b: y( \ upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\# {% X' h3 R+ j
}
8 A0 t5 J- E$ K, X/ y' \# ] `, j- X+ j1 {4 z/ R
5 Y9 a$ M \& W8 I5 t( P/ G#define upp_dma_sendstart() upp_dma_sendstartQI(I)+ W+ l8 ?. |5 _/ G. ]/ n
! i$ k8 o7 e/ f8 |( r$ U
; X9 N4 F* v6 C C
想知道uori错误是在什么情况下面出现的,好做出修改。, p5 l8 m4 g8 Q# w
) `5 @9 z' s! T2 E7 s' v# @# C/ K: Z
1 E( [4 M4 O8 K! B4 _) i |
|