嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 ^0 E# o. a  p# L' w+ _
Void UPP_TASK(Void): }. ?: ?' `+ M
{
/ R6 _0 ^  k8 A& F) `
/ I) H2 n- N) }$ X4 w9 ?    int i,j,k,target_int_count=2;; C7 u& f( G' U  o
    char ch[2];+ ]# ^: B/ e6 @3 w8 j7 g

" V; s) `+ }1 V1 E
) B  n7 u/ w( f- C" x2 `" Y  }
4 l5 p9 x0 Z* G7 B) H: c3 x    upp_interrupt_count  = 0;+ A+ [4 _! u8 k" O
    upp_error_count = 0;0 \. D8 [' z- B

. Z7 Z8 Z  b8 q$ a, u4 c    UARTPuts("\tResetting uPP buffers...\r\n",-2);( q' r4 Q6 f5 G4 R2 C# W& V
    // Initialize data buffers* x9 z( t0 B( V4 Q3 @$ u
    for (i = 0; i < upp_frame_size; i++)
$ {( \$ ]- S- X" \( U" f    {  B6 B( Z9 c2 ]
       upp_buffer_b =i;
9 u7 B$ l; G) d( J' |       upp_buffer_a = 0xDEAD;2 h/ E2 X( t% }
    }$ t7 C. G* ^3 t2 O% }  T

7 y. l. O3 z. X4 x+ x    //for(i=0;i<1024;i++)
5 G! P7 ]- \& J- X# |    //    temp=0;4 H& [* w9 g5 ~& h( s" a  h

4 Q% A0 a' `' J3 d7 o3 r# q    //UPPReset();
2 R+ F& [- C3 d% \: {% }    /*启动UPP DMA传输*/3 L2 b2 O% V* U3 D# {+ h; p+ J
    UARTPuts("upp_prog_dma_i\n",-2);
5 o$ Z/ C8 z4 X7 B( @! ?    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% ?; v% z7 y5 f9 f; T
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: s9 [3 Q9 i  U& C" a    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ L& S) j: I3 A/ z0 ^  U
) I& k" L5 X3 u1 w    UARTPuts("upp_prog_dma_i\n",-2);% Y6 C8 T! ?( K
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- v' x' x& M( A9 R& R
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 G( p, k# y8 i) q3 f) M3 I
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, ~- K6 U/ {# L  y; \2 x4 t

  b/ f1 T" R, |3 Q( S( s    /*等待UPP传输完毕*/$ k6 M1 P2 V8 E. |+ M- N+ f
    //i=0;/ T2 y: F5 K  \  Z
    //j=0;
7 ^& ?3 l, C1 [2 d& u3 K) L    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- Y6 H7 H( v7 t) F5 d8 v& p    {. m5 H! }+ u: {1 {( ~* x2 f" k$ a
        /*  测试UPP传输的同时操作普通DDR数据7 g( Z* s9 V+ s( l
        temp=i;
8 k1 X( u1 a& o! h/ F* V) H- I        i++;% p! T( {! E: a7 q
        if(i==1024)
/ R- x. p# F- T0 F        {( x. n* q. V9 ^0 r& `2 Y6 L+ ?0 v
            i=0;8 g* l- L) N  Y+ T
            j++;
: l- X( l- R* F0 ]; H. m, |- d6 K        }/ ^" u. q% {$ F3 K1 X  a0 q
        */
" F0 V- D  S6 r; G+ B8 l7 p) M5 K& C( T/ Q: F: Y
       asm(" nop");, L# s0 ^0 D- p1 `- |+ ^# k
* C2 z' Q8 N7 c* J
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% z2 q/ N2 L* p0 ^) ?/ X1 q    }
) U- f! N/ F5 ?% Y: o" F' J, V
) \! P2 b: x" c9 v/ {+ ]    /*检查UPP传输的数据是否正确 (loopback modes only)*/" U, f8 }$ \' M/ a. z: j! K4 [
    //UARTprintf( "i=%d\n",i);
0 `8 e9 i+ \: ]" S7 l; Y; v+ ?& P    //UARTprintf( "j=%d\n",j);
* E) U  Y; n6 \* W    UARTPuts("Data mismatch in buffers.\n",-2);: k; X0 |# p( P$ N& t
    if (upp_interrupt_count == 2 && upp_error_count == 0)9 ?  U  ^) m6 L; @0 J
    {3 S' y# x: r& v% h& D& J
        for (i = 0; i<upp_frame_size; i++)' ]" c9 R* H# U+ ~" \
        {
' o5 ^1 F. U, }& }- J  S            if (upp_buffer_a != upp_buffer_b)  t6 M- y5 w' V( R: A  E' r& K
            {& A7 r! l6 n+ ~: i; D5 X6 O
                upp_error_count++;; X& v! u! h+ X+ w6 w" C8 R+ E% F* O
            }
5 t* w6 }/ G0 A+ @2 D6 \# t        }( Z/ P( F- O1 a* e" ]- E6 Y4 j
    }
* N: v6 D1 G+ m; X% B. t* @+ n  F. M4 ~) ^
    /* 报告通信结果*/
, }9 p" w! F) F# K( z9 k' G    if(upp_error_count != 0)
. {& @2 }0 U2 j- M! o        UARTprintf( "upp_error_count=%d\n",upp_error_count);- d' |" A/ U7 [4 u
    else0 p0 u" V$ R4 o1 S
        UARTPuts("uPP transfers complete!\n",-2);- L! b$ h$ j; k) t. Z
: T. l5 U0 `2 n& k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: S' `3 H1 r1 Q  m( p    UARTGets(ch,2);) z, e- o4 h6 a% E
    UARTPuts("\n", -2);
' g) f4 u& }5 L+ N  j8 ^3 T" ~8 _4 K& @8 G# G
    if(ch[0] == 'y')9 @( a1 b) A2 r: K# F
    {
: c- |' I: ]- v        /*打印全部读到的数据*/) k9 ]1 \+ j6 g( b# O
        for(i=0; i<upp_frame_size; )% X. b6 Y4 x" D) A4 d+ [
        {
  _' E7 U4 ^8 A8 D( ]# i            for(j=0; j<5; j++)
6 j% l* R3 X1 r            {
( f; u* l- h/ {8 P& R4 P& g# d7 U                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; \: p. m! w8 c% g1 h                i++;5 n* }; T7 G% d, }! \
                //if(i >= 4096)
, e9 f2 Y9 ~8 U" W9 W3 A1 I                //    break;
! |' Z3 X  |* i5 x4 w6 ?8 W+ [2 W& F$ K- f. M& I4 i" o! ^
            }
( ~& S7 w+ X3 {            UARTPuts("\n",-2);9 [. i0 y7 x1 \- C" s+ M1 ~
        }
3 Y% E) c( C& D1 z    }- F& U3 o& k! t# J, r2 ]3 ^

% [- h# M1 w9 P( j5 [}

$ F8 ~3 C0 t+ K) D- m% l0 f0 X( D( s

( H9 l0 u' T- N- l
, r8 E* b. f- N
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' ^& z0 @9 K) C# j! A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! A' _5 c( n7 Z6 L% `




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