|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?; Z8 @6 ~7 o6 m! q. R/ E
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:5 K" e9 Y6 S" k4 ?
u32 UPP_Isr()
" M' l0 |. Y7 u' O/ n& c5 B& `{
" N4 }. m2 f0 A! d Uint32 intr_status = upp_reg_hdl->UPIER;
3 G- y& G- `( y* }. a% [% ^ upp_reg_hdl->UPIER = intr_status;//clear
5 o; P, D: k; y) f// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");
/ O" o4 w- N( D& B# U$ W0 v3 d2 v u32 ret=0;
+ f4 |% H* _& P- ?1 W# C( l( }) G( ^! B$ n4 {; t7 f
// inline functions& }" i) W/ c9 M+ }% O, R
while (intr_status != 0)6 ]4 ?& c, o6 L5 P' Q" ~# s
{
+ t' m( M. ^ |4 i( y- o4 B if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件9 m t( u, H5 Q5 F
{0 [0 Z# M* w) L) b! u
// Log_print0(Diags_INFO,"eoli.\n");
' V4 h" C2 R& L+ y- e. L upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);
5 z& m# K# g+ F1 j }
+ A% _9 a( W* @0 t1 n. o% m3 N& h" X; z' U/ g {( V, b
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件
6 x' E9 L$ p" s& Z1 W8 q1 s! R. L6 D {
0 H( A3 K: d! a' b+ h2 [) ^ Log_print0(Diags_INFO,"eowi.\n");
: c1 U: a0 z4 H3 J Q+ w" L upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);% |. a% N1 S8 g7 x8 B7 i4 A
upp_interrupt_count++;
1 L) A8 ~' g, P1 b+ Z upp_interrupt_eowi_count++;
7 P3 K. @' v4 o$ b& H
! d! N8 }! r0 K; j0 h* t#if UPP_DIR_QI==00 h+ h8 ^0 Q8 d/ x2 P( Q7 k
upp_dma_receivestart();( t% z* z% A* _$ \
ret=1;
( B" O d6 u6 h#endif
1 T+ G* p. u5 s4 u. t& E }
6 p& o7 f: Y' o, m5 Q7 Q# I, k1 I8 c& o
if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件# q1 H. i0 m. J4 y1 l$ R ?
{- W. ]( k5 q8 W& P* u/ O
Log_print0(Diags_INFO,"erri.\n");
4 T; H% G' D0 }/ ~ upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);/ M. \; m( Q3 n) P: o: E
upp_error_count++;0 `$ Y( j+ T+ d# Q5 G. e* {
}' a# K5 l8 W. E% B5 J
' W* u" Y' f0 r5 ~2 c6 N/ i
if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件
& d7 J6 C/ g' F" j' N% |. X3 Q" C {0 x1 a/ q2 M1 Z% Z6 p* o# W+ g, q) G$ V
Log_print0(Diags_INFO,"uori.\n");
, F, I& L5 a- k; t L0 M upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
/ q9 e( M: e) i$ T0 y upp_error_count++;/ z* [0 X+ S$ H% |5 _; Q- n. g
}* v( e1 y- ]. ?! d
* X! [2 D& Q. ~1 u, ` h M8 X
if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件
0 O$ w# k# E& W4 |. b3 ] {$ i# b% ^8 K" |" B9 }# O
Log_print0(Diags_INFO,"dpei.\n");
, s* q; x! d0 i0 ~4 Y; S& @! x upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);: y& B/ I( O1 B
upp_error_count++;" h9 ?8 p7 F- f8 J" K o. D
}
% m" ^/ k& M# v5 n3 g K) m2 ^6 e: b, B7 K* i) ?6 P. X
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)) Q1 ~ j7 g8 c8 q
{6 |, \) d# |1 f9 n& E
// Log_print0(Diags_INFO,"eolq.\n");
" t+ w6 i4 a( n' y upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
# R& V4 G7 t6 U# |8 @4 R$ ~# t }4 ~: a: Q1 G2 q3 F) O
& |1 S0 I `6 ] e if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)3 D- P0 e8 Q7 Q/ V
{1 |, g! h* r+ i4 Q- |, Z7 t7 V
// Log_print0(Diags_INFO,"eowq.\n");
- s" k7 @# l) u( x5 T upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);
$ c' k& }% W8 p+ u; B upp_interrupt_count++;
& T7 g. k0 X* ]! f#if UPP_DIR_QI==1% q) W) m n z: W8 J: j* v
upp_dma_receivestart();
. y$ r5 A1 d4 P$ V ret=1;. i0 H9 `% E3 b6 C4 R0 ?7 y' t4 [* @
#endif
8 ` x; n0 B7 ^; R }5 H7 w; U# a% o1 E
t7 O5 \4 ?0 x$ m3 Q* n7 U
if (intr_status & CSL_UPP_UPISR_ERRQ_MASK), @7 w3 j0 M" N- p7 B3 s. ?
{* ]: B, t! l. O( N2 p6 K3 x
Log_print0(Diags_INFO,"errq.\n");
, H5 L; V8 ^6 v; I) l( S upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);8 A& [- a8 i5 c0 U0 l( p, k
upp_error_count++;
* l! N- D; N% U( p6 r }" ~7 [; `5 B3 ?# f) B
) Z- A7 Z, {, R if (intr_status & CSL_UPP_UPISR_UORQ_MASK)
$ q4 y, c$ S2 l( K, A0 \( B: U3 `% e {
4 f1 w# t6 W6 l2 Z' \ V# I Log_print0(Diags_INFO,"uorq.\n");
1 _( Y0 X! [# b/ D# C upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);
M% J: v- c+ Z: `% l0 u4 Z! W+ P upp_error_count++;
$ g+ i4 Y2 B& Q- I h; r: m! D }
- F/ Z+ S# o: L2 s% h# w3 ]2 @
, W. e; _6 Z/ U7 | A6 I( U8 [ if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)
$ P' [# e" |8 C9 j" ^9 P8 j {
0 r- ^1 V5 i' L& N Log_print0(Diags_INFO,"dpeq.\n");
8 L2 W) f/ J; G$ I$ Z# d upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);% V- k2 J4 h; H/ J! Z
upp_error_count++;3 E# {* K/ T, o2 t
}
, S1 A' e1 c" h7 w2 R/ G! i' e! W1 K$ S. v! h3 h
// make sure all interrupts are handled
7 d, n r/ ]( g" z intr_status = upp_reg_hdl->UPIER;
k* {5 V+ y0 X' ~& y }
: ~1 j, `7 k* H4 ^( Z6 v0 J! Y3 H
// finally: write 0 to EOI register
& ^* Y2 b5 x* n: o* w8 n upp_reg_hdl->UPEOI = 0;
; }/ T1 U3 }2 x6 W return ret;& r1 b0 X I+ b0 g) F
}
2 I6 L6 F$ O A! u, B q/ K: O$ e: Odsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):( f4 _9 }3 @9 t3 `3 O' H
#define upp_dma_sendstartQI(x) {\& L$ e' p: l; _/ z5 O6 G! K3 P7 q
Wait_upp_SendReadyQI(x); \, ^/ A* n( d N: D" u- y( D7 `' {
upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \! [5 W/ `, {7 B* x5 u' B: y6 U
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
# `$ L" n9 T5 Z/ V$ Y upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\, p9 O( p' P. b* J) E# Y0 h5 Q
}
0 i$ ]: o/ j7 J5 n+ [2 ], d+ x7 j+ T H$ ^
5 A% f* i6 v! z
#define upp_dma_sendstart() upp_dma_sendstartQI(I)
) w+ q+ ^" a. q! i. _4 {
8 s4 H# ^% }$ J0 W% w: C& ^' g- n4 V1 M4 b
想知道uori错误是在什么情况下面出现的,好做出修改。, [3 K" _* F+ p4 u ?
! G% t- \+ d c+ \/ D! K1 I5 D6 D
& |, C' o8 G+ _* \3 L& T2 I2 ? |
|