|
FPGA和Omapl138的dsp核使用upp通信,总是出现uor错误中断,这时为什么?: d, [' J, j7 \
dsp使用i发送到fpga,fpga使用q发送数据到dsp,dsp的发送中断间隔是40us左右,经常收到uori错误,不知道是什么原因。示波器看每次upp发送时间都是很少的。upp中断服务程序如下:
. R6 B) J+ n' E+ Y" Pu32 UPP_Isr()
( q v! f4 c4 i9 h& F( {{. |% c% a! z( l- i
Uint32 intr_status = upp_reg_hdl->UPIER;
! b v* b4 B2 b$ A+ Q2 j% Z6 l& a upp_reg_hdl->UPIER = intr_status;//clear
, v8 i% T$ ~$ N' S4 r+ Y: @7 Q// Log_print0(Diags_ENTRY | Diags_INFO, "--> UPP_Isr:");- v6 Q8 s! h4 X r/ I
u32 ret=0;
- H+ n/ b" L# C9 L% D }. Z" O1 e0 j3 w, X
// inline functions
9 [6 s2 Q# s* u. v while (intr_status != 0)1 s( d6 C) Z0 h0 } D# g
{
0 U( O- r; Q4 r8 N g( m$ i: G. y if (intr_status & CSL_UPP_UPISR_EOLI_MASK)//Line结束事件
; I f! `! }/ W- ? {
( M7 i4 E* K T( @$ U6 I; g# B// Log_print0(Diags_INFO,"eoli.\n");
4 C3 v3 w) \7 f C/ v' b upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLI_MASK);
+ m4 l9 K" N" e }1 `8 ]3 D" N, q0 {0 Z) P
! C0 B2 T) ]( l1 \6 _( D& A
if (intr_status & CSL_UPP_UPISR_EOWI_MASK)//Window结束事件
# J6 x# B2 c" u' d/ o! ]2 K {
; l* n4 d; f) T4 v, U Log_print0(Diags_INFO,"eowi.\n");/ m$ `: P0 S) ` U2 @; p9 q' m
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWI_MASK);
: j+ o5 \; Y! r. j- F0 n% V* Z upp_interrupt_count++;6 }( f; h9 x5 l
upp_interrupt_eowi_count++;
* W" P6 M& M4 I- Q8 e1 G/ I0 N
4 ~8 R P& q4 ? I) n2 d$ q/ a# p) B2 k; {#if UPP_DIR_QI==0
8 [$ a: \6 J# {4 | upp_dma_receivestart();/ R$ K/ M# Q3 I# t7 u
ret=1;0 I8 @6 `6 o2 f/ v5 X' Z
#endif
' G+ `/ M1 d/ B4 w6 i }
8 i' |$ P6 }" H7 ~0 x" N0 T' F9 G! R
if (intr_status & CSL_UPP_UPISR_ERRI_MASK)//内部总线错误事件5 x% h& @ r7 v
{! @0 g/ T3 _/ T
Log_print0(Diags_INFO,"erri.\n");
: S) n7 _2 V1 n upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRI_MASK);
* V1 b% V! b, d. L" S( H& P. u upp_error_count++;
: y2 Z0 @( h7 O1 F4 [ }
) x- L) y6 M# T$ _" N+ M. X, p2 o! |$ {! k: j
if (intr_status & CSL_UPP_UPISR_UORI_MASK)//欠载或溢出事件7 `) D, C1 | F
{
+ P% l+ h2 P K) F7 r# x8 d Log_print0(Diags_INFO,"uori.\n");. U) L, D) x# r; h0 @9 E% F
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORI_MASK);
, M! o3 g4 w) P2 @ upp_error_count++;% B8 t( n9 Q- |% N! {3 x
}0 N" _9 a6 S3 j3 K4 O' j! t# Z; D
) q/ Y0 @. d! G, v6 @! p9 Q4 O if (intr_status & CSL_UPP_UPISR_DPEI_MASK)//DMA编程错误事件
: o7 _9 L2 D$ v) c" z f {
) `5 \! h0 J# B2 q Log_print0(Diags_INFO,"dpei.\n");
% k7 N# [$ _1 d$ f+ I( s upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEI_MASK);
! y8 q- Z8 a, F/ ~6 ^$ V upp_error_count++;
& m% p9 M2 l$ f }( A1 V8 i) [1 z# U- L
" i' D* k6 N3 b! ^; ]; ? if (intr_status & CSL_UPP_UPISR_EOLQ_MASK)
( B5 o& Z; L- M7 j {0 |* |+ l+ p* W( F6 ?
// Log_print0(Diags_INFO,"eolq.\n");8 t8 P( N: `( y! d5 d
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOLQ_MASK);
* m3 O+ j4 n9 S7 f# o- N4 D }0 Z: ~% _' J; { u
% v6 l* e: D z; j
if (intr_status & CSL_UPP_UPISR_EOWQ_MASK)
+ u) i* n b# Q" P2 X {
& S( @9 a v& M& Y9 }6 a7 e. D// Log_print0(Diags_INFO,"eowq.\n");" B! `2 O" W9 f% P7 J9 M
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_EOWQ_MASK);4 L& H) g9 w+ q6 r
upp_interrupt_count++;/ {3 r k& H# o5 P5 ]
#if UPP_DIR_QI==1
9 x5 q- N6 H v% I) j upp_dma_receivestart();
" D7 p% c% e. z( s. { ret=1;7 r" o9 {* c, i& L( D( E0 v& w
#endif k8 r! P1 P8 b/ G
}. S) o2 O# o* ?" @: V; V
0 \2 n, h, Y5 P0 E( C if (intr_status & CSL_UPP_UPISR_ERRQ_MASK)
6 W& m$ x8 v8 M# O {
% e6 k% U9 M: E7 ?1 \% F2 Y. J Log_print0(Diags_INFO,"errq.\n");% X% C# Z& m" j" e; t
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_ERRQ_MASK);
! H2 W3 ^( y1 o4 v- C upp_error_count++;
F* T& G- o) U5 [, a }
3 T2 ~! d9 ^" t5 t6 x) p% ~. ]& ]
if (intr_status & CSL_UPP_UPISR_UORQ_MASK)
* N+ Z$ k% H: l/ ~, I {
K' C6 E A; }' l' H4 {( V Log_print0(Diags_INFO,"uorq.\n");
; @2 f! x1 Q+ i' W4 t; r. A8 o upp_reg_hdl->UPIER = (CSL_UPP_UPISR_UORQ_MASK);
6 P1 l& s5 X4 Z upp_error_count++;
* n/ H: u, t! N2 S# O }& m" d1 l- [ M- T' a! y6 J
$ @) b. F- n7 N% R if (intr_status & CSL_UPP_UPISR_DPEQ_MASK)) k. |7 G) T) y5 r
{* w$ _% C4 H& i- ~ w1 j
Log_print0(Diags_INFO,"dpeq.\n");: |$ c% W: E' |+ V5 _. F% q, f& _" q
upp_reg_hdl->UPIER = (CSL_UPP_UPISR_DPEQ_MASK);
9 A" M6 J1 y+ i( n8 e$ F upp_error_count++;$ y; M# y8 Q& U) l3 z( ]+ Q7 u
}
. J9 @: L" i3 g" F! |8 `8 B# z) ^) W+ f" H. }% v- n/ \
// make sure all interrupts are handled
9 |' X1 u6 r; e! d+ z intr_status = upp_reg_hdl->UPIER;
& ?, F7 o! z' X% E& p' V2 q0 ? }
' n* i9 I4 i# q" m% O
( t& l* N% }7 s$ B' q0 ^2 o: X4 p( M // finally: write 0 to EOI register
) V6 ^- v( u: M0 f upp_reg_hdl->UPEOI = 0;1 i& |- v1 J% p% E6 }: U1 N3 Y
return ret;9 P) I, @5 P: E/ M' I: r
}6 l4 `$ e( }# _5 {% g
dsp发送区大小为512字节,发送txsize设置为256字节。使用的是单行,win窗口是512发送方式。发送调用upp_dma_sendstartQI(I):9 h& F1 f! ?6 c O2 E0 _/ i
#define upp_dma_sendstartQI(x) {\0 G$ m. o) y% k# }* o
Wait_upp_SendReadyQI(x); \, ? c1 O" _1 X
upp_reg_hdl->UP##x##D0 = (u32)&g_uPPSend; \
1 S2 m) F7 n, c$ v upp_reg_hdl->UP##x##D1 = ((u32)upp_line_count_s << 16) | (u32)upp_line_size_s*sizeof(s32); \
# u u; I! r R4 [' h upp_reg_hdl->UP##x##D2 = (u32)upp_line_offset_s * sizeof(s32);\
' E- @2 J7 s: ]' S- g% A2 ? }* N6 P+ c5 ]- r: W5 {
( E& I/ g' H1 U' w
2 z7 ^* s, G1 N& }" x/ X" g
#define upp_dma_sendstart() upp_dma_sendstartQI(I)8 i! U, v; C8 \& Q% _8 r& _
: ^0 U) ]; r% l3 c2 @, o7 O
7 ?; Y( V. F: K# t6 r7 H; Z
想知道uori错误是在什么情况下面出现的,好做出修改。
S( V- b$ H7 C3 z o P8 J g; ?- b" B w
$ e' g( I: D, a |
|