|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?( p& O8 j0 `; c
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:; Y1 R ~) B# w n/ W s4 ~
u32 UPP_Isr()& v: O* G, G8 X* m: r
{
6 f9 m0 ~. K, j% B* H Uint32 intr_status = upp_reg_hdl->UPIER;
# n: ?4 y% ]- g% g$ g G2 y upp_reg_hdl->UPIER = intr_status;//clear, u& Z7 z$ |, n+ c, m& z/ {1 M
// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");
6 z" K& {! @! X) B* f& P$ w! }! e0 c u32 ret=0;
1 ] Z n; G! E& L% X9 q- F& p% l- q: d. m$ S! M
// inline functions& U4 s. R1 Q# s" Q8 r) f
while (intr_status != 0)( c5 b8 A* E6 ^4 r% r. E
{
* \4 c6 q( R$ z6 R1 d- |/ y if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件$ O9 R4 H& q2 a% @+ A4 c
{
- s. J/ G; h) ]/ _# ` M// Log_print0(Diags_INFO,"eoli.\n");" A4 {2 r) ^7 @
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);" d( d5 P( Y( I5 q& b @- l1 m
}
/ c: @ _& O' X- j( F3 f6 M5 {$ \. w& d9 o/ W
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件
- c2 w9 ?' t1 T1 ?; r; G8 _ {
/ L& q/ E: C; _9 N5 k6 K Log_print0(Diags_INFO,"eowi.\n");( ~% y' w+ g& i
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);, D4 W/ y4 O' I" W- y: {3 L
upp_interrupt_count++;
( O6 P$ S. |* \, Q# T8 X' J ~% W6 { upp_interrupt_eowi_count++;# }4 K* @6 F" Z, c$ j: q
' a, W2 k+ `' O: b) P3 S
#if UPP_DIR_QI==0
3 o# J- e$ U/ @7 i! Y' X2 a5 s upp_dma_receivestart();
9 E0 ?8 T' W4 o& z ret=1;
: e+ ~- U7 z4 X#endif G0 r4 G4 A) I$ L6 Y
}
g3 G- s: ]( n
- d8 g; Y+ [4 w; j if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件
: r3 M- {! G' L {/ E4 ]5 P; b5 i+ m: y) P, X
Log_print0(Diags_INFO,"erri.\n");
' I3 ]: X5 A0 w% T upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
1 Y F$ w2 c$ F* m4 \ upp_error_count++;
# g4 L* f7 c- v }
4 P! D1 d* G: z$ ^5 U5 _; I h1 Q$ V6 ~7 U' r1 E$ q/ h0 v! p$ t
if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件
6 L% v3 \2 I. D1 k+ f$ D4 ]9 i- S4 F {2 `* B/ J. R0 o8 @' d
Log_print0(Diags_INFO,"uori.\n");
. H1 ]' h, Y( b& u) O upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
8 @2 T! b/ _& J2 m. e$ j. J upp_error_count++;5 |/ A e t9 l2 G( J
}
/ p `. T: Y. z+ ~' @7 @# z3 u2 O. r, k
if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件: c9 r+ ~6 f: S7 J- t* W C' p( c
{ l q4 a% f8 B# _+ G9 j* S, h
Log_print0(Diags_INFO,"dpei.\n");$ f5 Y8 L3 J' A
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);: U1 p* p7 \5 H2 ]6 J) b
upp_error_count++;. y" T$ V7 N- u1 w8 l3 O
}
* P; W# Z. d5 K$ }, l1 H$ v5 \9 u2 K5 Y' Y- d1 J; J m
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)0 w- Z1 k4 m8 n) m* w, z
{; R$ {) g! Z9 C) }
// Log_print0(Diags_INFO,"eolq.\n");! W3 G- B/ h8 G8 l
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);7 n8 ~* w5 x6 e
}6 d, H% Y% D% j4 u8 o7 o
( d6 ^) X* z9 g! M if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)' O& v4 b7 i2 ^8 H3 f1 P
{
/ d. u. U: Q: u3 f- r1 l' L// Log_print0(Diags_INFO,"eowq.\n");7 ^) X; h6 y0 T( t3 W: I: j
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);
( ?2 T/ u8 R7 p4 T# g. D; S L upp_interrupt_count++;, l+ f( M$ k/ m' ?+ g
#if UPP_DIR_QI==1
& _' ?- u1 X$ T9 T upp_dma_receivestart();# m. D t/ g6 x' _" k. a
ret=1;
/ R/ \% x3 x8 [( o* Z! Z5 K0 z#endif% Q! a8 d4 `$ f- t3 |. w4 z, S) J7 m, h
}
' k5 f) w7 w. `( U2 s# w. {" F+ H
! i1 K$ \8 P4 |+ \7 G, Z+ l if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
/ d2 Z Z6 i' [3 \3 V {/ {7 B) x3 ?7 r$ D- Q& X
Log_print0(Diags_INFO,"errq.\n"); y& r' h4 u0 P# {7 [# o0 S
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);8 Y9 T* ?7 J! w! A# r' |" {
upp_error_count++;
; d( ?0 b$ ?" Q' m# w' P& Z }
3 L$ y3 ~, e- A. g0 t7 R# \ ] J6 x7 D6 X' O+ K/ ]
if (intr_status & CSL_UPP_UPISR_UORQ_MASK). a% m+ X- a- A# o
{# c T. a7 A( o/ h& o+ ?, t9 g
Log_print0(Diags_INFO,"uorq.\n");
- K+ C1 o, _2 }! g0 k7 A upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);1 z3 r! v0 I7 b+ p' b
upp_error_count++;# C7 W$ D* X- g. A3 X$ @
}
2 ^: }( [+ ~# k; x
) x) @! {* C/ [ if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)7 w& a9 q- b) [* c. j/ d6 J/ y
{
! ^9 ^4 @/ O! S0 X/ O0 o Log_print0(Diags_INFO,"dpeq.\n");+ R- g6 I/ Q3 h* p+ T8 d$ y# v
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);4 ~9 @ i5 j' n9 l( D/ l
upp_error_count++;
) Z3 l: y) H% ?; i" ?( Y" x }
, u2 }& q% k) M4 ^7 |4 b" A$ [( g4 Y: T
// make sure all interrupts are handled) V/ l1 l7 B* h1 D, d. Q2 Z/ K
intr_status = upp_reg_hdl->UPIER;0 M4 A$ k* H* j* y2 ^) w" q
}! S5 t1 P3 |# w
9 E4 \. `+ a" s1 U+ m
// finally: write 0 to EOI register7 m: N- O% _4 h* p# K1 X
upp_reg_hdl->UPEOI = 0; y' c2 M$ E- h% G! x
return ret;: ^+ J, [- `) @3 g: q0 v4 M0 \/ t
}. S) V5 B4 M! e3 c0 M8 s
dsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):8 P( c d8 A0 @4 o
#define upp_dma_sendstartQI(x) {\
- c* `9 l/ p! h+ c; C Wait_upp_SendReadyQI(x); \
# V5 e8 _/ k* c) J2 p; z' Q upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \+ T" W9 q5 d) @: k
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \9 z; U9 Z% z3 N: c8 g2 H6 C! Y4 w
upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\4 ~/ R$ `7 G2 G' o
}
y' [7 w9 x W. n0 @
/ L. \+ L% r% K) v% V2 R* K7 A
' k, g4 J" x9 G5 Y9 S0 T#define upp_dma_sendstart() upp_dma_sendstartQI(I)) ~" Y* q( s& ?
$ |7 f3 V" E6 M6 `' P% a& z
0 _/ y/ f/ Z P+ O B2 ?0 g% C# |. e
想知道uori错误是在什么情况下面出现的,好做出修改。
% ? i2 o6 h1 \! W( T) b J$ ?, r- j* Q3 m
2 ~; z; D! c. v4 V; L& r3 K |
|