嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( ?6 `- m; |0 i
Void UPP_TASK(Void)
5 e0 z) T7 T- Q2 ?2 D{
; c3 g" g1 W/ w7 Q" B- J  ^
! l0 J8 m  b& U0 D+ `. q    int i,j,k,target_int_count=2;
/ Z6 S, T! b+ P    char ch[2];( z0 ~8 |, Q5 N: \" g4 T2 N6 V

! \. x2 X! `% H+ [$ W9 k; f- x# b1 n. z. h/ y- Y1 {1 P6 ]

! P1 \, J- e  Y) q/ c+ h1 B    upp_interrupt_count  = 0;
: W  z# H2 w, Z' l    upp_error_count = 0;
) g) ?+ I" \5 [2 Q) r
" f1 M4 @5 g+ \2 N( |    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( u. t# t: X- e3 f    // Initialize data buffers
+ B! O- N7 O6 |4 O7 ?' k( F    for (i = 0; i < upp_frame_size; i++)
5 w$ J: H6 [: n2 G/ y0 I    {: o1 w1 z7 B& G; z0 M2 w
       upp_buffer_b =i;
+ U# ~% M' u4 i       upp_buffer_a = 0xDEAD;9 e5 }; M7 B; _/ r$ S# Z
    }7 t8 r) @0 {7 N, m$ @

  g% s/ w5 r1 Q. ]    //for(i=0;i<1024;i++)
, B) \9 ~; O0 A5 V8 l+ @$ x    //    temp=0;
# L* b! b" i  i5 D2 V# w$ D9 I  x9 m, i* `6 [: Z5 u
    //UPPReset();" Z% [/ p3 Q2 x/ J7 O3 t
    /*启动UPP DMA传输*/0 O# Q  r' F3 C3 k2 q- y
    UARTPuts("upp_prog_dma_i\n",-2);
3 {, K# Z* B8 q; h* E/ Q! c    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: \4 a" m$ b: S; y$ Z& V* B
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& D- Q8 C) Q3 `% F( L
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);* ^" q( j% w* f4 Y5 [
( Y$ f; W5 I3 s
    UARTPuts("upp_prog_dma_i\n",-2);& A0 s& S9 ], P; x
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 h3 g: t0 a8 t4 n% b, @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ }4 g" L2 E& ^- J6 h# Y, K6 e
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 E- Q1 n; l4 {7 ^
( J* n2 ^$ N% b: P5 ^* g    /*等待UPP传输完毕*/6 t* F; _, z6 r( \+ B. R
    //i=0;
/ H9 D# }( F4 w2 O: l    //j=0;
5 O: B; W% T0 E2 Z+ n( q* O    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% c; j9 A. v8 R; e. ]
    {
/ `3 Q+ D, Y# j; d( i' x! a        /*  测试UPP传输的同时操作普通DDR数据
+ Q% |5 h9 _1 V' u  D7 y) G2 l: D: \        temp=i;
$ b% D1 f5 `  {# i        i++;
7 {/ w2 }4 T! m( ]$ J        if(i==1024)
! ~9 u& M5 k* N6 D        {
1 V" \; f* G$ G, h            i=0;
: B9 `; K8 b$ ?' o- _            j++;- W1 V: d  O% n* u* u
        }/ s5 H* e/ M( e$ \9 ]# s. L
        */3 s% A' k: e1 ~6 d" w2 \5 B0 N; |
+ L2 C2 V3 `  o5 o0 x* N, `8 T) V1 p
       asm(" nop");8 M6 r' o9 T7 k* Q+ r

& b/ ~9 ~  ]- k, Q& }3 N       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% k. ]: L9 y$ X8 Z
    }4 K. Z+ {9 w) u4 U" m5 I
* G: M6 n- s$ Y, Y7 r+ p" ]
    /*检查UPP传输的数据是否正确 (loopback modes only)*// |5 x, U" m0 h2 X, ?1 ]8 [
    //UARTprintf( "i=%d\n",i);
$ {: D+ q% L; ~- W% P  k: r( K    //UARTprintf( "j=%d\n",j);) p( R+ o- n8 t4 h, P8 }
    UARTPuts("Data mismatch in buffers.\n",-2);
4 _1 S: S% }! I9 q2 a, Q    if (upp_interrupt_count == 2 && upp_error_count == 0)+ y: q1 V$ Z2 [: L& w7 E
    {
. p5 Y" R* O$ w        for (i = 0; i<upp_frame_size; i++)7 i9 }6 _" v. ?! ]
        {
- t4 h2 H; G! O9 t' H: x            if (upp_buffer_a != upp_buffer_b), C& d$ K0 S! o, C
            {
6 W2 o3 ?# F6 [! I, @' R) E                upp_error_count++;
0 W$ _; Z5 ^5 q3 D1 Y8 |            }: k9 g7 s7 a( E% y
        }- w( p: N& B- _1 Q$ ]( Y
    }
$ M4 O- b! C& u+ P( M
7 P: L, i. [7 R& R4 O2 x    /* 报告通信结果*/
; w" G  u" D2 B/ h& m! b# z    if(upp_error_count != 0); t7 U: y+ {9 @! W+ ]# P. M
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% c+ K  Z, d9 m6 \1 D0 Q+ f( W3 [2 Y    else
; {3 F" Q7 h2 Y& U  i5 y        UARTPuts("uPP transfers complete!\n",-2);
! n1 q) a" @+ |9 {" g1 U- @7 [4 o/ R8 N
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);1 a2 Z" s3 u" s$ ^5 I/ ^6 V) l4 \- ~
    UARTGets(ch,2);
/ |+ @  J. z9 V5 w8 b2 |    UARTPuts("\n", -2);3 R  e" r2 W2 U) X" H) t) B

4 f  h- @+ b7 z: J2 G: e: V    if(ch[0] == 'y')+ N* ]" t* \: W/ j' o8 h
    {( N+ a; R: k( _$ Z# @, _
        /*打印全部读到的数据*/
4 r+ M$ @- z7 ?6 `  C5 H        for(i=0; i<upp_frame_size; ); W+ U, r+ G6 a3 q7 A+ J
        {. x- x3 l* w$ e: m5 W4 L
            for(j=0; j<5; j++)' ?/ j4 p9 S, L; j' l% i4 U; x
            {1 |9 e( Y3 x3 @: t& {
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
: t$ x" A, ^: W                i++;5 F! W; e; [2 c
                //if(i >= 4096)- X- C' x3 m+ Z! _! [
                //    break;  d2 b- ?9 K) o0 J1 U9 z' K( F& n
- S* T8 Q7 u7 r6 z/ c+ @
            }
% M3 |2 ~8 t7 m& g2 R            UARTPuts("\n",-2);
. l7 v+ R" i% R* m' F        }: @4 H6 C  s7 Y- a5 g
    }$ B! k* S( U3 l5 S/ d& q
$ B! m7 R1 D/ w7 d& r7 t
}

$ K7 z3 ~4 L& m% p; P, O( @/ m0 V
( g6 y2 @- P* @( }+ f

( `7 A' \- p/ e& g6 t
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。0 g9 |+ Z. V4 F+ ]$ Q/ `- S

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% g5 v, U; m4 S) ]




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