嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 ^3 K# K" I+ S9 S* V4 g8 M9 U
Void UPP_TASK(Void)7 @4 T* {1 q8 _$ |2 D  ]
{" @, u8 M7 L& h  |3 _# t0 j
4 F7 p& j# w; u9 J" x7 n
    int i,j,k,target_int_count=2;6 B% C. h( O2 v9 E8 O) h. }
    char ch[2];
9 X+ I( K' }. F- N- y, j; ^, I+ L- m* E
3 C9 W0 S4 `$ Q# x  K! e
% k, h3 a* e5 n" O$ o# v2 \
    upp_interrupt_count  = 0;: u3 ?- Y' m5 O
    upp_error_count = 0;% p3 A  z$ {) |
- c5 {7 S' k( U/ o' M
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
& V* {4 _% ]0 ^3 y: \    // Initialize data buffers
2 z' F! n; R; Z! \6 }( A    for (i = 0; i < upp_frame_size; i++)- q0 G; G6 l' b$ t
    {
: g6 R- H' g7 F( _0 J/ Y$ f% C4 a       upp_buffer_b =i;
) N2 W4 L4 T* h( h       upp_buffer_a = 0xDEAD;
' U4 {9 A$ ~# \" A- U: X    }4 Z2 N5 T  [- ?' n6 @& R
- J$ H+ E& I6 w5 c+ {) L
    //for(i=0;i<1024;i++)
3 A3 Z1 w, P( _# s    //    temp=0;0 E" i6 ~, g& t! ?- k6 d# ]
, P8 n7 U% ?6 B7 u& h. f
    //UPPReset();
: W+ }; Y- B( S1 P0 T8 A  E4 l* B8 }    /*启动UPP DMA传输*/
# M4 W" B% R7 K6 [8 H    UARTPuts("upp_prog_dma_i\n",-2);
" y9 w! F" ^1 v' f% z; y, m    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% N+ y3 ?) Y* y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ Z7 a6 b& q; d
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. L( w( L4 ?. u4 O( h# Y# q7 M& P4 i
    UARTPuts("upp_prog_dma_i\n",-2);
- y; U0 w- u' w$ {4 B* W7 B- c    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' m  s+ s9 ^4 J/ R. B
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 y2 W, a' U- Q* {
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);. P) S& U. ]2 @! W4 [
7 ]. _8 ^! o5 g! z9 B
    /*等待UPP传输完毕*/9 V, e4 G4 I: t( }) H1 z) z
    //i=0;
* h2 x% `" Y# z3 _% [9 P- z    //j=0;0 j- e" J- g; P
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- Q( h+ `, p& S2 g/ K1 J" W
    {
$ r% _& k% G) G& s; |        /*  测试UPP传输的同时操作普通DDR数据: {3 N, f2 o1 [5 u8 r5 d& P* q2 j# ]
        temp=i;: I/ N5 ~7 n- Q
        i++;
6 j( m9 d  W# N0 K. R# E, B  ]        if(i==1024), n2 n6 Q# e1 a  B( l: f
        {) h. E; O# {/ u5 K6 e- q, j
            i=0;' D" G& P# _2 L% I3 f) }, ]: n
            j++;
6 w1 W8 J* I- x) j2 w        }# }! _; f3 ^8 F* t
        */
2 K: ], }: D; M/ j% i
" t5 _* I: n8 m8 h1 Y       asm(" nop");
- @$ w$ }* `, Y/ X0 e/ A) y& c: ^: O0 x" s  B8 i
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 f: }5 L! a4 E4 e, ]4 f" L* D# s
    }
8 P# ^' a; T# V7 D, p0 ?) S7 y: @, {! G( C; N% {8 H% z
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
; H% \1 J% u2 b: i1 n    //UARTprintf( "i=%d\n",i);6 K3 i. P9 p" ?( a8 i; o
    //UARTprintf( "j=%d\n",j);: g2 I8 m/ k, U# N/ b7 H
    UARTPuts("Data mismatch in buffers.\n",-2);- [( [& u( C! W+ s4 R8 L4 i
    if (upp_interrupt_count == 2 && upp_error_count == 0)/ d* ]: u6 V8 v) J6 K
    {9 I. ~2 l* F9 o, Q8 W1 d/ x+ h. V
        for (i = 0; i<upp_frame_size; i++)$ M4 G# V  {+ @% s! Y; }
        {3 D5 t, Y$ Q9 w( y: n6 P
            if (upp_buffer_a != upp_buffer_b)
! W% s& I2 n9 A/ X$ Z; t: z            {# r- R9 `2 \. X" Z5 x; P
                upp_error_count++;5 T( A6 l; r  h9 e* Z. j7 W
            }& v$ T! d& k- `' U, A
        }% |1 F0 W0 D0 t& f: G! m5 Z
    }
, A7 A' j$ F8 x8 f4 T$ l- M# ]7 ?" W3 M. U1 v, e- D7 R& z$ \, ?
    /* 报告通信结果*/: h5 d) g* s4 x( }3 `1 Z5 R9 ]
    if(upp_error_count != 0)
4 i5 H/ ]6 F7 b/ C; w        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) [+ H+ G0 C& Q8 n8 o4 L    else2 o* Y2 J. V- w" x9 L8 z6 E
        UARTPuts("uPP transfers complete!\n",-2);
* W' y, u& w* j; ]! j4 {" q
8 @$ y' i6 {3 q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) b' \7 a2 w$ e- X    UARTGets(ch,2);
' ^+ R% x1 t2 U    UARTPuts("\n", -2);+ N. G# k/ t% U% n$ O: h- q

% O3 N, Q# Y4 B* _: y8 L1 s- O    if(ch[0] == 'y')$ w' ~5 L4 [& P) V3 S
    {
9 Q/ q5 Y- O8 q3 ]2 Y; c        /*打印全部读到的数据*/! x8 U9 X, d7 e" z9 b$ B/ s$ P0 A
        for(i=0; i<upp_frame_size; )! F( G5 C0 z/ a
        {
7 H! U8 _1 Q6 J+ w8 C; }            for(j=0; j<5; j++)# w6 a$ y% r0 l' F$ @6 U
            {
1 D4 N* ^* h& c2 \                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ |4 t4 s/ o" o( q- z                i++;
$ A1 k. w/ u6 H6 r                //if(i >= 4096)
% E* l: s, D, u% f, |6 a                //    break;- B! y. L  [; y( v. K0 q* M

* E- v9 a# A8 m# Y/ o1 j9 w* F            }* Z  f5 V" p+ h! m& F, o, {
            UARTPuts("\n",-2);
: I# b( N! P7 T4 Z2 f* X- o        }+ u$ g) U9 G& F+ F& |! t
    }2 m4 ?0 p8 Q- t' p

% {, V1 s2 p! e) {0 q}
6 H4 Q5 u+ G' X  e2 y1 ?% n( f
& w  Y; f3 }: e) |% E- x& x

. R4 F+ P- C% {( D
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! b1 U5 {. B; o7 \0 U

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ P8 a) \2 m4 o+ v4 L




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