标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; o7 P$ {3 j3 I/ {6 n Void UPP_TASK(Void)1 w! u& h( N1 }
{ - s- Q, S2 X* j# a5 k: l F, w3 s: Y J) J. R7 P
int i,j,k,target_int_count=2;/ j1 f# a3 D' r. u1 E1 ~8 v
char ch[2];7 r/ A6 n8 J5 D2 d- Q0 R
! x+ k; m, n% M" g. Y2 p; L M
: `! {1 ]; Y" T- ]/ |1 r2 ~ 3 u+ I% n5 f* ]& Z7 l upp_interrupt_count = 0; 3 m, \9 \' i, J, v( [% q) I. H7 h/ K upp_error_count = 0;% k" B* ?( z; b& `7 w
9 }4 v a! f* A2 ^9 s UARTPuts("\tResetting uPP buffers...\r\n",-2); $ _% s4 M8 u- y, i! \& R0 P% K* X // Initialize data buffers ; k9 c7 o& ] j2 \; u# b' e8 I1 H" W3 O2 w for (i = 0; i < upp_frame_size; i++) 3 l4 y c- J6 }. h { 3 P, F' p2 L1 w8 R& K upp_buffer_b =i;$ M% y' D, p( T
upp_buffer_a = 0xDEAD; : F. K+ U6 c8 I4 W, a }+ @+ ^% c6 G- E) H! A. v9 E
, j- L4 a: [( @5 O. K //for(i=0;i<1024;i++)9 D3 u; U2 a/ J
// temp=0; : c' y+ Q- F5 _/ k- ?" o( P. ]4 U6 w$ G( f( K( {7 y
//UPPReset(); 2 ^4 l# d) H/ K, `6 O /*启动UPP DMA传输*/" O+ n8 b' H8 F( s( ~9 j# I% @+ P* N* W
UARTPuts("upp_prog_dma_i\n",-2);/ K' R6 Y7 @, b
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 X) T( T a8 ?8 e% D
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); ' r3 ^% |& J( B, b upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); 8 q' U+ L3 r" @# w* Q" m5 e 9 r6 Q6 E! }2 r. D UARTPuts("upp_prog_dma_i\n",-2); : M8 k/ T3 Y) k& P2 V upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; ( ?) f$ d0 f8 T0 g2 _8 W, \, L upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 6 y6 ?/ }- T- [) S9 _& u. r# O upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, J5 J0 g0 ~6 e* E( s
K, W& `+ D" _" U) B /*等待UPP传输完毕*/6 a1 o5 P: }( l9 V" o
//i=0;) r( A% {2 s9 \( n8 E
//j=0; ) i% [" P9 @6 l while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 U% N: o/ }3 P* E+ T% w% _
{ ( d- X5 [1 I- G /* 测试UPP传输的同时操作普通DDR数据 ^* Z, y+ v( t/ e
temp=i; ' {' X8 e& d" u2 h% _/ i! o: B i++;1 W/ m9 v Y/ v1 i
if(i==1024) 0 c( @' B. @) P5 q) { { 7 @6 E- T# g! C7 J; `) S i=0; + D" @+ {$ |! Y' l6 d j++;- x, f) u2 c0 S$ r
} $ ~1 j& m' f; a7 g* N9 B! E */ % ]1 Z& q5 [9 v; x2 O, l( W. |) [ D" c6 D% H: ?3 b6 d4 {5 t
asm(" nop");9 }4 P ^3 o. D+ u+ ^9 U. M
1 x( R; W1 c+ U& d# Q# V: C
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); 8 ^* N" c* v' z* Q }+ O; L$ ?4 O( N, y! p
5 s% @% B" J \1 F _ /*检查UPP传输的数据是否正确 (loopback modes only)*/ ; ]6 D/ `( D7 M ] //UARTprintf( "i=%d\n",i);$ e* l1 d: [7 t1 f: ?4 i$ g( o
//UARTprintf( "j=%d\n",j); ' n& ?; ~8 @3 \! X4 j1 \ UARTPuts("Data mismatch in buffers.\n",-2); 3 D' t- P7 o2 J if (upp_interrupt_count == 2 && upp_error_count == 0) 1 B! y9 q( H% f3 T4 M8 w( z { 0 Q. y9 M0 {- p, | for (i = 0; i<upp_frame_size; i++) ; ]# O, m: M* i/ X { / C" J: \% I7 F9 @ if (upp_buffer_a != upp_buffer_b)1 D# J) R9 @( l: s" _
{ 0 z! b! e, g7 D8 W! O upp_error_count++;+ F# ]+ N: M- D+ w
}: Z* H: {, _) [0 r
}- D% E5 i4 ?6 C. ?( `- M( n
}: ]# L4 d3 R$ e% l5 L/ y6 _
: A* _( {6 N- i! K; s0 M" C8 S
/* 报告通信结果*/ & v! D/ M7 i/ Y if(upp_error_count != 0) & G) Z0 T0 h: c3 T& ~, m UARTprintf( "upp_error_count=%d\n",upp_error_count);# \' U% _7 B1 R8 `
else' L0 g8 S4 Q$ H |
UARTPuts("uPP transfers complete!\n",-2);' |) Y# d2 Q/ R1 l3 [6 y
+ e* Z) _4 ?4 B/ [- s
UARTPuts("Do you want to print all the data?(y/n) ",-2);' H- O, f9 D6 d2 c& P, K# G
UARTGets(ch,2); ) Q5 D, O* J# k8 a' D7 g UARTPuts("\n", -2); # r. A0 W4 Z9 E6 d+ O5 V 8 D6 C% @/ E$ V8 B( A: l if(ch[0] == 'y')1 E8 C1 ^0 T' l8 Z) H& K1 \
{- q, N! t7 X. M6 V8 G
/*打印全部读到的数据*/! A8 P# r+ J$ B6 j% o7 h1 `
for(i=0; i<upp_frame_size; )6 x, Y; }: V; z# z2 C
{ , y, e8 Q. p$ {, v. S7 j for(j=0; j<5; j++) 8 Y0 P4 c" }+ C8 |( I {' I1 i% a. h7 T- v: {6 |. X
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); * m) A! ~; s- Y* L, y i++; 8 ], E$ J9 U5 Z" z3 I9 [; B& @ //if(i >= 4096) 8 c( t$ q% ^* z4 L# a6 z // break; ) ^. D) X$ b. W2 A9 B4 s4 y; b3 s; g. Y
}9 l3 [6 l$ {. l) b; O
UARTPuts("\n",-2);! ^% F5 J% I2 a1 M' |/ j4 B& s
}( n5 T p( r2 u0 ~- \
}; i' ?1 x9 U' M
6 z/ ^ l: P3 }: r) x
} / j: c @& H& p7 s8 Y! X% G$ r$ T4 ~! p1 l
, @$ q3 }; X. u$ z& E7 @* X! ~2 m作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。 $ V) b5 J; T( X4 r B ~作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 ) G; {( z F" Z$ ?7 s, t" }$ y