|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?
+ |( e2 e* U. u7 u4 m# ]dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:
/ F7 q) y. _) l3 P) _u32 UPP_Isr()
1 w+ s1 Y L4 H B& M) L4 P{
* M5 n6 @: r3 N1 Q/ D+ X- e/ g Uint32 intr_status = upp_reg_hdl->UPIER;4 W+ L, f5 g2 [0 C$ P: k
upp_reg_hdl->UPIER = intr_status;//clear& D1 i! O! K. O$ w$ W
// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");
' W5 N G! V$ P& J u32 ret=0;' Q! I# ?( z p; e( G
$ F$ c. k1 e }$ j" M% z. m // inline functions1 b% C5 w4 a8 E9 S* v- n h
while (intr_status != 0)
$ k4 _, ^& V, D2 N# q; M( ? {, w' _7 i" ?& s( w \
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
/ ^8 `& T' O- @ Z {
7 L( H: b6 h- f, n9 i l7 y* ~/ Q; U// Log_print0(Diags_INFO,"eoli.\n");
/ r# [0 U; ^! V6 ^0 n upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);, S* T4 ^( e' V) M D0 ?- H
}
" e* h$ o0 p! }' |
# T" D. ^- ~$ d: n( U if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件% J4 h! j1 o4 }0 I3 W. Y7 ]- Y' u
{: H* x; G2 v* ^' [1 V
Log_print0(Diags_INFO,"eowi.\n");
; L# o9 A9 d3 u/ V8 P$ n3 Z/ b upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);
7 G. Q2 f% Z: d. G/ t upp_interrupt_count++;8 e7 z; @! O" A# l$ `
upp_interrupt_eowi_count++;
9 g) o! ~2 R. ? |
% H5 R8 s% @) w* F8 z# Z% z#if UPP_DIR_QI==09 h6 S! m/ H( \+ w; d& ^
upp_dma_receivestart();% p0 o( J* }; j- o3 Y8 r1 W
ret=1;
' {1 M% }( G6 c5 k1 ]5 A2 ?6 F#endif0 G/ W4 \9 I1 k" s) [2 W
}
+ r7 f/ k+ R" b4 m+ P& s) t+ X
8 g: T; ~* u3 ^, D+ l if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件% x V3 d; {, B9 W$ I9 j. P) b5 i
{+ a$ a% z2 Q# U2 M7 l& x; [
Log_print0(Diags_INFO,"erri.\n");1 y7 M: H3 M# {
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);3 \0 \ b& U; K- O5 t1 ]
upp_error_count++;3 W* m0 O T- E2 F! e" U* _
}7 {7 B3 C. H0 H7 @
4 k1 G, E1 v/ Y J* V, {
if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件1 @6 z* T$ o: k$ C' U8 w8 N' D
{7 Y* ^) t, e6 m p! G
Log_print0(Diags_INFO,"uori.\n");
) e$ l; ]# }8 [; g/ W upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
6 P2 I! I6 ?3 f9 ` upp_error_count++;5 B1 |; _7 L$ x7 P& f
}
" z9 E8 Y7 \+ x/ \" \) ~& z5 p7 W: d! ]# X. J
if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件
1 j3 s# z; g. ]) `4 T+ S0 O. z {% X$ q* _) e. O" k
Log_print0(Diags_INFO,"dpei.\n");
5 w$ w) N- h1 ?- v upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);
$ T) `; G. P6 X upp_error_count++;( k0 D+ O9 ?0 D% h0 k. V- Z
}+ g: D! X( {. P9 w
' g' P3 r, _$ N
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)
3 F) n. M: q6 p, W! b8 r! W% R {& g, d$ ~; r( f" X+ [# s
// Log_print0(Diags_INFO,"eolq.\n");& J1 l2 c9 `* w: \
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
# W( [- O. y& |: M }
. Z# S+ h8 |2 ^' C* Q* H0 ^: u9 F9 v1 i
if (intr_status & CSL_UPP_UPISR_EOWQ_MASK): W8 v+ d; u4 `4 H; ~& V( r6 ^, B
{6 I; E& w) v e# D! q
// Log_print0(Diags_INFO,"eowq.\n");
7 J0 U# v2 e1 j4 s; w6 l upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK); N V' M5 e* D/ a! O) V6 f' n7 [$ E
upp_interrupt_count++;
7 k0 B( s {" t#if UPP_DIR_QI==1( }0 g$ a! q8 _0 g* p3 p
upp_dma_receivestart();
: m8 y1 E4 D Y3 Y' P; I ret=1;
7 E) C5 g- ?( i p0 \#endif7 @2 ^- d6 A1 U& w5 D# \( ^# D! f3 l
}
4 q) W ?! W3 m% B
$ C. C& `( m- ` if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)' H! a5 w2 C3 S" U/ W3 y# P
{* S7 j" D! v- O3 D. u6 ^
Log_print0(Diags_INFO,"errq.\n");0 E9 O$ ] R; K* ]9 c
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);" ?! P3 {7 ]+ @
upp_error_count++;
# ~% z* K4 N/ w; }' m$ F' H% F }
' w* ~# A) e* j( j3 ^! C2 {! b8 V2 E2 h& s* E8 }
if (intr_status & CSL_UPP_UPISR_UORQ_MASK)7 j1 `; Q' t9 ]( A4 O* j
{" N7 K9 P9 |$ X M' j2 `
Log_print0(Diags_INFO,"uorq.\n");
; q. Y1 _' h) W2 F* n upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);
+ l0 @& ~2 ]7 A! H upp_error_count++;
. W9 u. N( K0 v/ D9 S }
! m! }8 _9 T$ T
) U4 J' c/ _: s, l; e" ?, _8 I if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)
* k% F Q% m" w- _ y {
$ P6 b3 t/ \$ E Log_print0(Diags_INFO,"dpeq.\n");
' F: g& {# }& W5 Q* T' x upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);+ p9 P2 j7 o c, f
upp_error_count++;
' b# |# y# T- w9 w( l }: V/ U5 M" F1 K# {' W( @% J' D. m* N
' {. y( B' P7 m) } |" p Y# A8 y
// make sure all interrupts are handled
& e; o2 ^8 @- I# \8 ]0 x intr_status = upp_reg_hdl->UPIER;% z- o9 r. s& Z1 x1 D
}
- S0 C$ J3 b) Z' c0 j+ V3 C0 M" c3 j2 H& L# H) }3 O s# a
// finally: write 0 to EOI register4 _" y( w) s$ O, x5 A( H
upp_reg_hdl->UPEOI = 0;$ o5 f7 x7 f1 ~
return ret;, c# j' ?/ C* e/ B
}" t5 o- H; N- D; {# Z* o6 q, f' i; a
dsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):5 D+ F/ i* ^! M% [5 T* [. N
#define upp_dma_sendstartQI(x) {\" `9 v* x" L0 K9 o; Q- X2 p
Wait_upp_SendReadyQI(x); \; c- L+ p, H; N
upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \8 B" ~ I, T1 K t2 z' \6 ]+ o
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
9 S( v" t4 U1 O% e upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\
1 P, Z* ]4 i8 _8 s8 N# q* d }
+ W2 s; I. k- P( q% \, q
5 v& X" H! C6 W1 M2 {% c ~8 I7 N0 \5 F2 K9 P$ o% k5 n& i
#define upp_dma_sendstart() upp_dma_sendstartQI(I)# W8 S5 S& h# Z; q5 }2 G+ O$ K
5 P3 Q* O) _( ?- T
: v0 ` O4 n3 d [
想知道uori错误是在什么情况下面出现的,好做出修改。
9 D' F9 s" J9 Q8 j" j! ^# w, K! j7 ?( f0 S, C
& Q- Y% j2 M& {1 s# r
|
|