标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. f& f, T1 w2 B Void UPP_TASK(Void)- |. Y; k: H% j) {( f
{ & i+ `4 I, f+ k+ M p% z/ T D 9 E. q/ Y& b' d+ T X# i, |7 O int i,j,k,target_int_count=2; 4 w% k# z1 F' l2 Y7 Z char ch[2];/ ~& K7 i: t: ~& E+ A
- g* M5 I( q1 Y& P0 s) X% I $ s8 ?5 P5 ?1 {+ P' Z' g / ^& M4 m1 N3 i0 c3 d upp_interrupt_count = 0;3 W# B) K7 n. f& V9 Z. F: `. J
upp_error_count = 0; $ f' b0 K' v3 _1 e4 R9 n `7 a1 c5 t D2 V( a& u/ M
UARTPuts("\tResetting uPP buffers...\r\n",-2);6 ~+ Y; \$ i& {5 O+ h
// Initialize data buffers # u' ^6 M' s W; p9 A5 ~ for (i = 0; i < upp_frame_size; i++)3 s" f5 i+ P! t2 h5 x) d
{ ! f2 j3 h# l3 E9 u( T) C upp_buffer_b =i; 1 X* u w* U5 o- ~; R' [. G upp_buffer_a = 0xDEAD; $ |. x- t) { Q, C4 j# N } ( f& P% L$ T/ M$ H7 K/ ^- j 9 o9 c; h; K% a* d, u" `2 O //for(i=0;i<1024;i++)1 B: x* [" N" s; n2 K& }
// temp=0; 9 T" h$ ?1 e* G : N; Q2 s2 O1 L7 m* ]: B$ i/ B //UPPReset(); ! p' Y+ c( y* Q2 T3 k, ] /*启动UPP DMA传输*/$ h4 X" D, T/ Y- x F7 H
UARTPuts("upp_prog_dma_i\n",-2); ! F, P8 v# U! `/ m! x Y$ } upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* `9 A& K$ u7 C) c, w# W' E( K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); / ?# p! ^6 h9 f, b- y5 M L upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);7 Q% g- S2 K7 R
( C% m9 ]" R4 m; `# r5 y UARTPuts("upp_prog_dma_i\n",-2);# a& w5 o y$ K/ J
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; \+ d, V0 E0 i upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); , Y1 b& b& M/ P upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); + J/ s( H% q. O9 s5 `: @ 8 g }) l# T. A K; F /*等待UPP传输完毕*/) b8 ~2 @+ T" {, W9 l6 I, S7 w
//i=0; 5 t2 ?, Y1 ]9 H$ p* _, z //j=0;2 T. G) v( q: V& U! @# ?
while (upp_interrupt_count < target_int_count && upp_error_count == 0). c# Q7 z9 s0 n3 @* ~
{8 l; M0 z& S/ ?6 B
/* 测试UPP传输的同时操作普通DDR数据4 W. s$ R, s& M6 C5 U
temp=i;# M. u0 L# V' y% H. Z/ r# ]
i++;; R; I) n$ B( R6 \
if(i==1024)+ p* r3 a) R% O, G6 i+ o
{+ \: T- B2 p+ U/ o
i=0; $ R# [: r% k: g t; p1 |$ f t: h j++; ( k0 S- v& V5 w; B* G } 7 u# H& a1 a+ L. w7 G) X* j. g */1 ^& ~% ^7 W1 ~1 ` I6 t
( ]! s" C" L: R3 t/ p# V6 R) z2 B+ }
asm(" nop");1 ^9 h" f3 m- i5 e* c6 ^; W4 D% ~
$ C, W8 w, j( y0 p! _& P& y //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count); - I1 j: L5 I* e7 j/ ` } 7 m+ ?* Y" \3 q3 h& E1 w5 E5 _) N W+ Z' L$ @+ G* a
/*检查UPP传输的数据是否正确 (loopback modes only)*/3 `; p9 }2 i$ r; ^" [% J$ m
//UARTprintf( "i=%d\n",i);' }/ s: v$ ^% B
//UARTprintf( "j=%d\n",j);- h- K3 I7 C4 D: L( y7 w
UARTPuts("Data mismatch in buffers.\n",-2);& r! T! T! _+ B: [8 O' b! g
if (upp_interrupt_count == 2 && upp_error_count == 0) $ }) C( i4 B# S6 L {% ~& w% A$ {+ _9 B, v; M3 \/ i
for (i = 0; i<upp_frame_size; i++)8 y& ~+ U: P7 ^2 Y+ D, A0 _; w
{ . {7 j7 \4 a1 H: b0 n0 {1 J if (upp_buffer_a != upp_buffer_b)& |. I3 k$ o c+ Q6 o/ B5 w
{ : Y( V- Q2 n% o& D upp_error_count++; % U6 J( b8 \; ]4 `; @( f5 u }- C: ~ z7 M5 s' W% @
} , i4 b x8 o& ]" Z, a } ! E5 ^8 f. b2 @: A3 d " e: S& y- g3 l Z$ I( F /* 报告通信结果*/ 1 l) w1 s/ ~( @1 ? if(upp_error_count != 0)8 ?3 Y% ~) A, `' W" d* C a
UARTprintf( "upp_error_count=%d\n",upp_error_count);- ~" M) E8 q% @7 H- h
else( u. Y! m. x8 i$ u% p
UARTPuts("uPP transfers complete!\n",-2);4 p0 f& w4 `* L: C2 ?: m% S
9 {# q; `& Z' g* v UARTPuts("Do you want to print all the data?(y/n) ",-2); M( d6 |. K: N4 ] UARTGets(ch,2); . \) X$ e' ~% m; c UARTPuts("\n", -2);. H& M5 y7 d6 f6 I
: r* t- s5 Y- P9 w if(ch[0] == 'y')2 [: P* E- M) M) C# x
{ 5 Z) d/ U" j1 r. u" V# p6 f1 b /*打印全部读到的数据*/: Z2 o1 S G K1 K- P
for(i=0; i<upp_frame_size; ) , z' O8 d6 d) E2 ?3 j2 V {0 B, K# O5 T7 `& {9 {( A
for(j=0; j<5; j++) $ F0 I( M# B* o3 ^% A. n {7 L* w" }, [0 V- O0 A9 R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);( E" b0 |7 G/ S% X% ?
i++;2 f+ g K: ]" w* o4 Z
//if(i >= 4096) - L. F8 U- T# I5 \ // break; 1 U, k" N) f+ N! v. }4 b- [- X2 N8 n/ m# O& y( G$ v. X
}, }6 Q! G! `# v; p! t! m) u: F2 E! _& o
UARTPuts("\n",-2);: Y6 O% y* E& e" u& J2 @2 ^' h' T8 m
} " b, `: }' d; U+ m: j } % `3 {/ |6 A4 i/ C0 A9 ] ! c/ m4 R; y. o5 w}% g8 a5 x! [" ]8 S" e4 b5 S ( | }0 W0 |& Q) U9 L" B
: v/ K3 r/ W% } d0 M2 T 作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 I. j5 X; U1 a8 R1 \0 L( g 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 # Y* n/ p) B: ^2 M' Z