|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?* J. V; T+ W7 y- N" f$ W
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:
- l# ~' o* Q4 L% j" B3 lu32 UPP_Isr()+ l: K4 x% Y3 {! _
{& t8 M& T+ K6 p% y* ^- M; C
Uint32 intr_status = upp_reg_hdl->UPIER;
* C! X2 g$ f9 B! T. t7 L" z) G upp_reg_hdl->UPIER = intr_status;//clear
8 }9 R! X* ^, X$ u0 ~/ t0 @6 o( }// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");1 H$ [* v9 j: u A a% s3 g# G8 |- n
u32 ret=0;# b# x X: \$ l6 T- m
- I: z6 |. l7 U) o! @ a // inline functions+ K& E0 y5 X u$ e1 O
while (intr_status != 0)* i8 d: q, R: @8 b5 t2 r1 Y
{
$ ?4 m7 c7 H# y$ R4 O* E if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件/ v6 X* [7 X: G+ F! i9 \! B( t
{8 Z$ r. a0 T" ~# c# S, Z- ^
// Log_print0(Diags_INFO,"eoli.\n");2 x* T5 [3 h3 L4 M% T9 Y
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);, Y" ?% E W Z- \8 V6 m
}4 ~" f/ H8 D/ Q0 W8 y8 w
! c% s0 I2 d, R ]- A( g" H; ` if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件, U! y4 g0 a9 }8 ^7 ]
{9 r6 A" D- g0 [2 G, V
Log_print0(Diags_INFO,"eowi.\n");! K+ C( i0 Z3 l. L5 n
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);
d! b. L1 t: }5 d upp_interrupt_count++;! Z# M0 @/ j( i' i4 u$ ?$ _
upp_interrupt_eowi_count++;
: z% K! R: S2 v* T0 Z5 _' U7 P% m! h
#if UPP_DIR_QI==0$ P" X5 r- u! v# n6 f" I0 u
upp_dma_receivestart();. o/ C) ~0 L0 l. H7 j! {' k
ret=1;
- M; u% C" X* R g3 n0 p! Q#endif
6 Z' x$ M) U8 ?; A }
% P( b9 o7 _: r: h/ ~ p6 V
( a. W6 \0 ^, U if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件; W, i7 R5 A, \7 t/ \" T! n
{
9 Y; _3 `7 i: \9 z- F Log_print0(Diags_INFO,"erri.\n");- i2 W ~$ Q: `5 t
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
. o/ e, O2 h# J! T upp_error_count++;# l2 _8 p& v$ X0 X ^
}
3 X. @: Z' P) l; p7 V. s1 d5 a8 y- B8 H2 k+ e, t# c
if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件
$ D# Z. O0 b. ]# c- l+ ? {
5 x% t7 [# e. [ Log_print0(Diags_INFO,"uori.\n");, s2 X6 [: t% V. h
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
) e; L/ O; L& P0 A" T upp_error_count++;
% h9 o! D2 v: T+ W B) w* m }
2 I i7 x# q2 j# o8 O
) u" s& e% }: }) p6 Q8 g2 M; M: q if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件
3 S. |* z7 c) J {
2 q/ g T7 @6 s+ z% n# r Log_print0(Diags_INFO,"dpei.\n");
1 d4 m5 Y0 R# |7 }8 d) C upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);
7 B% `- q( R& L8 e4 b6 V upp_error_count++;
3 M* W0 f2 E2 k0 U& l, r }$ {' {; {0 J3 ^) V! b
L1 I% t, o& O. K* a
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK); h+ ]6 I( D# l8 V* i$ V
{
# O7 z# q" i/ j; R: V9 m2 B// Log_print0(Diags_INFO,"eolq.\n");
! n- R# ]+ e0 \4 x$ s upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
7 q! ?- N3 R4 c/ X( ]6 `( W7 D }
+ _/ r7 X7 U/ B: W, S8 }
$ e t" h! a5 e0 g% O+ E if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)
; w0 |( K$ Q; z& X& F8 ~ {
9 Q6 r. N% X( C% i/ i. ~$ f0 M! x: V2 o// Log_print0(Diags_INFO,"eowq.\n");7 D% C2 y$ \( [* a1 ~/ U/ g6 H
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);
# H7 q/ N/ H2 K) E, @3 o: Y upp_interrupt_count++;
5 ?3 ]) }7 x+ l#if UPP_DIR_QI==10 `9 Z. }, k8 c- b+ P l
upp_dma_receivestart();, e. C% y6 q4 B
ret=1;
7 m8 B% s/ }9 m% X+ h1 g7 U1 h#endif8 _( B" ?6 p; `1 J0 I
}
0 A2 ]4 Q6 |4 G$ e/ D
6 D) W& J- Y; Y8 Y, r9 d- F if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
& d" x0 O0 `5 U- {8 I- m {. A1 g& k/ u7 o* [7 \- g
Log_print0(Diags_INFO,"errq.\n");
9 U3 ]8 B* ]/ v! N4 y" K3 x upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);
& R8 p, g8 ]1 z! h upp_error_count++;
7 C; B0 n$ U1 f" x# C# \ }
; u/ ]1 y$ o# ?' o- `2 i5 X8 H& @2 B- v& u1 H' c
if (intr_status & CSL_UPP_UPISR_UORQ_MASK)
$ A( M& [' e: w# g$ x6 F0 m( K {. n4 f3 L& a6 p$ [$ r3 @0 m
Log_print0(Diags_INFO,"uorq.\n");# o1 V5 r& R! r2 R9 X( A; k1 Y8 L. R
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);# [, z" w1 e a3 b# v/ v; v0 ^
upp_error_count++;6 ^: f7 h$ S; {. Q0 |4 j! h
}
- E) y' F4 V" @+ e! `$ C( |
' d7 _/ ?% H" \& n6 X if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)
, ]& ?7 O! T: [* T$ k {& q6 W; }! H; P! L& T, x7 @
Log_print0(Diags_INFO,"dpeq.\n");
- |! z' S. b* [- y6 E. j8 V upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);
! t" w! N% p$ c) S2 j8 V2 |: i upp_error_count++;; `' E% ]6 z$ N# E- }( Z: {1 V7 v( p
}! L: l2 W& F8 i; y3 r
% t2 s% ^) n& I( @, S. t5 ?
// make sure all interrupts are handled
% { Q; I: V( W* o; z/ o intr_status = upp_reg_hdl->UPIER;
& H" o0 U! W5 K1 m, C( l }
' ?2 R: f8 u- k u6 d9 h0 q9 @: w, ^% ]( b2 u2 Z0 t+ r, l: T
// finally: write 0 to EOI register; }" E. ?( N4 h' V9 @! u# q
upp_reg_hdl->UPEOI = 0;5 S' S; h& `# ^$ y) b5 j4 l
return ret;
5 Q. b" C2 H) m W}+ }. I7 G+ l" I2 u" e
dsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):& B) C- B" J! v u
#define upp_dma_sendstartQI(x) {\+ {' H1 l: D' v9 z* ?
Wait_upp_SendReadyQI(x); \
S1 B7 I' w" [% h0 s upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \
0 N' f. i+ O- A; T/ ~) h upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \, ^5 [, P; f& ]* J
upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\
f9 }3 L: M; G1 v" J, g }
) x. ?$ H0 I% P" ]- L2 L0 q+ ^% M4 Z5 k; I5 H0 _5 A+ k5 c0 y
4 o/ w) `2 o+ C% e* \9 X' o( ]#define upp_dma_sendstart() upp_dma_sendstartQI(I)
8 J4 I' { \" F
. J; m- R& b5 J; b f
+ ]+ L9 D. O' r想知道uori错误是在什么情况下面出现的,好做出修改。7 ]# D7 q: [% T2 N: R+ \- ]
- Y' p! k( k) J2 B) M9 H. c, m* \1 w$ |4 ]0 B# w
|
|