|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?
4 [, z, J8 L c+ F; sdsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:
! H2 Q3 R1 y4 @7 }4 au32 UPP_Isr()9 m! N0 }; u+ @ ?" q: x
{5 h9 \7 k4 x7 e- ^" A
Uint32 intr_status = upp_reg_hdl->UPIER;" e8 y# @& y2 X$ {6 \* R7 p' e* l+ y0 D
upp_reg_hdl->UPIER = intr_status;//clear
+ A. i! s7 ? O, y+ e0 X5 [$ G// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:"); D3 _ j7 f$ d! g0 ~% v* s5 M3 x0 `
u32 ret=0;
8 R* r' X1 @# k4 a
: H; Y% _# Q7 M$ L! r& x* s5 C8 i // inline functions5 U/ G! L/ g5 \$ W6 b# k
while (intr_status != 0)0 I* B1 ?) V8 K; Q
{
. T& N0 l; P; V: x" e* \4 {$ _. g( V+ k if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
0 ~9 o$ l, R; m {
) u/ ?( D) s' N+ t( l1 d& l// Log_print0(Diags_INFO,"eoli.\n");# V$ P) X6 Q$ _& a7 ~7 @
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);
! v; ] z, N& \ }
' T) \' ?' m3 Q/ y
+ y9 N- K2 E2 u: f! r+ Y. h if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件
8 h S7 H) ^) h/ ]4 z2 Z0 d {
}8 B$ b6 d, S) \) P) p* m# L Log_print0(Diags_INFO,"eowi.\n");; c. l6 F: I2 \( E0 I
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);7 Z1 I5 E9 c: M
upp_interrupt_count++;8 S3 ^' J) ]8 {0 |5 H% h! c
upp_interrupt_eowi_count++;0 T1 g+ n) T9 t) x' h
6 g) Q6 ^. u+ B$ `. e/ S3 K4 u#if UPP_DIR_QI==0
& _; X9 U; W1 M8 [6 _# I upp_dma_receivestart();
& z8 t" r0 V8 C( k. I ret=1;
$ @ w0 Q1 P6 C1 [: c9 B#endif
& v* A9 D$ ^$ a3 ]9 e- @ }
5 V" T( R8 q* L. S6 l2 I. f# c% Y5 h. U' F; D
if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件; F/ n7 A! h g4 K# e
{& }8 z( s S b' x
Log_print0(Diags_INFO,"erri.\n");
' s* m; N+ S* ?9 n* q1 E- w- x upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);3 I: _4 [; G# {% m4 ~9 S
upp_error_count++;
5 {7 P' a/ {9 b" a4 f: P6 ? }' E$ s% i+ @7 [( y& t
0 m; l4 B; h* [: J
if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件! M) H, `5 s( I
{. V1 n7 l: a9 E! l# E
Log_print0(Diags_INFO,"uori.\n");0 z1 {7 n4 ?' h0 [$ L
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
- o& x9 t* O% ?$ }7 g; M, m upp_error_count++;
) |+ X6 ^$ ?# G p% x }( B1 V9 w# w k+ p) }9 ~ Y) t" z) p
: l! v% u! M5 r, u if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件
& `/ N, b# }+ g* y( A5 v {2 T8 Y( b7 ]' H! E7 M; K5 n
Log_print0(Diags_INFO,"dpei.\n");
+ o4 Y% l$ @4 _( u' _& d7 k) o upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);% R! e. ?/ D2 z% N% G+ @
upp_error_count++;
5 F3 o5 X" v6 Z3 f+ P }1 h2 [, w/ c' h- |4 f, j
# @, t6 U- t1 @( L1 L5 P3 p
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK). y3 s) \8 _5 }; C
{8 Y w: \: C3 j" u0 a. j6 T
// Log_print0(Diags_INFO,"eolq.\n");
( b! V* T' \& y& S0 r( Z% J1 d# V upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
" [) X) G6 ?6 Z, ]& C }4 M5 @9 C0 G: L3 c+ K2 q
2 r6 t1 Y2 J- m# D) N
if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)+ J& y% o) F" {
{% K9 e3 p& k w8 f) D' _/ N! P* A
// Log_print0(Diags_INFO,"eowq.\n");, f5 e+ D# n" N( C0 D4 V3 c) _
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);
: Y& y0 |+ g+ K) p upp_interrupt_count++;
6 t6 q" d+ K2 v, H# g& S# ^#if UPP_DIR_QI==1& B! y r) ~ g* d
upp_dma_receivestart();
: B" D$ d! M0 b9 e0 ]3 i1 Z ret=1;
4 S1 I7 M7 y# i- t#endif
; I( F6 @) z4 P1 f' z! ]( t! j7 n }
, O0 F/ q/ |7 m& @. X8 \- j+ I
$ ^* G% i3 r+ O; H0 I- b# l; i2 @) Z if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
& P; u+ S B" E* T3 r+ O. o3 v5 ? {" ~) h9 A& E- Y+ T. t: D. r
Log_print0(Diags_INFO,"errq.\n");
( Y% H7 L1 N9 G, } upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);; u& Y# C1 i7 D" c( q0 h3 l3 M
upp_error_count++;% H; Q- _7 B7 ?! L& O, D; ^
}* `! T' v. y, ^! h, h* t E+ p
9 v# y( i! ^' M0 j3 n if (intr_status & CSL_UPP_UPISR_UORQ_MASK)9 [7 |& q% b4 U
{: O2 t8 v- F3 ]: Y
Log_print0(Diags_INFO,"uorq.\n");
; Y8 Y& L% L4 C upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);" h& L1 ]: W/ b. @
upp_error_count++;0 O8 Z/ r& v0 j( f
}
& S4 K4 L- u8 |% @, m$ Q+ n4 U' ?" c0 ^( D
if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)/ m. T0 ^8 l+ @7 X- O
{
$ \6 C) [; a1 X/ n7 u3 w Log_print0(Diags_INFO,"dpeq.\n");0 e* o4 u& b6 J. P, d6 X' b
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);4 H* m; B/ S W0 Y( |: e4 l5 q
upp_error_count++;
8 J- q$ H- M+ ^- W }) s0 z" T* f% c5 R
5 P+ p5 t( O: q3 k // make sure all interrupts are handled
" y- s% E( r* H8 M; w( M: W intr_status = upp_reg_hdl->UPIER;
3 T3 G0 B% c$ H: Z9 ?& [ }
: J, n# M3 W+ Z; z0 P0 B4 a5 J0 W1 f4 w
// finally: write 0 to EOI register
& l* S; U8 ? ]7 }& ^ upp_reg_hdl->UPEOI = 0;0 J4 H. C; f, g4 D* a
return ret;
H+ l) i: `/ ]3 o! F+ Z}
( r) v9 d# @3 Y! h5 c% a5 y" [dsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):& i9 ]$ X! t7 U$ T' \
#define upp_dma_sendstartQI(x) {\, B @2 m$ o- l7 W% N/ l4 K
Wait_upp_SendReadyQI(x); \
3 A) t( Z5 K1 S$ u: x* S* a& T upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \
9 ] p) ?4 c) W D! q upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
7 F% |1 A U' J+ b: r# v upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\
! `, O+ p2 O- W e0 d }/ @" g C9 J- H6 I) o- w
6 P) V1 z$ b# V0 w+ w# ?
" C; [ N( ~! I6 @% C& Z#define upp_dma_sendstart() upp_dma_sendstartQI(I); E5 q" ^6 M1 x
& m% t; {0 \* e# Y
3 O9 I; E2 i& ]0 _8 t
想知道uori错误是在什么情况下面出现的,好做出修改。$ l: b3 S u9 I9 a) L& X; l( ^. m# I
5 K+ M3 F0 M/ k' A
- z" I; x! z, H& Z
|
|