嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?, _4 b/ h3 G' d- k2 U  ?
Void UPP_TASK(Void), K- ?( E3 f$ z) N3 x+ a3 W% e
{& I. w$ {3 l% H8 Y: [* U- S& d

8 d) x" Q) o) ?/ R6 d    int i,j,k,target_int_count=2;
; I3 r. I2 R3 k/ Y    char ch[2];% E& x, h' k2 M8 e

% E; R/ d5 ?% ?9 k$ D0 r& d: Q% Z. B! X5 v+ x: m: v  z6 R8 `3 p

7 b9 B  E% i( |  {) v  D. R    upp_interrupt_count  = 0;# u* J  M( z5 N$ |
    upp_error_count = 0;7 l( b% ]! s$ K8 Q; w

% M1 X+ d: r/ }3 G9 |# b    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ W1 k* ]. T" a' i2 o1 g# w( H! Z
    // Initialize data buffers
( ^" X8 G$ m& T9 m/ D  W9 B) K    for (i = 0; i < upp_frame_size; i++). k; {# k& _9 `% r# S
    {$ C6 W5 m$ P% X1 q/ t- b
       upp_buffer_b =i;% n; }( H4 V( o6 s+ H: j
       upp_buffer_a = 0xDEAD;
6 F/ q& {+ E6 ^    }+ K" X% T, ~+ r9 F6 H9 R6 y/ e: z

9 a. u5 m6 `. O, m    //for(i=0;i<1024;i++)
4 d9 g" ~& J# \& P2 r, y    //    temp=0;
5 H% f% O  \, z, N& O; Y; W7 k7 }' a) `8 t" o
    //UPPReset();8 s# U- L8 b$ L
    /*启动UPP DMA传输*/! l' V3 [! \; |3 S. W# {0 E% n
    UARTPuts("upp_prog_dma_i\n",-2);# D5 X+ q/ w2 d0 t  v, N" B
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ s9 ^( _2 I$ j    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' ^: ^3 \# I% j; Q/ d$ D4 E  {2 t    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  E; q; |! }( _1 e( k5 {
6 S( f4 D; R7 g  C9 g0 R    UARTPuts("upp_prog_dma_i\n",-2);
" S- d. g5 t. t# H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, h2 d, n( |1 c4 v8 R! R    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 p) P: ~. a* O6 ?    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* f) {4 n4 K7 _, g* c" T' c1 x5 ], i' I  W+ g9 j' f+ {
    /*等待UPP传输完毕*/" V4 M, H0 F" U& N6 K  R6 t4 `
    //i=0;
1 E* L+ ~( n4 s) M% m    //j=0;
0 L! \  K6 S) t; ?    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( s3 S$ g4 z  e2 X* J5 E% c
    {
9 w8 w& N8 Y6 h$ i6 W' r% K        /*  测试UPP传输的同时操作普通DDR数据) c; K$ b1 |- Q
        temp=i;
0 e% `3 i4 A  r8 ~! {( X% t! b6 ~        i++;
4 r# J/ l! @0 n$ }        if(i==1024)$ T' u+ @. }) F
        {2 I6 \5 o. i& f5 U% x, V  q( b
            i=0;
1 W/ T2 n  s$ w9 E& C0 Z( V1 r$ K            j++;
7 O: a8 V1 J! f8 A4 v/ }  T        }* C# V- [9 y7 v4 S  s3 }
        */. r$ N% X+ _0 j3 Q

+ ]5 ?5 \, u8 q! |, g/ s/ \% C       asm(" nop");% o) O9 w# F! D+ x, n

7 O) G5 l0 B2 @       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' t5 W2 R" i4 n9 `- h    }; I  K, @1 n4 u8 t- q1 X* \
, z- d. j$ a9 E. G# Y
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 D) \) C6 [# ^0 ?2 Z; [    //UARTprintf( "i=%d\n",i);5 B/ I5 L! ^% S; m  m/ S
    //UARTprintf( "j=%d\n",j);
1 \- l8 i' S: o; s9 O2 D* ^% j. k4 \    UARTPuts("Data mismatch in buffers.\n",-2);8 H) V- B/ w: c$ V4 I( H" v
    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 ]* i' k/ P. n/ ]* D* F  N    {
+ b1 y' l* ]' s' X( Q; q  B. t        for (i = 0; i<upp_frame_size; i++)
- y+ E8 j+ @: Z/ N+ r        {! E) `' u0 q3 }9 t* Z; s5 e
            if (upp_buffer_a != upp_buffer_b)
8 y( Y5 V$ c$ ]9 p) v            {; n2 ?' j8 M+ l% ]
                upp_error_count++;) i  z9 D' P- i) S( v
            }& q+ y: K1 s1 T
        }
( Z& P6 N. i9 {! O    }
" o& m, n; z6 h# J7 k1 v( s+ r; u5 y1 {0 D: \4 r5 ?  P6 v
    /* 报告通信结果*/1 q9 t( g$ C) w$ r" t- J
    if(upp_error_count != 0)
& E# I4 V2 [! W  h" ?1 _, m* u4 i        UARTprintf( "upp_error_count=%d\n",upp_error_count);
  f" Y3 B/ F' \) B" U    else9 y2 h) U9 u- r, b+ {6 g2 q) |
        UARTPuts("uPP transfers complete!\n",-2);
: r; r4 e9 I) F" E% q- D0 D% e
' Q( m) O: T. F, Q) z    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 c( i8 H; Z1 e! R
    UARTGets(ch,2);
" e$ k. }& |% ~) o% C    UARTPuts("\n", -2);
: Q0 ^( C# W0 ^5 I1 f2 C
% z% B9 c/ Z6 P& V    if(ch[0] == 'y')% T. Q8 j6 p. e0 {' k
    {
2 c3 r  f6 ^  P% M5 ~. ?        /*打印全部读到的数据*/
4 K  i6 \; U' G) G% {9 ^; ~9 W. v8 Z        for(i=0; i<upp_frame_size; )2 \0 r6 |  H  ^) G
        {+ o* Q. I4 o7 U" R+ o& q5 r
            for(j=0; j<5; j++)
' f0 p1 M. z' W$ b            {
. q0 h9 P( F7 w! k, D! C: H                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- y, m4 H% z/ T7 M6 p( w  A" |
                i++;: d* M2 c8 p+ e3 J7 K& d7 ]
                //if(i >= 4096)
) M% A; B4 ?8 h7 ^9 L% z                //    break;
: E( a3 ~/ h5 J; x! U! G
/ y# w4 Y2 w- }            }5 `2 v5 R3 \2 \6 n; y4 n
            UARTPuts("\n",-2);0 j* [. ?/ j$ g, g# v" i
        }
% w" U; r' i6 Y    }( Q$ b6 b4 D2 S( e1 v
8 H8 }% T( w: Z
}
1 G% F7 o! A% N$ d7 G, r8 `; ^

9 h4 `9 n- D$ m" c3 [* _% O% s
( w/ Y: B' x) {% p: Q2 _+ b
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# ^- S4 o' c7 _4 c! N6 a: r
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% x, L2 ~* V* V5 M8 W* _* w4 i# p, _





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