|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?/ H" C7 A5 z! r; S0 c7 Z0 J9 h% ^
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:
" z& V( N' H: L8 ^3 Lu32 UPP_Isr()
3 z; |& J/ m: y& I* e{
/ Z. O! a9 G+ U. Z7 e Uint32 intr_status = upp_reg_hdl->UPIER;
/ z Z7 o( m+ A5 I$ K9 v upp_reg_hdl->UPIER = intr_status;//clear
* k% r5 j. F& B* a$ l// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");
; C ~) M/ `7 j u32 ret=0;7 T# z5 V5 k* h3 B6 a, @
9 h+ N4 w- j/ u6 ]5 J) A( A j: g' _
// inline functions. ^. q1 c1 L' y$ l6 Y$ t0 C% }
while (intr_status != 0)' J: }& F' L; ]& Z: Z, _5 y# ~
{% h1 |8 }( f3 e# R" G3 R l- u: @% a
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
% O2 l5 w. F' W \7 C {! m& {3 N' e& d
// Log_print0(Diags_INFO,"eoli.\n");
6 @ K7 g$ d4 P" ~ I upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);
% c# a( ~) J2 T. x }
7 Q% n3 _- i8 {: ?. U% K- s: S, a0 V8 ]# O
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件% W# S% Z! B' R _9 b6 j. Q+ W
{
* m5 `" q7 u5 S l: _- v Log_print0(Diags_INFO,"eowi.\n");
+ ?) u. H; V! T* i9 g/ v upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);
! N8 o" I9 {; i9 s# {6 `! U# b upp_interrupt_count++;
: _1 d( G5 ]; Z8 D3 m. c' P upp_interrupt_eowi_count++;
! J- r; C6 m2 c5 m f- b8 b3 k- b4 w( e: R+ h% u
#if UPP_DIR_QI==0* A& d4 b- I( H+ O# i/ M9 A# X
upp_dma_receivestart();
0 Y+ r8 r+ c) E7 P ret=1;5 h* B9 i0 W8 @5 x: J3 q
#endif
. u: K: A% E6 p( V9 L( n% p9 | }
' {+ N) n* M! {: F: r9 i, @! A8 p! @5 ~# |
if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件2 Q, j; e% ]6 L) y0 }3 f! E
{
* |8 P* |0 J1 \# T! G( M7 [4 i Log_print0(Diags_INFO,"erri.\n");
5 D, ~* D7 ~ n( m1 @ upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
. j. A# A* K" y6 ]/ S2 @1 \ upp_error_count++;
& _0 b( Z2 ]8 t' g& c% H }0 y" \/ h, [, [/ n
: ^4 V# _$ e2 F5 @
if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件4 F+ B; n8 D! Z4 {( U
{' \0 W [' Z6 {
Log_print0(Diags_INFO,"uori.\n");& q+ G! t' e# a* r
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
6 X4 ?3 B3 o! p; z/ c upp_error_count++;
$ @- o- |3 U4 T4 T }
3 B: d ]$ P4 X" @9 m. y. C% ^3 q
' c) {6 P0 L; c( U1 h if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件* N7 _' |0 _( t& l5 x
{
% l/ ]: ^" a2 r/ ?3 b( y9 F2 o Log_print0(Diags_INFO,"dpei.\n");
) [* f* z, k9 U- F6 g: a p upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);
. ~- }9 D/ R& k# A upp_error_count++;+ ?4 p) E7 F# ]# P& z. n
}/ p) V" V9 ^2 P$ u( _0 b
* K+ L: W) U) ]" U1 V7 Q7 O8 W if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)
! ~# L E; N; n K {
2 T1 \5 z9 {% S, r6 X0 t7 D// Log_print0(Diags_INFO,"eolq.\n");
% ]/ Y, H. Y) j' V: c$ B! j upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);+ V" U: P8 \& j! L4 `$ ]- y( O
}
. |: V( v6 I9 j" r, I
8 t3 H# E1 n# u$ k& r if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)
( m" G% W8 I) N {8 @$ W F T+ n' h
// Log_print0(Diags_INFO,"eowq.\n");
5 z# w9 T3 V( {/ b) J upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);" k* s6 [1 ^$ i# i m
upp_interrupt_count++;
8 K3 ^: @0 T& u/ v1 T: J#if UPP_DIR_QI==1
" Z' h' T+ v+ t6 f2 w0 j' N( s upp_dma_receivestart();" @& @) X5 K6 E5 `+ V( s
ret=1;* Q7 I! c5 ]; q+ ~& y/ l
#endif
9 B- F6 a* Z/ _/ T }& E6 [: a; g% k/ L* ~5 Q! J
6 M! d/ f+ Q* F9 n2 c; E1 i
if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
2 W! w: v. ~1 {: V; X. @ {5 W3 R, r. a, G3 W- R& \6 z' g$ c
Log_print0(Diags_INFO,"errq.\n");& E$ k. Y: P7 X4 [' \' b+ }
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);- M0 p$ I1 E+ t6 A1 B& P: M8 f
upp_error_count++;; U: g/ ?" t0 K9 |0 o
}
$ o1 X; I) H+ a k
, P* m+ h+ t5 |9 W& e# d if (intr_status & CSL_UPP_UPISR_UORQ_MASK)5 L6 ~: T1 \- d5 M; v
{; T% V( Q3 @: R1 _9 c
Log_print0(Diags_INFO,"uorq.\n");( N8 \6 Z6 m; t% {7 i6 ~; X
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);" o) N8 E* L: I0 P
upp_error_count++;# V, C& H* p2 \, h+ O, c* Z
}1 l% ~* K8 N0 @. ` l& }; _
1 x) j* {, F# m# V if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)9 K/ X' f, i) t2 C s
{3 p5 w2 G) h& H2 H7 p
Log_print0(Diags_INFO,"dpeq.\n");8 ?. m/ s$ ?8 v2 R8 Q% M; \
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);
0 T. g) a3 g* }- k( i: {( d1 Z upp_error_count++;) v, D; ?% e& k6 g
}
8 H$ A1 Y F3 ~4 x' y a/ M+ W% h0 b" c i T- G
// make sure all interrupts are handled# b1 s" k$ I3 g
intr_status = upp_reg_hdl->UPIER;7 G& c* X- }* _5 i1 z3 h# S
}! P+ k* ], I# r8 m$ w( ~& |: |! Y
4 E) D7 y3 P+ i: m9 v# h8 B. E
// finally: write 0 to EOI register c7 U' a( r9 ~
upp_reg_hdl->UPEOI = 0;
& n- S( V Q- R- A5 D return ret;$ j& q- X' I0 N; u+ e( V+ J/ C
}
- ~/ j* r, k9 Cdsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):
/ ? ?4 n6 N5 d* F; s- H. v. T#define upp_dma_sendstartQI(x) {\0 ^ _8 C0 Z( e5 Y8 d; v* r
Wait_upp_SendReadyQI(x); \
8 I E' X; f& L5 N- z' x upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \+ v7 M! d/ M2 q; e$ w9 B7 M, p
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \( X4 j* H }" K% \
upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\
: J2 V$ m+ s* F( n* R5 k }2 v; v3 C/ v+ i8 Y! S" j" A
9 w+ D2 P, E- c+ \( n( d
' G& h! B5 |1 o% T5 ]: O) c#define upp_dma_sendstart() upp_dma_sendstartQI(I)
7 o8 b( ^8 p' R. F3 o
. V" e7 l4 N9 y+ Y1 _6 H5 ~) b4 S! I* h/ o
想知道uori错误是在什么情况下面出现的,好做出修改。! L! L4 R/ m7 t2 ~
0 P# h/ e- g" F1 p3 c) w
0 N8 o! r& J& g, l) {( g |
|