标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么? * R: K E* o* t" \; }Void UPP_TASK(Void) : X: w$ b3 V0 ~, r{ 9 A6 u. g+ S" h" X M 9 d; N) q( R) U& k \' W7 ` int i,j,k,target_int_count=2; 4 I( p, j. E0 W9 D7 H char ch[2]; - W1 [" f. O9 Q) P1 n" D$ F* B+ L; j6 G( X$ S* p
5 ?* q8 n6 s5 Y3 H% o
, G! z P. X3 o( q' p9 L
upp_interrupt_count = 0; # \% q& a) \" Z0 L) K8 ? upp_error_count = 0;" o5 T# k) \- E/ R7 `( `
/ g( e8 n5 ~7 ^, F. r, @+ n UARTPuts("\tResetting uPP buffers...\r\n",-2); 5 _) N6 u5 F2 W3 J3 J6 _( z: w // Initialize data buffers % p. g/ K- A3 S0 G d+ S for (i = 0; i < upp_frame_size; i++) 1 v6 @7 I, ~( z { 2 `( v1 `! ^0 M6 m7 f' [ upp_buffer_b =i;, b9 ?+ |7 F5 x0 z
upp_buffer_a = 0xDEAD;1 P- e+ V" x, C% w/ L& k c( g! { U
}* U. d- ]5 p. x& h2 Q, s2 _2 Z
6 D- E- R" g9 H- B$ w //for(i=0;i<1024;i++) ' L e/ s- d J* o- X // temp=0; , d( p+ `) a3 x2 g! g3 D) [( x" D- { x- J) G
//UPPReset();$ l0 ^( E' w% \5 n* A8 \
/*启动UPP DMA传输*/; h6 B" ^6 F# E+ P& @
UARTPuts("upp_prog_dma_i\n",-2);1 g+ Y! o) a1 b/ D! k0 V. e$ p) m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 m2 i W5 s# w4 s4 V# w6 U4 c9 `
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ c2 v! A# _( G K- H+ u& a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); ( m# q$ m% U: k F) R. y" h F0 w- }* g) ~8 X& e3 \ i
UARTPuts("upp_prog_dma_i\n",-2); $ ?6 n6 K$ ^: g4 N5 A8 N# {4 I9 s upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 a: d, i4 A" u3 X4 m; r( d3 T7 ?- m! O
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); 7 M) a, O- m& D, a upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" X6 R; o' @( G) d/ k
) Z+ e! X: J+ ^! [0 }, r
/*等待UPP传输完毕*/2 l- a( w( Q. K' X- u
//i=0; 3 r4 D+ Z t# _ //j=0; 9 k) ^4 u" C& J& c& Y1 A while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 d6 C; R/ U* }- U6 [ Y5 a( n
{ $ B: [$ g, O3 c) y /* 测试UPP传输的同时操作普通DDR数据8 \2 G5 Q$ a* p
temp=i; 7 Y6 g5 |. h$ Q; O, b i++; 1 f0 q+ @3 Z. J# w: t0 ?. J* D0 W$ p7 T# ~ if(i==1024) 2 H* P! @* Z9 I2 @7 o6 m4 Z { k; g4 T5 y# x) {7 \0 r1 b' Y1 m
i=0;) N7 {# P0 L; n( s! f
j++;0 J' `3 G' X% V! a. b! k
} ( \; X' \. q9 h */! n; R" k" B* w8 D1 u1 Z
6 p" j' w- }! z1 {% `, O/ V# } asm(" nop"); 7 q) c$ z% H1 s' O4 ] $ C! x( a" I% | i ^ //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); & P( N1 e4 A- ?" o } ) E+ ]& F) `( F+ i! Q: b9 v' ?: L + \* ^0 b% {8 M" Z# I /*检查UPP传输的数据是否正确 (loopback modes only)*/ 5 b# p" i6 j: G. }' F$ K //UARTprintf( "i=%d\n",i); 5 I8 K$ M6 [9 ?" i, N: y2 K; y+ S //UARTprintf( "j=%d\n",j); 8 J+ ?) J6 b, Q' P' {6 T. o8 f UARTPuts("Data mismatch in buffers.\n",-2); 0 M, E' ~ q1 _' S6 S: E if (upp_interrupt_count == 2 && upp_error_count == 0) n- C. x0 [# V; X& N; ]5 E2 @ { 9 M$ R4 F0 I4 Y. i* I; U+ m6 B8 X for (i = 0; i<upp_frame_size; i++)3 B$ W* @! o' {: j/ _% ^' T
{' v, l0 n6 M1 t- p# o7 v
if (upp_buffer_a != upp_buffer_b); X: h! A0 w( ^+ {: s0 y5 @
{ % L; Y# j1 w# D0 p- W upp_error_count++;- Z* w \4 q( X2 C5 L
}+ [0 ]- Y% \9 h p$ S! p: l
} 8 W' T' f2 D; K/ W" v1 A } & Y3 |6 k Q& X& I% C9 n7 I0 Z( X" E4 s- w: b
/* 报告通信结果*/0 x9 _' a% t0 `3 i( t0 }
if(upp_error_count != 0)# a3 b5 a- `& x4 L
UARTprintf( "upp_error_count=%d\n",upp_error_count);( K g- b& o* i y) r# y, D
else4 \# U$ f6 g) S) t
UARTPuts("uPP transfers complete!\n",-2); : A! F( w/ \& b8 { [0 X6 h5 X7 X) M1 x8 F) s* ^) l c
UARTPuts("Do you want to print all the data?(y/n) ",-2); ; J0 ]8 j8 k* T, V/ a- m. @8 o UARTGets(ch,2);$ d6 {' ^5 k: T0 Z' E+ P) G
UARTPuts("\n", -2);+ b6 c" h, Z/ o7 V
2 w" r+ O8 Q$ V9 E/ I8 |6 ~
if(ch[0] == 'y') + x3 _1 {8 B* l- Q) B6 s9 @+ ?7 X3 G { 5 h; c3 N8 @ H7 m" G /*打印全部读到的数据*/ & D3 S% I, W3 { q) O2 Z for(i=0; i<upp_frame_size; ) B2 u+ @& b" i6 V; _) v/ ]
{ - t9 M7 N8 l+ b% R) e. G for(j=0; j<5; j++) ( {* n: g |2 j/ s4 u. R { ! L+ C) v9 J4 O0 z8 c& X& j5 p: [ UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a); 1 I$ c9 G, X' h, ]1 J i++;2 U, J3 A3 B ~1 S8 I7 E
//if(i >= 4096)* \8 b0 y; \/ n% I
// break;" l) P2 ?- T8 `4 s% R
, i% g/ G1 r% a; v0 d& a
} . ^5 G, C) l, C9 }) x UARTPuts("\n",-2);$ G5 n, c5 J8 f, k
} 9 S6 K! r8 |: e% t e( q } $ k; Y! G5 z5 f7 M$ B2 @6 ~: g! I2 H* M1 ^0 I b+ s
}' P2 M9 j. u+ \, v: d3 O$ Q
9 v( W, A# N6 S1 n4 b' F 9 V* o8 F% f: S/ o: J作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。' m3 s! | f0 [ 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 5 J o. c- p3 n& \3 y+ E, x Z