嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* o0 J" ^$ P& e
Void UPP_TASK(Void)3 B" ^( i' ?7 Y( @! _% |! T" p' H
{
- s) E" m. H2 N; [! V7 m
4 T9 @. t" v" b! J; p( ^# c% L- t+ O    int i,j,k,target_int_count=2;' g  b. Q3 Q/ p
    char ch[2];
, x. n: g- w; E) C& v1 T0 I# B( ~, `9 x7 m+ q  }) C1 ~
7 \- ]: t' @9 ?. s7 C

, A8 r: S5 i" @% ~    upp_interrupt_count  = 0;
, W4 F0 U% D9 |/ A9 b( m    upp_error_count = 0;, m! F4 J* m# q- W. Y  _7 u
* C+ }( T5 \. o$ W2 F
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 m/ O* j- U) u$ F4 M3 e4 B) Y    // Initialize data buffers
" U; B8 W- K0 Q- h: Z( U4 j    for (i = 0; i < upp_frame_size; i++)
9 B9 ~8 T3 N% b1 y+ O8 A    {2 P3 @( {. X. t
       upp_buffer_b =i;
/ s7 [' t2 m( w, C! O, Y       upp_buffer_a = 0xDEAD;2 k  J( u4 Y7 P  l5 U
    }
- f/ o% z5 }/ ?! G. c1 g- Z& t, {
; \' c( m9 O# g- o    //for(i=0;i<1024;i++)/ K8 }1 h; `  B/ c
    //    temp=0;
  S' a. P3 v0 D; M( x- s, K6 e3 a( b3 V7 D7 O) c& i$ W! O" H5 z
    //UPPReset();+ y. s4 F! |5 j0 u! A; M! S) d* b
    /*启动UPP DMA传输*/9 A+ A6 O4 g0 F3 x' \2 q4 Q! Q
    UARTPuts("upp_prog_dma_i\n",-2);/ y0 G4 B& q/ ?
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 c: h0 e8 r- [; P3 ~    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 n1 A* r. y! ?8 N
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 U2 \; Z. q' t8 o; }  A
+ a4 B* \& v) }; A: J# @    UARTPuts("upp_prog_dma_i\n",-2);" Y: ^* Z6 u. U2 h+ I5 f" p
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! I% R4 a, [* S3 Z; v' u( F& i) q* K, c
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" j! _' O1 r& M: f7 H( j
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);& A5 y/ \8 W. H4 p
+ b5 W& E8 m8 E) I0 O4 }
    /*等待UPP传输完毕*/
  D( d5 ?. f0 U, H, X1 ^3 x    //i=0;+ O7 n7 R. _1 j! @" M
    //j=0;
; Z$ P3 g+ t- V0 q% \  N    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% \- B4 u1 o7 d; Z$ [, C' f    {6 W2 {  M' p' C4 i0 H3 Q  C/ l
        /*  测试UPP传输的同时操作普通DDR数据
9 M- n9 y3 W3 |1 n        temp=i;
' G1 }9 }0 f! p/ U2 }$ R3 a        i++;
0 }9 Y0 K/ q( n) R9 x# ^        if(i==1024)
2 w$ C) d. M0 a0 `3 W        {
: j7 [7 u) s2 t% F  U            i=0;. \/ }; _$ J, [1 ]2 @6 R- i+ D, g
            j++;
$ Y& k% d- C% y, |        }; @- ~. [4 g! v% h9 W9 r( W
        */& q! X* u6 _3 S3 E; V

" t2 t' }6 Y; P2 I  c       asm(" nop");
$ J) u& x! v- A" ]0 @* k6 }- I& I4 O
( s' j: C4 v8 ^3 {       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 q! L3 N% }1 |9 R4 o
    }
4 t# Q) U! s3 p0 c
7 D; [! ?. d: M  l    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* i1 S3 X' b+ k8 j- x  m8 H" c    //UARTprintf( "i=%d\n",i);
( V; h/ j) Z5 L) h; }  W    //UARTprintf( "j=%d\n",j);5 ^- P7 s0 F5 n: N
    UARTPuts("Data mismatch in buffers.\n",-2);5 V! b7 Q# |) l) ~
    if (upp_interrupt_count == 2 && upp_error_count == 0). ]% f6 E: m, z8 u0 q) J" a
    {# s) E4 ^/ O/ [* u7 x
        for (i = 0; i<upp_frame_size; i++)$ M# U8 ~/ R( j" b2 u
        {
) `) E7 \. @- `. h* L            if (upp_buffer_a != upp_buffer_b)
& f: n, a# ~+ _; `& f9 Y            {
1 r, [! d, W1 s7 G% T                upp_error_count++;
& G4 e5 p2 @4 Z- U* ^; g            }* P/ V0 t# y, d6 x) m
        }. S( P8 D" u) l: a! c4 b+ j
    }5 _" Q8 @9 W* @0 H+ S9 `% X5 i$ U

5 y9 u: C# G7 N! l% Q    /* 报告通信结果*/4 e5 d5 N( S1 L; B9 X6 p
    if(upp_error_count != 0)6 W7 }/ H+ t8 L/ z
        UARTprintf( "upp_error_count=%d\n",upp_error_count);7 I  L& ~, k+ n8 K9 M
    else
9 G- w: m) b/ F. A& C6 W; I, ~( d        UARTPuts("uPP transfers complete!\n",-2);$ a3 x2 }/ u1 p+ [7 b

- ?8 u- ^; z0 T% @+ f    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 |8 F6 W$ G/ d6 E: g6 Z7 q    UARTGets(ch,2);* p# M2 {7 B: }7 R, T. d
    UARTPuts("\n", -2);
! X0 X6 d4 z  B3 L. V! M
7 }& H5 H% E% N5 |: `    if(ch[0] == 'y')8 Q8 O3 }- G9 f+ f9 E
    {3 A0 S5 p& |  }1 ?
        /*打印全部读到的数据*/
1 z! f$ u, }4 f6 g5 U        for(i=0; i<upp_frame_size; )
1 o" J* O. ~" K0 s        {
# U: k0 k& a9 P% d            for(j=0; j<5; j++)7 ?+ N- t: l+ N) c& U0 `; e0 C: O  p2 `
            {4 C4 U" c* P7 V% s! i$ ?% C! M
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
0 q6 p- j/ C7 C) E  h                i++;
4 ~8 u$ d3 H6 W4 G' z7 f                //if(i >= 4096)( E9 {" y$ @% C! @4 m
                //    break;
" u$ T) h4 E2 L& \2 A! o6 y/ u4 e  |; x- j
            }
0 z5 B2 ^+ C$ U6 l7 q1 w0 C            UARTPuts("\n",-2);
/ O* U1 j: @: \+ t        }
: l8 i' c6 u, J+ b    }
: K, v1 \  y; J4 ~! U4 p. ]
7 I" o+ R, t3 M0 r; C6 v' T}

  C7 p7 O( t$ |+ V4 k. d* ~
, Y2 f0 g% N$ K) w% Q
3 D+ R$ n4 E; s" s8 C9 F

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. c1 ^, z% x7 y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 l3 n; B) |$ _% a4 ]




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