标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? % Z$ `' o( g* c: T) x3 A* I4 \Void UPP_TASK(Void). O$ g$ W+ k& y, K9 I/ B; s
{- q' g) X% l- B5 a; m" z1 n) z
8 \0 y, y6 D2 k
int i,j,k,target_int_count=2;* h2 w3 P2 `" G
char ch[2]; * M* z! N) i( w; B D0 U8 y 0 }; @0 P: a( j( I+ U7 V( k 4 K2 v5 }/ y5 J$ n9 j* o; O$ h7 i: |0 L8 z" a
upp_interrupt_count = 0;$ |% X, X* Q6 y( e: v
upp_error_count = 0;! s- ~8 @9 G7 M" F$ P: i$ h
# K) @* O& a2 B' E+ O( ` UARTPuts("\tResetting uPP buffers...\r\n",-2); ) `, H @+ C; X) \' D- a3 b // Initialize data buffers& n( W) O% }2 K. R
for (i = 0; i < upp_frame_size; i++) 5 x7 C( ]/ ~5 N/ F { 7 t* z, O U* j upp_buffer_b =i;& [3 K2 Q5 x( a' u$ O
upp_buffer_a = 0xDEAD;( ^% v- J/ c8 d+ y7 l( x
}* ?2 b9 C2 E: y
" G/ ]+ o" y! r( g) l) a //for(i=0;i<1024;i++)7 y) d I& M* p
// temp=0;' T% r9 g+ r; ?+ o
# {4 W9 e1 d3 G. n( o) ~, L$ p! G //UPPReset();0 B8 f2 G3 ^) n
/*启动UPP DMA传输*/+ K u3 ]* x$ Q. e$ _5 q, r' b5 D
UARTPuts("upp_prog_dma_i\n",-2);# I* l6 x7 _- X* N5 p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; " K9 }% `2 T8 `0 N$ ^ |. C upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); + m) r s& N' D upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 P* {# ?& H- } T s+ ~0 v9 ?; U
5 ^. l3 u% d* o( W+ S
UARTPuts("upp_prog_dma_i\n",-2); , `. q+ N$ G# P upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% E$ ~2 k$ B. \4 H R5 o6 ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 4 G. v* _. p7 _ upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ i q5 |+ @+ D+ W! j
( H3 a* b) Y# }, n9 E0 @% Z% N /*等待UPP传输完毕*/9 \$ [$ H! |, ^) D
//i=0; $ u$ u1 ]" \! j6 w. v //j=0;2 ]7 L* x- c7 M0 Z6 r: m# J
while (upp_interrupt_count < target_int_count && upp_error_count == 0)- ~ g7 f. y+ r9 i7 f5 s4 q" \( T
{7 v) B, s) B' X$ v- y; }
/* 测试UPP传输的同时操作普通DDR数据2 I% v: j' q$ S/ B. M
temp=i; - u X7 {! v8 V8 ]- { i++;8 K2 L/ i5 n7 I* p- A) f/ ?
if(i==1024) * d0 S, ^7 [: i' R {, \4 A* p4 V, M3 T s- a
i=0; ' Q% t9 ~ y2 h4 _+ o9 | j++;" H$ Y* v! C. ]1 i
} 9 z$ E9 h% ]( {! b */, i8 Q" j8 ]. C4 F6 ^9 u
7 |- S0 R. X* T
asm(" nop");; |5 x; j q6 u1 J, e. q
( t% o5 i9 A. @+ Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 7 H1 T1 d- a+ W/ P8 x2 ~ } 6 y3 }6 X1 g- Z& O# V 2 \) J9 m5 a! ?+ Z" f1 p# r8 x /*检查UPP传输的数据是否正确 (loopback modes only)*/* L9 d2 ^& @! X2 ?5 V% T
//UARTprintf( "i=%d\n",i);5 ]2 _+ w6 f% U6 x* @4 a8 T
//UARTprintf( "j=%d\n",j);+ H8 ~* I6 r+ G
UARTPuts("Data mismatch in buffers.\n",-2); 2 V9 x! j8 o6 f+ Y8 f& f if (upp_interrupt_count == 2 && upp_error_count == 0) : |6 | X2 ^; Y1 U$ L" W { % A. T* b( P7 u for (i = 0; i<upp_frame_size; i++)# t1 Y1 R# Z, N0 x" o5 t. ?
{ ! @( N# H4 F" y* O. f if (upp_buffer_a != upp_buffer_b) ) Q+ i7 O* |& I7 l# f { " p9 {: J; J1 G* D" A9 Y upp_error_count++;# b: X% _) U1 t! @" I2 z# d
}6 p7 `( b2 p- G5 [7 y
}0 n4 B: k2 `2 W( J" F1 X' u
} " M) P* j4 n. m7 i8 P& S* I2 h9 W/ G0 f$ D8 c/ {) {
/* 报告通信结果*/5 m- B3 M$ @+ l$ A2 t
if(upp_error_count != 0) 4 z* {& F* i! h4 Z UARTprintf( "upp_error_count=%d\n",upp_error_count); 3 [4 t- q F3 t8 }% v else 8 V& y1 t [8 G) |0 H& X' `/ r UARTPuts("uPP transfers complete!\n",-2); ! m+ c4 t( S1 c3 J& `3 v- T, U' K0 V4 ?, }# C6 G( [
UARTPuts("Do you want to print all the data?(y/n) ",-2); 0 h8 J! ~3 I6 c( F% E- T; |$ O- b1 t, h8 c1 V UARTGets(ch,2); ! P* a$ H/ @4 Y& M" l( L UARTPuts("\n", -2); & e$ K" E% U0 @ / B( a2 X( F) O/ J5 Y if(ch[0] == 'y') 3 j* f6 O1 l0 o- m" V {" l9 L" T* O9 D
/*打印全部读到的数据*/ $ z* |" @+ |0 Z4 B8 M for(i=0; i<upp_frame_size; ) ; G) N+ l& r4 m) |' T {2 H/ o7 S9 ?9 W2 R+ p
for(j=0; j<5; j++) ! ]3 v1 X2 y& K' m; O { # z; ^( n. z# X# h: n/ _+ A! | UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);. w0 v0 I3 S% [# v# D
i++;. B# y. v5 o% ^( t9 S& c0 t
//if(i >= 4096) ( ?, p/ g+ `" ?0 u* e* `6 ]# K% M // break;% w# q, r5 e& X3 d
9 X( W6 A, ?/ O) q6 R% |, K2 S }% G% H8 }% l U3 Z$ ]
UARTPuts("\n",-2);# `; c5 ?/ J a# ^7 D8 j
} 7 p# q0 p2 h/ U% j } 2 ~8 D4 L1 k) N. K4 p2 q k3 q; s6 C# p" |" z. V
} ! H8 `$ R, s' j: @0 }" h. y D0 }3 a9 l1 M3 l% h* [/ z6 f/ P ; _- _6 Q% ?. n; q作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 * H' W1 ~4 \6 F* ]9 d2 G5 U* ]作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% Q% T; S* @. J7 I. O5 Y