嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ n1 G4 k3 `" S; N  F' `. A
Void UPP_TASK(Void)
* W; o3 i) h/ |3 I( X5 m% p{. B; l; }7 N7 g8 q6 L: U7 u" X

) R6 q' F2 Z' W9 U    int i,j,k,target_int_count=2;6 B, m! b" u0 J. Q7 K9 H% L; [
    char ch[2];+ {4 _. K* l0 h# Y$ x% e7 p9 m" {
2 F- l9 m( f* y' {3 {
3 h+ F9 {) B  X9 z. s

, P; I% K% q% Z! z  k/ V$ F( d    upp_interrupt_count  = 0;- t! [: E0 h& V/ l+ y5 B/ b* q
    upp_error_count = 0;
/ I. e% o" k+ m4 a. O) o
2 I5 {$ z9 @; t6 l+ S2 }) k" B7 a- ]; ~    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 F% u# r7 \( V6 _' n! q$ Z    // Initialize data buffers
% e' U9 y7 h2 G" J) R# Z    for (i = 0; i < upp_frame_size; i++)7 M% C0 y4 c$ j
    {" O- |9 k+ P  ^' |1 l7 B
       upp_buffer_b =i;
& a' n% T- \8 ?# i8 }& M       upp_buffer_a = 0xDEAD;
" j5 t) V  ?' Y6 _: y4 f    }
- `8 E1 D, _+ }% ^+ t
. {* S* t& [6 F/ W& L; {7 C    //for(i=0;i<1024;i++), f: |: d  Q( m! K" @
    //    temp=0;
. F, e( m% j3 G) }* j0 e
* y) x! M0 l6 @! o  ]    //UPPReset();
) B! n; k' k0 J" P% J    /*启动UPP DMA传输*/( O- I# U& S" Z6 r* g, H
    UARTPuts("upp_prog_dma_i\n",-2);
. d' a0 N: R: G% P    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* I* r( O0 C4 K* o, c
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. v0 m6 O) W0 x2 o    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) j& [% @9 T- j7 v) z7 X$ j+ O! W; K  c3 p, @
    UARTPuts("upp_prog_dma_i\n",-2);: b7 j0 b# ]4 C6 I
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) I, e3 Q7 P7 d6 M- K  R
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: h3 W; `; T# t: W. t1 A# r  p
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" w7 O, e- U- F9 |) {5 D3 ?8 s  o( k  ?! E2 ]/ d
    /*等待UPP传输完毕*/  t, b6 Q0 v) [- x- l( x
    //i=0;
7 ]9 t6 H* j1 f0 Y  u1 |    //j=0;
" h% s# t2 U9 I) E( N    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 r8 S* K( ?" }1 W- Q9 g3 C' F
    {) c" l6 ~$ k# X0 Z; n8 G/ R
        /*  测试UPP传输的同时操作普通DDR数据
9 l8 D6 n* ^/ o        temp=i;# o' N# i7 ^3 \! E4 g6 V
        i++;9 S! j- F5 _9 Y5 I) @
        if(i==1024); |# o- C2 E4 f* L# m
        {
6 _5 x- J$ ?# C% U- G. u            i=0;6 u% J/ t0 a. j
            j++;: L$ ^) J  D' K: I9 t7 d" j
        }
& A% w5 I+ K; p6 N        */
# I* R4 y& h. V  D, _* k* M- _. X5 T/ X3 r0 m2 r
       asm(" nop");0 [# w5 Z- g: P; \

8 p/ E1 }4 o4 V       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) o) }2 \3 C1 u* Y( E" b0 v1 x, F% g
    }) ~- p8 n! m5 M# @7 }
* c, a( g; }5 h1 d
    /*检查UPP传输的数据是否正确 (loopback modes only)*/; |' o, B* G' V1 f$ `" u
    //UARTprintf( "i=%d\n",i);% m, \# X4 Y5 r' @0 ^1 Z
    //UARTprintf( "j=%d\n",j);- R' I1 r$ }% k% S4 M6 Z6 S% h
    UARTPuts("Data mismatch in buffers.\n",-2);: [' l- p% w% h# I& v) b" a
    if (upp_interrupt_count == 2 && upp_error_count == 0)+ d9 x  K" \1 ?% S1 h& J/ z% A
    {( E  F9 w0 n# w% R! v! |/ h
        for (i = 0; i<upp_frame_size; i++)
' y- k% b1 |* e        {8 p$ |( g+ {. k: T
            if (upp_buffer_a != upp_buffer_b)
) q  o% J  D) ]: Q! j! |            {* i9 b! e: ]2 M- I- n& k
                upp_error_count++;$ |9 Z8 c# @% ]( p! q2 u
            }: J6 m( \: q7 w* j0 Y$ W; V2 p" c0 X
        }
5 |* E( j: B/ [: `3 w    }
' K/ R4 ^/ d4 h8 M& p8 x# V, o1 b
+ r5 |" f% n6 p8 F& W7 j, h/ a1 b    /* 报告通信结果*/; s' Z9 o* i* G1 D' B3 I
    if(upp_error_count != 0)
" ]: @/ [9 j" g4 V        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 y- T# r, _2 W3 R: g    else
" S# M5 w) `' Y* S( C5 o) a        UARTPuts("uPP transfers complete!\n",-2);0 T1 y* C" W+ J+ e! R" ]
4 K  r& a' [- C! T# M0 ~
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" K& f3 [, n9 o  y1 k% y/ `6 b    UARTGets(ch,2);
. Y- d; c. R2 i) _1 Z  ?    UARTPuts("\n", -2);
, Y6 Z. a7 K7 t. ^, l0 H6 e/ c7 X! Q9 p4 }3 [& n
    if(ch[0] == 'y')
/ {% }% }3 w5 ~& N, A    {
$ p+ a* [# P2 s; R1 s" p  D* U        /*打印全部读到的数据*/$ t& u# X8 m; F
        for(i=0; i<upp_frame_size; )
7 L1 z5 y) w$ }; i# Z  `; }        {
. @# Z" ^. Y4 w, d            for(j=0; j<5; j++)
3 D: L8 h5 d" `5 j8 [* X+ p. D            {
( d0 J, D2 c7 x9 _) _+ ?) J: D                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);: h( J' Q1 x+ `1 s
                i++;* }& Y" U3 Y  `: z8 A6 d
                //if(i >= 4096)
& G8 d  p2 u! S# a% e6 v/ S                //    break;) `0 G1 Q2 {- a+ O* k: p2 D

# c7 h1 S' M7 p3 \0 ~  ]5 `            }
0 T+ O* M9 C) a& B, h& Q; V            UARTPuts("\n",-2);% U  C: J! g. M8 g$ S- j( u
        }
. S4 G+ A* {1 }$ R9 v4 W, x* I/ Q3 s4 i4 b    }
; R& Z1 A, s% N4 A& R' _& _$ G7 K! h% X3 x. U4 J! @0 r: R
}

; y3 p. }1 Z5 R
9 V4 Q# D! y4 W. r
( _7 h; ]+ f1 F2 h$ W4 N$ G! w

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。; q+ @# E; t( Z7 e2 C1 j

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- k5 [+ K- A# I) A+ C( V) z/ B





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