嵌入式开发者社区

标题: upp问题,在SYSBIOS下的应用问题 [打印本页]

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- ^+ d7 b' t2 v) P. @4 N$ E# s
Void UPP_TASK(Void)
( M% V& R. H  W8 [  {. [{
" n: `. u* I: F3 l. O5 H6 D: {. T* x) w2 H, e
    int i,j,k,target_int_count=2;1 `; E6 ?( s: v3 h! M
    char ch[2];- G3 B7 G! }' j
# [: [& ]& y# [7 r9 M
5 B8 ^- J: c% d/ b4 C

( I7 f5 ?. o# L, ~+ r1 u    upp_interrupt_count  = 0;
* W6 e4 ~% z9 j  T+ D    upp_error_count = 0;
. p* P5 K1 c) q( s* ~5 u
4 x, T1 E1 W% s, W: k    UARTPuts("\tResetting uPP buffers...\r\n",-2);) |3 }6 \) ?2 I0 o. o; C* z
    // Initialize data buffers
; U5 Y3 K" c) y! V' _5 k    for (i = 0; i < upp_frame_size; i++)
8 c+ D- ?0 H! f1 P/ V+ R+ T    {
9 |) p+ ?! U  n8 Z       upp_buffer_b =i;
/ |0 W. G$ V; r; [& N" k       upp_buffer_a = 0xDEAD;
2 M% u4 d. T/ _( N7 c' |    }% D" k) c- i- g

$ r/ g/ u0 B( z3 e! `    //for(i=0;i<1024;i++)) o% @5 Z" i' [5 c: g& |+ c
    //    temp=0;' @8 b. K2 A- Y5 F

# R2 f$ O+ q' E1 ?    //UPPReset();2 y7 @: L( P2 [( b& X
    /*启动UPP DMA传输*/
: {: n7 ?9 b" A" y    UARTPuts("upp_prog_dma_i\n",-2);
9 k8 p9 Y3 s( T# s. _    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: w; o+ X$ ^" ]' C2 P5 I9 R    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 Y/ K% V5 r# I5 ~  r% F, Q
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# O$ S0 o0 B+ ^7 g4 f) m

; g- [- V# J+ n1 B7 Q  E    UARTPuts("upp_prog_dma_i\n",-2);/ C7 q4 V) A* \% n0 l
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, B0 j+ A% h# R- R0 }, i
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: H" [+ C; L: ]6 ?! W* y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);1 x  l! j2 Q! ~7 M5 l7 y4 a

. y- `; {' G3 m    /*等待UPP传输完毕*/. E; k5 D- K4 F: g0 I+ ^1 q) D
    //i=0;- f: R% {, i; e" j/ Y5 N
    //j=0;
- w: ^8 A% x. X    while (upp_interrupt_count < target_int_count && upp_error_count == 0): C: w( d. N2 S; i! K7 y; f. v
    {
* t6 x& ~& l  ?; L5 D- }        /*  测试UPP传输的同时操作普通DDR数据
6 b/ M+ P- B" x/ ~        temp=i;( J( \+ p$ i) N# P5 {( \
        i++;
) u' N2 m5 E; P+ }+ J% i        if(i==1024)! o0 c3 Y) B( F6 j
        {
5 O, \0 B" Q8 L" h3 G/ p% v! I            i=0;
1 t* o( s2 b2 ^  C# Q9 O) [            j++;2 ^$ A& ?9 z$ Q9 \* K# N1 R( }
        }& c2 B+ X3 y5 U2 a6 T9 f7 R
        */8 ^4 }1 f! n/ t1 c+ R9 `2 m
, D' Q+ o" F( F( Q" X" g/ |# i7 D) w
       asm(" nop");  _* E) [( x$ d4 T4 w2 B8 }6 k) @

$ l3 E6 k' ~. ^& ?8 J+ Y4 |6 y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);; i9 K6 y' o# O/ s
    }+ ~0 b; f, A9 H+ n5 b8 Q4 G
9 N$ j8 j0 ?0 P3 I6 I
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 q5 y# E- _" _% G; J    //UARTprintf( "i=%d\n",i);2 f) O" \2 Z' s' W/ E5 d& D
    //UARTprintf( "j=%d\n",j);
0 I, h; H* n; e' A% I# k    UARTPuts("Data mismatch in buffers.\n",-2);
7 T/ s# T2 z: z/ h# P) ?. @# z( v    if (upp_interrupt_count == 2 && upp_error_count == 0)
) l% p8 k/ O3 g' o    {) U4 J$ q: Z! `% x5 y
        for (i = 0; i<upp_frame_size; i++)
/ ~1 n) d# e- t( ~) p        {
# u% p9 K6 ^' z# r            if (upp_buffer_a != upp_buffer_b)
% w3 P$ O9 s6 N9 a* Q- l  Y) O            {3 V3 ^, j$ H+ Z9 H3 m
                upp_error_count++;
; j* G" {: v+ a+ ]+ i            }7 B+ \3 l4 l* ?( h% j3 Z
        }; w! Z* O8 t' I* v/ T, z( K* y
    }
& X0 l( K/ I7 ]" S: j( ?! `
$ I# l4 n0 t: [6 \; U, N    /* 报告通信结果*/
: g5 c: J3 m4 M3 X, ?    if(upp_error_count != 0)9 ?% j9 a  U$ l; F  C- j7 Q
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# w1 O% U+ p# N. v    else
% N2 Q/ R& K$ t        UARTPuts("uPP transfers complete!\n",-2);7 ^  @$ T+ m- v# h) X! R( |! L

$ \5 q' t* f1 c    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
. R+ U! ]7 k# B8 F    UARTGets(ch,2);
3 ~2 ~+ z+ h) w- d* [+ q    UARTPuts("\n", -2);" `4 W6 r4 d% o9 t, I; G5 ^$ j" K

0 K' A4 c6 e. _  ~; u7 |    if(ch[0] == 'y'): o! ^. ], c+ C" w/ {% t
    {0 I. R* P# c% a
        /*打印全部读到的数据*/
. |) m( U6 ^3 B% Z" c7 e- C1 j        for(i=0; i<upp_frame_size; )) y1 F2 Z0 k5 I, n' e# `9 B
        {( S2 \; D$ E" v' }) Q
            for(j=0; j<5; j++)' T: O" l' W- q1 h% ]  r( [9 K1 {
            {
* ?. b  h4 i2 O8 H# e4 [: K/ d                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( _  a& i% C4 A6 o6 L
                i++;$ `7 I# v" o8 y$ Q' P  t: u. b0 W5 f
                //if(i >= 4096)
2 t9 U! y# r) B( H2 N7 V  N7 L) ]                //    break;
1 i9 G* O  ?: [3 f2 U
: F. Q- c, ]+ D! h( S; V            }1 H/ P5 q! c% }2 `- b- e( v
            UARTPuts("\n",-2);
+ A% H. o$ D1 @9 K0 F; A        }
* O3 Y% n# M% k: ]4 c2 u1 F$ C    }8 @! _/ V6 u. T, P  @1 E$ c

6 }& T3 y6 N- q7 n( G( m. t}

! s0 `6 l# N) [1 i- a7 n/ u

& j& W2 T) a5 T3 Z5 N0 D! o  k3 I+ y5 w

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。; e; J/ k8 J+ z

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 t( N7 d2 C1 U# i& n




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4