嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  `5 r4 U- J0 e0 o
Void UPP_TASK(Void)4 o" J; {, I# a3 I3 O! O7 u, u+ M
{  e+ ~: n  B" f9 v6 |$ {
" e' I9 |# w& X2 D
    int i,j,k,target_int_count=2;! y% z" K% k# X% g0 f; ]( c
    char ch[2];4 A$ R, Q2 J8 ^4 U6 B

  q2 B  R5 x5 g; \* b% r8 c+ Y+ F/ R: q, Y  i; h0 U
' k2 K0 v; \; S" I6 [' z
    upp_interrupt_count  = 0;3 a1 h2 S0 d, S- \7 a9 k
    upp_error_count = 0;
5 g! B/ E# ^+ y7 d( O. y# A8 r8 P
    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 ^6 R& `; P+ O& r7 w
    // Initialize data buffers1 U  u, P$ S  N9 w7 m7 m' j
    for (i = 0; i < upp_frame_size; i++)- ?$ c" Z+ o6 j4 E$ r7 v
    {! y; \" l+ X! B% k( e
       upp_buffer_b =i;
6 p1 D6 _1 r! ^# B2 b5 D. v5 U* q% i       upp_buffer_a = 0xDEAD;
+ h# f# S3 N4 }+ p. B    }: l" D* u( V. [: E8 E9 G0 C  m

  x9 Y' y, @. B: U% p0 s    //for(i=0;i<1024;i++)
$ x5 v" D* ~7 K6 @! B/ U    //    temp=0;
3 o; b2 A5 V+ A: m5 f" m9 h& m1 b, d" F* ~$ N
    //UPPReset();
4 ?  _! G, H  \2 D& J    /*启动UPP DMA传输*/
) ]& Q& l6 @; v% ^    UARTPuts("upp_prog_dma_i\n",-2);
& K+ x4 J( [! p$ b! n    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ t8 ^' ?! ?( ?- M, M2 Q- ~9 j    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 i- f& @" @0 J- w    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- @& a" l. o5 V+ I& T
" W3 |) q% w3 v" g. B; I    UARTPuts("upp_prog_dma_i\n",-2);7 K; @6 P- o; a* O$ ]
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! |0 P: u$ W4 z0 w
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* y9 @; Y( e6 u( q- d    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" k% S4 S+ q4 Y
) ^+ \; m0 g" M# d    /*等待UPP传输完毕*/: H( T5 h- L; Z& o1 x% Z
    //i=0;- f$ M( @4 r- U, Y; J
    //j=0;/ t. T% _+ n2 ~8 g) j: t
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 T9 x$ H$ s! J* f    {
! m6 l. a) @: c9 W        /*  测试UPP传输的同时操作普通DDR数据
" I# x- A8 N: D3 ~" U; x        temp=i;/ b; {4 S# w: U" O
        i++;) F: Q  q8 o* d$ V2 T
        if(i==1024)
+ y; O0 s6 o9 n4 p( I  ]7 G        {+ t( a, n/ J9 {% G
            i=0;: n! k) Y: w7 e+ U% p: W
            j++;# L& w( l. P) z, Y/ {9 S% X$ @& x) T
        }1 O2 d) ?) Z5 F+ F
        */8 d" Q; T/ S  u( v0 C1 k. F

; N0 J5 u4 c/ c# |       asm(" nop");
+ z6 A5 W" Z3 N$ p5 L
# e+ v7 t0 E+ @! f       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);2 u6 V, A1 C5 B+ O8 v" N
    }1 Z' n$ }5 B& i1 M7 W2 d
6 L; c( _+ x( Z" N4 O
    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 ?! o8 f, @; V  o& M' x7 U
    //UARTprintf( "i=%d\n",i);
$ U' k; `6 I, h3 i( O2 S    //UARTprintf( "j=%d\n",j);
, u* |9 ~# ^: N6 K    UARTPuts("Data mismatch in buffers.\n",-2);0 z, a/ Y7 |6 _2 a4 e) E  s
    if (upp_interrupt_count == 2 && upp_error_count == 0)7 U, v6 U) Q! y3 V' w
    {
! H9 u$ f- s3 o) e) q7 {        for (i = 0; i<upp_frame_size; i++), a4 `/ I) n  J- |1 t' i: V
        {5 }5 K- Y5 n- d. d5 E# w, @
            if (upp_buffer_a != upp_buffer_b)3 I( E0 |# {! _  L: w
            {
6 V$ S6 N6 H5 ?                upp_error_count++;
1 |! r. E+ h" q* D+ n! a' {            }
2 b) x( v5 d+ P' ~. l        }7 A* O$ |, ^% o) u
    }0 J; ~; o  k. E3 c& k  w6 ~

' K) c4 D; H0 m; {% L. ~* P    /* 报告通信结果*/
+ p$ i0 y. w* Q7 d/ L+ p4 f    if(upp_error_count != 0)
! @: ~$ C* o0 v! ~  H1 X& f. d        UARTprintf( "upp_error_count=%d\n",upp_error_count);
& T6 f" `  {7 y0 w/ K    else, d* B# P% r- m# }8 d1 Q$ m
        UARTPuts("uPP transfers complete!\n",-2);
- I# C0 G* R! c; ^6 x& C0 a
0 c  B8 Z5 O) X, q0 A    UARTPuts("Do you want to print all the data?(y/n)   ",-2);9 Z7 [. y8 w6 b
    UARTGets(ch,2);
3 P9 ]5 m1 u3 ~* C& {    UARTPuts("\n", -2);
# z0 Z, Z8 h3 d& j% X& Y3 U4 M4 |, X8 N0 X
    if(ch[0] == 'y')# }. i" Z9 ?# N+ \! }) Q- y1 k
    {2 C1 j# A( v9 B9 S$ y
        /*打印全部读到的数据*/) ]- n6 E) }% c6 ]: v3 R4 f
        for(i=0; i<upp_frame_size; )
6 |8 ^+ F- e' ~! s3 ~        {$ ^1 L7 ]9 S0 l3 `( r) f+ Z
            for(j=0; j<5; j++)1 N/ p; o1 x1 G' P" d5 L( E. E
            {* r' T' f! g) b/ Z+ u
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);/ s; v1 G2 Y& T6 p3 K" a
                i++;
* h5 I, n" u7 R5 x                //if(i >= 4096): L1 K5 I# ~$ [' c& U7 u1 b$ O
                //    break;7 c0 M8 T' G" a, t$ R) L6 p

7 y3 j) G6 B, E5 O! ~' Q8 [            }4 }' P* P- a6 J% ?! u
            UARTPuts("\n",-2);) j) [' q. h+ H
        }
7 \8 f$ I6 U( g! J5 H/ Y    }( J& v7 k( P  n% A1 v1 @% O! t
  x  q; ?: p8 r
}

% Y& c" {: x) j/ g; j
8 L, t  Z0 _% f

. U% C* c4 W: S  A% G( _5 q) g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" q. I+ W6 s+ w# L. C
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! B2 B) x( v1 U6 O7 F, t





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