嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% J9 k6 F! F8 l, |6 k( [
Void UPP_TASK(Void)
6 R5 t3 w1 p* x/ U  G{
& O4 O5 `; v8 Z; K" H1 |' D$ R. R; u' h
    int i,j,k,target_int_count=2;
# W3 N& I. ^4 \    char ch[2];) ]. _$ S2 {: z1 k. _; g( O; V, W
% h- a; {! y" N+ z$ @  [3 O8 e
/ c) t' I- v( t+ _3 q, B' |

6 t; q2 ~0 [; W; A$ t    upp_interrupt_count  = 0;, B- M5 T! Y/ b/ u/ H* s) N1 A
    upp_error_count = 0;0 F" S% C5 j2 A9 J

5 _; J0 u; P# L- n    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; x2 P8 K7 k/ i    // Initialize data buffers
% w3 p: a+ Y* @% S    for (i = 0; i < upp_frame_size; i++)
/ c4 m/ t# c1 R1 u  E    {
. E4 G( [: @0 [       upp_buffer_b =i;
. [5 H$ h. C0 _) @       upp_buffer_a = 0xDEAD;
& a2 l" q, {. L+ ?    }% }( v6 d8 L8 l6 b& I( X  A

$ K3 B6 z( [6 E9 _+ b* N( c' ]    //for(i=0;i<1024;i++)% y, Z- O+ X, Q6 J. S4 |
    //    temp=0;$ b) o; F( w! U1 [: R' W0 c
. q% S/ q7 n* ?% p
    //UPPReset();! E7 w! {: Z& {& ^8 N
    /*启动UPP DMA传输*/7 B! \6 d# l! _0 |8 D" C; c
    UARTPuts("upp_prog_dma_i\n",-2);9 ?. n8 v9 T0 Y* x1 S
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& A) E4 {! f( [( q, N7 O( A$ Q% a
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  O6 C) P2 c# ~  {/ R    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, M; @' P9 y. `; P( V# b
& [2 j  _3 R" B. f$ T    UARTPuts("upp_prog_dma_i\n",-2);
. J% y( b; E8 M4 t4 @    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# F) D6 \- c- p, s
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: ^# [. H" n9 f% E+ _2 E6 H
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ H4 ?: y: @& B: }% t
7 ]: L) N& {+ _    /*等待UPP传输完毕*/  A  N% J+ m( ~6 i9 L+ T
    //i=0;5 T/ Z; ?: i: v3 y
    //j=0;
; I* o; t% p, [    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( I. [# n3 |: t- A  }8 o
    {
4 J( T; V9 d- q7 @- N! F; e- h        /*  测试UPP传输的同时操作普通DDR数据
$ g) T2 `' s! y8 m# P        temp=i;" q6 }) G! {+ a9 N. y
        i++;. @# ?0 a  }+ q$ s3 X% @
        if(i==1024)
9 x: r! Q5 l' l/ G$ }6 N5 I, e/ v        {2 S6 m8 V6 N' ?7 N$ s
            i=0;( z, l6 }- r! R' T& k! O2 F; T
            j++;
# ~) S  D3 z" S& q& J! J' `$ j        }
6 F5 m1 G) k7 R        *// L; H$ z$ d! p+ K: O

8 Z1 O5 M/ u1 ?& p       asm(" nop");/ O( I. N9 [; n4 P
: O- G+ ~/ G) P$ g+ ~( h
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);3 L4 n7 ?' z3 p* d3 z) `
    }  }  l7 D3 x/ C( a
3 j% C4 P$ R4 }6 j/ p( Y. F$ K3 y
    /*检查UPP传输的数据是否正确 (loopback modes only)*/" p) F* V" Q8 b
    //UARTprintf( "i=%d\n",i);& {% x4 p* M! O/ i2 |9 Y8 t+ l+ q
    //UARTprintf( "j=%d\n",j);
) ]9 E" Q# A6 e0 x* X* f. F! R: q* ^    UARTPuts("Data mismatch in buffers.\n",-2);
' d6 j) w& H) N3 M: p0 ~  b    if (upp_interrupt_count == 2 && upp_error_count == 0)! o' b# o7 a: u( o& \
    {, R8 i* [9 Z$ t
        for (i = 0; i<upp_frame_size; i++)) ?, Y5 }+ [% E
        {- ^. i  R2 I+ ~( Z9 q0 Z' c4 x
            if (upp_buffer_a != upp_buffer_b)2 k  P" F6 ]  a) w" a
            {. w! V& Z% p( r
                upp_error_count++;) E* n3 g& f) f, v5 W
            }
/ d8 Y* ]' C3 O, X' F. X, q        }& L( U% J4 |& r
    }
, ]  l2 }8 r% ?1 X" i
$ m. O& f/ C5 }, m) s- d" C0 p: q" F    /* 报告通信结果*/# U( W5 E8 J+ H. _7 S
    if(upp_error_count != 0)  t- Q  t: ~1 S8 g
        UARTprintf( "upp_error_count=%d\n",upp_error_count);. N7 u& p3 g) B- U4 H
    else
3 j) [7 p9 e% s9 H; c) j2 D        UARTPuts("uPP transfers complete!\n",-2);
/ Q2 i. i: ?0 U- J5 Z" t' l" @8 I9 I: [6 x* t
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 l% j/ Y1 t- ^) u0 ?
    UARTGets(ch,2);
4 i2 A/ x* R" y# O2 _9 k4 v+ V1 z    UARTPuts("\n", -2);
" Y& ?9 x- b. B4 q+ K4 X1 e. }! n  n0 S0 g& q/ i
    if(ch[0] == 'y')
, x" J9 q6 @1 @5 t    {: ^) }4 ?. q- {* k3 o0 w
        /*打印全部读到的数据*/
0 @; L- E8 V# _, X4 ~        for(i=0; i<upp_frame_size; )
  p0 ~% I8 k* r$ ~; j* k        {
& M, Z( z5 W9 U+ |            for(j=0; j<5; j++)9 u4 c& x! N7 J* O7 Z' Q: D
            {* Y$ a" u+ J- E( U1 B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 w" p! {5 h8 C8 P1 u* ^2 o( r
                i++;
* O6 A) x5 O/ T5 v; ~                //if(i >= 4096)& ?- O" P5 l) D1 N9 V8 j
                //    break;
7 r& {) q3 w- R8 @4 L/ [4 t$ j- p8 \1 J8 y& S
            }
7 e+ h- w% m' y            UARTPuts("\n",-2);
( u. `# Z: b) {5 x        }6 \% Y. p( ~6 N0 Z) c- E
    }
3 p" v; ^4 H* N# Y6 q3 j( ]- ]5 Q8 a- L4 ]
}

$ _8 m( b" _, c, |% s6 ~# [

' q: m3 b1 @- u* j) v+ g% n, [) n/ C/ s

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 K! F- Y& v5 q3 {
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- @! [5 n5 p$ g0 i& s




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