|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?4 T/ t4 ~. @7 S t+ C0 F
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:( |# n. O2 ]' q! x# x% M8 r8 _+ A8 z
u32 UPP_Isr()
! I# H4 s. |3 C5 i{7 c, `8 H3 d$ R3 `- `
Uint32 intr_status = upp_reg_hdl->UPIER;
* ]* L B# K2 t* q8 ? upp_reg_hdl->UPIER = intr_status;//clear& c% g" P- b8 y) t# k( M& h: N/ {
// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");6 ]* k2 _" R+ V5 d. e8 L: S' U5 R
u32 ret=0;
8 w: G, b$ Z7 e6 k% K) A2 I; F% B' A1 c3 i
// inline functions
! [) J1 Z& C/ N2 g N/ q+ L while (intr_status != 0), t" M* L: W7 J- `" E; y |
{7 h# u5 c& s- S! c
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
0 O7 A4 ]- q0 t3 q+ c( B {
! X- ^: b" J2 W0 z7 o+ ]& e- u// Log_print0(Diags_INFO,"eoli.\n");" D8 e$ f9 |- a5 D" ~
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);
, N ^- Y% [3 D' m$ U }4 b) U/ b: Y( k' f, f1 N
/ G W" n2 T$ E' F& P2 ?3 s
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件+ `, Y5 ^1 I1 y! }% o# S
{ c; |- z6 \$ o+ N3 X
Log_print0(Diags_INFO,"eowi.\n");
0 a4 V/ k |. x: K3 b upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);$ q7 l" t0 ~2 h$ v
upp_interrupt_count++;
: N; n1 T) H4 b! N# I' y upp_interrupt_eowi_count++;7 J0 j- n/ f' L
: W$ u. J' n# u$ r4 _% [
#if UPP_DIR_QI==0
. V! t+ \9 ]- d$ c( t: U: ? G/ A upp_dma_receivestart();
# F+ ^6 s' c' o- | ret=1;
9 a! R* E: v5 o8 ^' t#endif( `3 M& ]# s" Q7 `% H
}1 s& i9 ~ {6 Y: \% y" C: H# H
- F6 s4 X7 Z# H8 ]+ h- b- f" h if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件
) c, d) s% L* _4 M' o {5 L! }9 v- k( v" p$ \
Log_print0(Diags_INFO,"erri.\n");: m/ Q' F7 t4 l0 n/ O3 Z
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
5 H- c* S. J/ }: s! E upp_error_count++;! Z# U* g9 }$ K3 F. Y
}
6 |* T+ K( Z9 h& e/ B$ a( D) V$ \, V9 ]1 I; t9 ]; l3 O
if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件
: u; G8 ], b! S0 L+ \7 P {
1 g, B1 ?( R" G4 z Log_print0(Diags_INFO,"uori.\n");
4 j0 x$ Q3 H6 V- R- C upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);6 T" C1 C! D% g& R9 c) m7 ^& h# r
upp_error_count++;! c3 C2 D8 f4 ~0 A2 s; b- o6 S
}( A2 N6 d2 s7 t: e6 {
: z9 |; m0 G% W" ~ if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件
' f: w# @( p: u: S/ R5 l {
9 [9 T1 b! K# E, C1 D2 R8 x Log_print0(Diags_INFO,"dpei.\n");$ A4 e6 E& P* w8 }% L
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);& ~1 E# i; b7 X8 T: S4 {5 o, i
upp_error_count++;3 f2 v, A! |( @; z& J
}
- K& R; D r6 \* q: [9 A* p6 j! Y" |: }- v% g) Q7 A, N) N* W" H9 B
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)5 ?! i" W( g+ q% P" o
{0 L2 M: C( R- R. r
// Log_print0(Diags_INFO,"eolq.\n");9 s6 X8 G- T- n( r1 ]
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
U( P# {) E; g) _ }
- S4 ?& [: j5 J# K# O: C
2 }: p/ [% Q# A if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)
0 T2 e& A3 L( G$ _2 g {9 e, K# E( k8 p! F7 p
// Log_print0(Diags_INFO,"eowq.\n");
$ y$ [7 C, E) q1 g' D upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);
; {; C2 G! ]: Z upp_interrupt_count++;) i3 ~6 a D! Q; D1 g
#if UPP_DIR_QI==1
1 H U; }# B. h* t2 x upp_dma_receivestart();' g" n( O! A' H W4 e6 J9 I' X$ u4 \; k, U0 S
ret=1;' t' v0 l2 W" D4 C1 E
#endif! ~1 ?& \* u# {* {7 u$ f: ^
}
; _& b' K% y0 `# p0 B$ X. S' f& U% O2 M) c; i# c# L. k
if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)/ o k& W" M+ v
{9 k2 K6 k# i( E1 E
Log_print0(Diags_INFO,"errq.\n");
. Z& e$ Y+ G8 D upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);7 T( W# B0 S0 {0 c2 H. f0 Y8 W1 T$ C) O
upp_error_count++;9 e. s/ c" W1 f
}
' [3 B6 h$ T9 v5 @8 k. o/ F0 J0 {7 S# s
if (intr_status & CSL_UPP_UPISR_UORQ_MASK)5 J8 l; R/ | ]3 n C; a1 Q" x- p
{
6 H# z+ f9 ?2 a% j2 m3 W0 K Log_print0(Diags_INFO,"uorq.\n");
1 c L4 p9 H& c$ M, d* W upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);
9 @2 u% t" i- ]0 D5 e upp_error_count++;
# T& K0 u3 B: f4 \- M) v6 b }
) p! u9 P+ p) L2 W0 c) Q V3 T9 z* s4 L1 L
if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)
9 G8 L3 d/ I. K1 q# G1 b" d, v) d3 ~6 E {" g. T) P: m) U- R
Log_print0(Diags_INFO,"dpeq.\n");( y* K' h& S4 Y I: A6 V
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);
7 |3 ~, Q. Y2 e w4 `8 \ upp_error_count++;
( L% }% G5 Q, U5 n2 y. ~$ Y }/ }8 c6 u4 o& l5 o R! Z
" U/ Q9 L6 T& B2 r
// make sure all interrupts are handled: j; _$ L1 v. D
intr_status = upp_reg_hdl->UPIER;
: n9 @2 j' N; S2 R }
+ b$ M! ?& K8 [$ t1 R) U6 A* h4 o& Y, H+ U
// finally: write 0 to EOI register8 f% t: B7 h6 f
upp_reg_hdl->UPEOI = 0;
% J8 O2 @8 m4 @: n+ w5 m return ret;, J" ~/ K, B( @. ]
}
! m$ A8 L8 D. ^6 [+ B9 |' Rdsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):" [0 E ] ^" V# |) o @
#define upp_dma_sendstartQI(x) {\
* ^, }, z N* z, K j Wait_upp_SendReadyQI(x); \
1 l) m( `0 `0 Z4 m4 d upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \" n* ]7 e, O0 t& r2 s
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
8 q2 w u2 M$ @# h7 Q, r upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\
% W: ^3 M! U/ P: m( K1 p4 U- s6 N }9 s8 r6 E5 B( M( n# f0 F/ t
; `$ U; T: }/ e
" d4 W9 {6 Z/ Q. O/ `0 U8 ~6 }; O#define upp_dma_sendstart() upp_dma_sendstartQI(I)& k5 b4 A- M2 h& W8 N4 o
5 V& \, d# Z, y& ~, a& T* _1 m
1 c0 U4 n {4 _# [1 p( y# T想知道uori错误是在什么情况下面出现的,好做出修改。1 y/ R) k4 {( {* _7 P; h5 w
D" u9 f3 e9 Q2 b( u* H" L# u6 E' E) F
|
|