嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- w! P5 [4 @1 _# S0 r
Void UPP_TASK(Void)/ V% m: `- }& c" }* P. a7 P
{- [7 `% K- h8 Y$ l# K

1 C! [7 o! Q: b! ~8 _9 e    int i,j,k,target_int_count=2;' o/ z  m1 c# [# V* r
    char ch[2];* `) }9 a7 ^* n
! t% e8 B; u* C: S: m" H' A
4 s3 P* \) h, B. }

  a* H1 }8 t' |7 I. N; r    upp_interrupt_count  = 0;
2 C; ^  Z9 _& |    upp_error_count = 0;: g* b7 g+ A! o

' P# Y& _4 t1 U+ ^# W    UARTPuts("\tResetting uPP buffers...\r\n",-2);# N$ N% G1 J- f
    // Initialize data buffers
& U! B9 S. j. |: w) \    for (i = 0; i < upp_frame_size; i++)% ?3 O! i/ h: Q! |
    {
$ Q! }$ _( B) w; u       upp_buffer_b =i;
) d  g& `% |3 v, a       upp_buffer_a = 0xDEAD;! [# Z9 r1 V, i& i
    }  d+ p3 B2 ?* Q! z
) f7 p: a0 B" ]$ {% A2 P" e
    //for(i=0;i<1024;i++)
1 ^1 z* ~4 S# _- D    //    temp=0;
  P- I# p( q5 b; X' V; ]# n% B3 q/ P4 d7 S; n
    //UPPReset();
- d; F2 n& M' a- q, [# k% }    /*启动UPP DMA传输*/
$ @4 R# P& ]  b! c    UARTPuts("upp_prog_dma_i\n",-2);4 @; P: O, D& L' l& `9 S
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 f* V) W3 e1 z, g8 `0 y4 t$ e
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 i4 O% N/ {3 h
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 T  H' z* Y( a. P6 B/ Y; {1 I* q) i& E  E; F& T
    UARTPuts("upp_prog_dma_i\n",-2);
) s' S5 O( Z! X+ F    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* Z. m* L4 J4 F# [! x; Z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ R& a. k/ Y9 i% ?( Q8 U
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ S* a  g/ A: y% p/ L

" n' K+ U; |- w4 ?+ r9 U8 j    /*等待UPP传输完毕*/+ C7 k) x) o% n3 [& V$ K# Y
    //i=0;# F9 n& U0 \9 `: F& s$ K
    //j=0;0 m1 L" w5 Q' P2 e
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 t6 _9 D2 P$ {7 k
    {* D& o" ^- ?6 `# u, a9 i
        /*  测试UPP传输的同时操作普通DDR数据) \# m6 Y6 p7 a  R% P
        temp=i;  C" q; ]6 b) A& u) ^
        i++;
$ G' B; v/ m& u; o, p8 A$ m, w- b        if(i==1024), t6 x9 [( A0 s; H4 V
        {; q% P0 p1 `; f* v, L0 j$ |  a
            i=0;
8 L' `, ]+ K" Z, v7 U            j++;
( n4 z, J7 M: w  Y) e( f        }
( G5 B+ i7 R" S0 Z1 k8 V/ d' q        */
" h  d+ S" E! ?4 Z: y5 z2 s
0 U! o' {# L# _2 Q  W       asm(" nop");0 f- l- t/ b# P2 [/ f% k+ a, g& C* G- `

: X8 J: G& G/ j$ W; R- Y7 |       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);. s0 g6 k% ]3 k" w$ A# V
    }
& t# P: @, E8 X. g" r2 J
9 D% B  H' {# Z4 F4 K    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  |8 F) w( A" V2 k! o+ @$ N8 P1 R    //UARTprintf( "i=%d\n",i);
# h% b' T& y9 B' ^8 p# V- O+ j0 Y    //UARTprintf( "j=%d\n",j);
8 H# {4 `8 _0 y5 [  ~7 D# C- t2 o    UARTPuts("Data mismatch in buffers.\n",-2);
& I% X  F, n8 m5 g% K: K+ O1 p0 o    if (upp_interrupt_count == 2 && upp_error_count == 0)  R/ Y: Q8 s( ^% h
    {$ I, W0 V4 P: {" A4 J
        for (i = 0; i<upp_frame_size; i++)
7 C& H/ E; V2 U1 }$ e        {. h8 F! R* `9 @0 ]" {+ H
            if (upp_buffer_a != upp_buffer_b)
/ w( w+ v* U4 ?4 r            {
. ~7 d5 I; K8 H' _0 |                upp_error_count++;
7 K1 o4 H4 ^( F) o5 F6 `            }/ J& V: s8 S4 v% y# P: q
        }; A! K* q* f7 \: b3 {
    }
- k& A- a+ f  P3 J- Y% R& R& }  N4 t. @! u+ K& |' D, b
    /* 报告通信结果*/
1 j, p, U/ N6 U    if(upp_error_count != 0)
# T4 o& g8 ]7 i: P! O! `- N        UARTprintf( "upp_error_count=%d\n",upp_error_count);% y* |" v+ {; H5 }% u+ M$ n
    else
" H; h" o, Y* y" x8 k' ]6 X        UARTPuts("uPP transfers complete!\n",-2);5 |( X, H: r/ l1 w, Q4 I

: |. v7 g" @$ N( @    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
! b) {$ Z) r  h2 U, P8 B0 w4 d1 ^* |! l    UARTGets(ch,2);
* q6 `* h0 Q: x+ y% [    UARTPuts("\n", -2);
3 L+ w& {# k4 h. g8 v; `3 m* g! e5 k: H3 A6 v
    if(ch[0] == 'y')
4 A& N  B- R2 u' j: H    {) U3 k( Z& o: r
        /*打印全部读到的数据*/
+ k6 I3 z# O/ U3 ?% x        for(i=0; i<upp_frame_size; )
* a7 ?2 E5 J0 w% e9 _: @/ v        {
, F2 ~  d: F6 v            for(j=0; j<5; j++)
% u% J; s. s7 m9 }9 }            {  C- q* H/ @* x/ [" z! |
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 S+ c1 [+ P, z0 D6 ~. m                i++;
9 i- b1 f( \2 @/ z# q                //if(i >= 4096): G- ^& w2 x2 I
                //    break;
8 [' x6 n7 |( p, E2 r
9 U- s; F6 N5 C/ U            }
" T4 ?/ _6 y9 d- W3 Q            UARTPuts("\n",-2);
3 G  a, F6 B; s        }
+ J; S! ~: W" z- \    }
; C" X" x4 n# r# ]  Y6 I/ M- C
8 u% u, H/ v& E) E/ j6 q' I$ {" `}
0 R( ?1 d/ Q2 |8 m" t! V

* a* p5 E# [- |/ J# {9 {' T, y% ~2 N) \6 a, T$ N

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& K* L. ~# K4 `: Q0 H5 F# t
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; Q+ g  L7 c8 [5 w/ s8 U) k





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