|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?+ c' _ _1 p, O5 A* y! v
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:
: }! O% s2 e4 R9 K" Uu32 UPP_Isr()
u1 U, K6 O) v! {& O{5 x) O2 u7 }0 D0 P+ E$ s0 k
Uint32 intr_status = upp_reg_hdl->UPIER;" H) I( r: K) i. Z. A! Z
upp_reg_hdl->UPIER = intr_status;//clear" p* k7 T$ r: i' R4 [) I, j
// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");
* |/ U5 Y ]% r0 p0 q9 R- I u32 ret=0;) z$ m# `3 Z" N) n5 C
; C9 H' l" S" B2 \% ]. l- k // inline functions
; c# O' Z, J) F6 H6 _9 | while (intr_status != 0)
$ W r+ Y7 b6 W. B' g4 h% k' L$ V {3 X7 M( W; k3 W: g- e7 U; Z
if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
. W+ \: }$ K9 n- R {2 j+ r* m8 _& N4 B* K9 N/ i
// Log_print0(Diags_INFO,"eoli.\n");
& M8 _& G: s* f w" g% t$ V upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);
, |6 o7 o+ V1 e7 s* u* _! b }" _3 k) f- W3 ?' n8 f
7 e x+ S" i* W* a if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件: r# U; K: Y+ [' V% W6 }8 r
{) `* [3 F% Z/ _$ v& V( R
Log_print0(Diags_INFO,"eowi.\n");
9 s/ u4 Z6 c5 f2 N8 O$ q+ v upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);4 d7 x0 \- G3 u1 L/ f9 {+ O
upp_interrupt_count++;/ L6 ~ S- [/ T# Z. [/ T
upp_interrupt_eowi_count++;7 x1 l2 |, F4 \* {1 w$ R5 N
: f& b1 U7 d+ O+ K8 h0 ]& k#if UPP_DIR_QI==0( s( f. Y/ |/ |) ~
upp_dma_receivestart();
$ _2 b; {0 m2 ~ j3 Y/ n ret=1;
C4 u. [& x9 C% z+ p+ W#endif
' G @( H! \5 e& f" E; k }
r% o$ R( D6 G ? c; ^; ~: W/ ]1 ^7 N
if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件
5 P, y# O3 V" P/ W: M4 P8 V {6 }. L- O2 s5 a' ~
Log_print0(Diags_INFO,"erri.\n");
# q4 X9 v8 Z" V7 ?9 l! {' W9 F9 E/ u upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);' [+ J( V/ k0 O, I
upp_error_count++;! f# y' r. A6 E/ k
}7 O8 |9 I% s% y% `1 O& l
& E+ [$ s+ i3 h& W if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件
5 g- d1 i, L1 R, O( Z# } {
. A8 X% E- y3 m* }+ G3 h Log_print0(Diags_INFO,"uori.\n");
8 W5 A1 F$ [( _. O9 Z upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);+ J" ~9 A$ b; q( u2 r; Z- O
upp_error_count++;+ |- x# P+ B. {" @$ n) h+ V0 ^
}
0 Q$ Y9 n1 D3 G6 ]; D9 D, V2 q" T. F9 a! M
if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件: M1 y5 r' Z6 i
{9 ]7 k3 [; J9 j& F* A) w) d0 P
Log_print0(Diags_INFO,"dpei.\n");
6 e4 l- Z& n" B3 C5 ~6 A& E+ @ upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);
K3 {5 f! u m P& a( z8 A upp_error_count++;
3 |/ x' I# T; n5 p, ~ }
! x7 E/ D7 ]* z# ^# b- f9 e1 Q& M/ K8 m+ c2 l! y9 B
if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)0 d8 ^8 Y4 |7 W* p: y
{8 J& G# o3 `) `" q9 W) n
// Log_print0(Diags_INFO,"eolq.\n");3 ~+ ~" }, g' K% x7 Y0 o5 M
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
" @, n) N1 H, V! U' m }
0 Q' Y* F; x+ n9 ?4 {6 i7 E H9 r# w2 V: p6 C7 o9 b
if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)# l8 |) l; A. U+ s+ \, a6 y
{. R: H3 U2 }+ H' p0 l, H7 m7 [
// Log_print0(Diags_INFO,"eowq.\n");) ~" x' O( A o" a1 j. s$ u* t
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);
! s/ {8 X1 g4 H" i* l! L upp_interrupt_count++;$ O4 ^6 i. ?* A/ H7 B# y
#if UPP_DIR_QI==1. Z0 Z9 O& a+ c* z" e. N. A4 I
upp_dma_receivestart();+ _: @( H3 J6 B4 K/ C0 m2 q2 q
ret=1;/ J& I5 S* v3 O* t* W2 O
#endif
5 g+ I2 Z6 f) ]4 J$ m }
9 M+ T( q* w5 H$ b2 v6 h" {( S! F
7 p- V0 p8 I K- Y if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
" B% q0 D# |( N {: |5 V& W8 a6 V+ c, s# j
Log_print0(Diags_INFO,"errq.\n");* y) I. m/ \. \
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);9 W* S" x% y" Z% x2 X8 q
upp_error_count++;5 a1 P* K! P G$ N7 O8 N
}
2 f1 w- K! t" {& x4 C
2 f6 M6 O$ l$ s" `$ k, H if (intr_status & CSL_UPP_UPISR_UORQ_MASK)& G7 a. E* V0 A5 M
{
/ t! z+ I0 l9 q5 O: ~$ F Log_print0(Diags_INFO,"uorq.\n");& v4 W% k- ~) q$ P0 g
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);
" P/ v- t2 ^1 h8 E( O upp_error_count++;
* R, V7 h& a1 _! _ }
2 E* A% W* s3 @( I' `- r8 p: ]) U2 Q$ n) a
if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)" M! d/ x' I& a
{! y) _. F& E( k3 h" Y' G
Log_print0(Diags_INFO,"dpeq.\n");
1 I$ ] j! }* G- n& K9 m upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);- ~. F9 D3 W0 S9 O# S" d8 X& x
upp_error_count++;
/ I' F9 q( s; S# s. d2 p7 H }
. X4 w1 e* J' v% B
4 \0 x2 X5 l; G8 [& Z // make sure all interrupts are handled
0 r9 \5 g b+ i0 [0 @% }( F intr_status = upp_reg_hdl->UPIER;# j" m6 n j7 f7 x- \7 x
}
6 Z6 l3 w. @. P T: i/ T# `1 @% g2 y! w6 L9 z
// finally: write 0 to EOI register0 H P J8 j- W4 D
upp_reg_hdl->UPEOI = 0;
; @6 l* p0 X) ~) A1 ^* A6 \ return ret;* U. q) W! g3 G' {& N
}7 U8 ?: I1 |0 }9 }6 C
dsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):
2 _7 i: o- |4 `; w. u% y# m: Y#define upp_dma_sendstartQI(x) {\- Q4 h: C; C8 e& i3 E- P! V
Wait_upp_SendReadyQI(x); \% R- | u! w" j0 Q. w" E( Q _
upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \$ `' B2 Q( C7 V+ r. O' L
upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
! ~9 o' C6 k5 K- k ^ upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\
5 S6 c) N( ~. Y }2 V2 J; l3 k7 z$ D; a! f; w& ?
( Q A, W- G# f8 @3 R+ {* N% |- S: M. C+ W3 f9 e( O% ^
#define upp_dma_sendstart() upp_dma_sendstartQI(I)) r2 t! [4 o. m1 z
6 F) ^4 f& \- q# N8 N9 N; V
3 S( J/ d# `5 W9 ^' F% i
想知道uori错误是在什么情况下面出现的,好做出修改。
. x8 Z. J& ^3 ]: t! H' z
: Y" _* C# z3 {, l# N" ^7 J& ~4 E I+ `( d% F" \$ S- e7 A: |; x
|
|