嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 w1 K0 w, ~7 {0 D" b0 z
Void UPP_TASK(Void)) Y4 B& T7 s$ H* H
{5 P; _: Z) X/ i) f( Z

$ ?# E" ~( t' _& @3 k% E# d3 D4 B    int i,j,k,target_int_count=2;/ Y) T' w6 b; f  ~
    char ch[2];# i6 c5 A) N; B8 h! ^8 r
# X  X  n4 |. H0 B

' s$ b# Q& P, }  ?4 _8 }6 X  r8 @  U& l( y- J3 M
    upp_interrupt_count  = 0;# m) ^7 C/ h$ y) g: C; c4 h- U  J
    upp_error_count = 0;
2 S$ @' l+ i/ o% Q
  o: X; q3 K0 H1 j: @- }    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* m4 j1 o% v2 T+ A, |/ Q( O6 j    // Initialize data buffers
$ c% j5 Q8 X( n' a9 g: v, p    for (i = 0; i < upp_frame_size; i++)
) v' m4 U/ A. Q  j* Y2 h) Q5 W& [* }    {  Q' c, E( _- ]
       upp_buffer_b =i;
2 k8 f' Y* n' V$ x+ y! l       upp_buffer_a = 0xDEAD;1 W$ t# }( ^$ I! D, C0 ~
    }, c, W6 h  A5 l$ j8 |% o
3 J0 Z* ^: J0 D( `# k; V. X
    //for(i=0;i<1024;i++)
, ~1 `9 [+ ^. [# T$ P" M! e' T    //    temp=0;: c3 t! \: W1 E' V4 h' A+ B9 O( ?
7 e! ?$ ~9 ~% }/ S
    //UPPReset();+ K7 t  B/ ?  X# N2 L
    /*启动UPP DMA传输*/
1 H) G3 d) h5 h5 a    UARTPuts("upp_prog_dma_i\n",-2);
* ?# `+ N9 s& P  ?- ~    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" J: l  o! u! m$ n' e  `. n9 c6 Q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 `7 a8 G7 p+ N    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# \, p( [( W, {0 g3 ~6 x

1 \' B/ P3 C& r; [8 [% U    UARTPuts("upp_prog_dma_i\n",-2);
' |1 [2 S# F" e8 ~    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 S8 A" {+ @5 W7 r$ ~! V! H    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. V0 l& V7 i- s+ W; V: u
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 X' g5 c* f' i- R) L$ Z( l
- E4 i  \' Q% y% v4 u! n+ j! C
    /*等待UPP传输完毕*/- g( K- d3 k/ o: L# `  D7 |
    //i=0;0 }; a& ^' V# V7 N+ d
    //j=0;
& z; y1 m9 D9 Y) |7 M5 f    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ I. m1 }9 y) c3 p6 |5 x9 H' C    {
' m9 D) d6 d  o8 z; @, w        /*  测试UPP传输的同时操作普通DDR数据5 U5 O/ b1 X( `) `+ O2 ^# Z. q( ?
        temp=i;2 [: d( M; ^- P0 p
        i++;
6 @) @, J3 V7 u: M0 Q) u        if(i==1024)7 `0 D  N* U- [$ F
        {
/ ]9 r# n, `- T7 X            i=0;
/ G* J: \5 T+ D9 m5 @0 s            j++;2 \) j8 X+ u4 b- S& l
        }2 l) [( q/ {# S, [
        */
6 O2 M2 L8 L, g/ G9 d; I! A
4 z+ l( P0 s1 H+ H  i; t) x       asm(" nop");
1 T' z  o% @" m) O, }) X. ]% S- \0 E5 h' k0 r' r" D9 b/ a3 V" H
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& {9 x1 u) D& k$ `8 y* q
    }
# `- _& d( i! ?5 M" G2 c" ^3 v
( f. W: g9 C; D0 L    /*检查UPP传输的数据是否正确 (loopback modes only)*/
; Z6 t) ~3 J! i! i4 X0 J8 U1 r5 F9 c# e9 N    //UARTprintf( "i=%d\n",i);
2 A  }$ B% i: _# Q0 Y* d    //UARTprintf( "j=%d\n",j);
: x! _, u/ g: ?* j$ j    UARTPuts("Data mismatch in buffers.\n",-2);5 x0 R/ g, f4 ^2 s3 X$ B( P9 n" Y
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 F: o3 O6 m% k* F    {* Y$ |# [8 J! J
        for (i = 0; i<upp_frame_size; i++)( ]/ U1 h* D& K5 k& _5 `, j
        {
$ V6 P) n5 f( s            if (upp_buffer_a != upp_buffer_b)
: @+ b# O1 ^' B8 p1 w            {
! M) T" ?8 |1 i, J  n; b" H                upp_error_count++;
3 v4 U: O$ k  g" U+ R4 W, p  t$ n  y            }2 O% C% r& N2 t) ?7 q
        }! r; _% ^% i3 d5 y
    }" d9 e8 R8 ^# l

) ~1 t0 z9 B% q1 t9 A4 Q# n- T    /* 报告通信结果*/% ~1 U* R5 [: ~9 m) f6 G
    if(upp_error_count != 0)
. x4 O  B5 Q1 R4 O" H" I        UARTprintf( "upp_error_count=%d\n",upp_error_count);* m- l& S& f( G, Q
    else
8 F+ z6 ]- B  D% @" G: b9 b        UARTPuts("uPP transfers complete!\n",-2);; V1 |* W$ G9 g' a" F* G; b+ n

5 p: g; j/ l5 u5 d- f    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
$ N2 L7 t4 _2 l    UARTGets(ch,2);
7 t  g; I7 }" F& E    UARTPuts("\n", -2);
: h9 |7 H' [4 }' {
2 P; I1 H+ ?' `! t    if(ch[0] == 'y')& k6 m& g' {2 q  n8 d9 \
    {
5 z; i% l5 c: q. w2 x' a' [        /*打印全部读到的数据*/
; O* c7 Z1 O: t& D        for(i=0; i<upp_frame_size; )" k0 L& |! g' u8 T8 N, T
        {
2 L9 V8 C0 ?( m6 X            for(j=0; j<5; j++)
9 ~6 u3 B: l8 }- z3 R9 H            {
5 l# t$ \+ B- m! a& J/ C                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  X0 G) k" M( q4 V1 N% @
                i++;
+ L! e8 f( a8 v; \* T& v' F2 `                //if(i >= 4096)3 H& |" d$ \9 B$ Y
                //    break;$ x* }, J  i% m: O% C' W# n6 j
4 s2 @; M8 ?; F* g5 Z* |/ j
            }
6 T& ^7 Q, C" R            UARTPuts("\n",-2);
& l- C6 h2 _4 g* t3 l' ^5 K8 K        }
0 y8 K( U$ W% b    }( ?! o+ h8 m, v, ?3 Y: |( v
+ e7 Q- v7 r8 l$ _: {
}

. p; s( ?# h. k+ ]3 }
$ ?" m" ?' x3 R- W
+ _( P8 P; }) [1 d6 E8 T% t

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。' X8 u" d; z( k

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* t9 u8 }1 _' u3 f+ Q





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