|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?6 X5 ?% q( w% N) R) ]# r
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下: R2 g2 X" Z% V$ _
u32 UPP_Isr(), f6 [7 }; ~" i+ j: C* g
{
U4 ^* B) n' c0 P Uint32 intr_status = upp_reg_hdl->UPIER;
- ?0 R, N; @% C7 F) | upp_reg_hdl->UPIER = intr_status;//clear
7 q2 w: U: B2 U7 z' @, u( \% Q4 j4 |// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");+ k1 ]$ ^3 x2 g& I( B
u32 ret=0;9 l: g- R- x' h0 g# l3 c
+ D! N3 R6 p8 [7 \ // inline functions" h6 `% {( g( B4 {4 Q; y# T
while (intr_status != 0)! T7 q' D" \0 t) u/ U+ s4 ?0 p
{7 \7 c) e) d: S- X, U2 [) m6 a, h
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件$ A! F7 { ^# S, U: U" ^( T+ T
{
) y% Z: w" D5 k9 ^7 ` _, O// Log_print0(Diags_INFO,"eoli.\n");0 X5 D/ _) ~3 r+ z$ P
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);( @5 E2 V; H! D3 c2 O5 R
}# w1 g( \' T8 r0 M; |8 K" s
& h) ?% M# I( h0 Y
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件
& S- [& n! ]0 J4 h& q, I' \2 v {7 l5 G Z( O( `
Log_print0(Diags_INFO,"eowi.\n");0 |) l/ I8 u Y+ Q' F% ?
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);
, g5 n) R0 {. J9 d$ c) {+ U+ j upp_interrupt_count++;0 { K6 {5 j1 N, k
upp_interrupt_eowi_count++;
( p/ ^( L/ e/ [, d* l) F8 P# i# b% K+ M1 Z- v1 _& Z+ W* [
#if UPP_DIR_QI==0! @! t: d4 H8 s/ z5 X4 R2 Z& n
upp_dma_receivestart();
$ X3 w* ] J% A$ s& x ret=1;
/ ]2 \3 i/ W8 c. Q% H6 @# F/ Z) L; |' V$ i#endif
! T4 E, \5 B. _ ?+ ]3 x5 H7 V }
4 r4 q O o6 J
2 K8 s8 X" V! D ?- Y* c if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件& Q" a' Q% R4 R( H: y& @( e
{" H1 N7 u! r; i3 v* d+ e5 T
Log_print0(Diags_INFO,"erri.\n");) u4 _ A1 M# w, V. j) |
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
$ F8 c1 _. N8 p b, ~# ]' F F upp_error_count++;
( H# O8 r$ Q/ a) O h0 {& _ }6 y- t. p1 e# @' c
0 z4 C G; i, l8 R if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件
. S* k' }% i( n: O3 E- M" G {
3 P7 A$ p B/ ]* v# P \; V Log_print0(Diags_INFO,"uori.\n");
5 i9 m( |* h9 E1 T/ n& S4 A upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);& X$ X& j2 V8 L v( T# \+ B5 T
upp_error_count++;
2 d. y n) d- r$ U" F }' `# y. g- v2 S' p3 t
/ R) H& p5 v2 |8 M6 L" {
if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件4 f+ Y* o! H, d I! |# G5 d
{# U: \) H4 p6 q! v- o
Log_print0(Diags_INFO,"dpei.\n");
3 S. x- }$ t$ O9 K$ ~, ]; }3 I upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);0 X i# _1 C' v( l4 P& R6 {" y
upp_error_count++;
# k( V: W0 s9 g4 { }
0 h2 Q& B; R- W: e2 i* q
6 h. ~ y3 ]- o! a/ { if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)) j9 A1 `, x- X: h4 `9 P B9 m4 Z
{
2 m5 f4 ~* t7 H) X// Log_print0(Diags_INFO,"eolq.\n");
; s4 L5 o- k. B5 Y! v upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);9 T, T; J- q# L0 F( J
}1 q! w/ i3 t' A. v" j1 T
( R" I" S+ M: T if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)$ O4 P( d4 O* C9 Q* x7 Q, Q
{8 C7 D5 Q+ F0 O; B
// Log_print0(Diags_INFO,"eowq.\n");
6 b6 \2 Z; F4 K upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);
* s) n/ G5 x3 k; }4 p upp_interrupt_count++;
+ m# P4 ~4 D+ i) O% t#if UPP_DIR_QI==1
4 I* A4 H4 l4 c: g5 t upp_dma_receivestart();2 c; n3 m7 k9 Q& j1 j/ b
ret=1;; n, V% [7 s* Z2 X: y. t
#endif& D9 w0 y; C/ O/ f3 _+ _& C
}
( ]4 \7 _ E% O) }) Y0 J( X% E8 W! N1 F/ _+ L( X3 R, A( C& y
if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)1 Z- P3 [* T9 @
{
* C2 X7 o8 Q% V+ j/ \, c" U Log_print0(Diags_INFO,"errq.\n");
, E7 _$ Q9 ~ v6 d+ | upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);6 O; ]2 a& ?1 ?, s) i0 R) h
upp_error_count++;
8 t! e4 n+ m' k1 V y, w: T }
- b; {' d) U' M6 M5 k$ A3 L0 ~' [1 G6 L: u. } @' d
if (intr_status & CSL_UPP_UPISR_UORQ_MASK)+ }6 w6 W7 `' [/ m" R; c
{
6 o' t1 F0 j; l7 u! a$ a2 K% p Log_print0(Diags_INFO,"uorq.\n");' w# Y+ J: `% U, }9 C4 E0 L; V6 ?; S
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);8 i3 J1 d! p5 D3 |( `3 Q
upp_error_count++;
3 d3 t: f" D' _1 P! B6 a! D }) Q' |# W+ c% C* {8 C
0 v2 k8 T7 n; }7 I( \* |& R6 c if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)
9 e( C' u& T- U. N; H y {8 \- p5 O. m' u9 x- v% f# l2 E
Log_print0(Diags_INFO,"dpeq.\n");& k2 t! m6 P! e# \1 R7 r, Z
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);$ N# W+ U- f- k, e- e" z" @
upp_error_count++;
& c5 \% B: Q" D9 j }
/ n; O, f S5 ?, a6 s1 G: v5 y& Y" H p* P* R c
// make sure all interrupts are handled: r( W ]1 h: F* ^/ ?9 ?9 w; M$ G" `
intr_status = upp_reg_hdl->UPIER;
* E) d, i! j& _! l6 x. S7 y9 Z } d* k; }4 B6 ]
9 Q1 r1 o: B; @8 J' |
// finally: write 0 to EOI register
! { G& R8 I; }3 q# O( }! } upp_reg_hdl->UPEOI = 0; o7 v5 g3 K5 v+ K- ] P4 Z/ {6 K
return ret;1 M0 b+ n5 {* |5 O o. A! j2 X; s
}
) \2 S. K1 Q8 P; a2 tdsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):! a& q. a1 d: ]4 S0 z" w' P" c, ]
#define upp_dma_sendstartQI(x) {\/ Q" \7 X7 `9 D1 y
Wait_upp_SendReadyQI(x); \
8 ?% b$ d% u Y- [- o3 a1 |. @ upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \
; p0 B- h+ A- r) z9 O upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \, U7 e3 ~5 E& M4 f; A# \
upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\, I5 O4 L6 |/ m6 D- e2 d
}
! h' G& |' @ ]# g
7 s8 b1 a. N/ u8 H) B! i+ K" E0 J: T' z
#define upp_dma_sendstart() upp_dma_sendstartQI(I)) t( `4 S* D# K
+ V! {3 M1 B- k' [; L5 ?
! X. L& M! g9 ~( r) I$ d7 U. o想知道uori错误是在什么情况下面出现的,好做出修改。$ x5 T3 j4 X) ]* N
4 I3 C, J0 v/ `3 n7 I, t1 ]; d% P
* m* U+ e6 \! T4 z& t5 H) W& h |
|