嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  ^& U) S1 k# u1 W6 b: p, u
Void UPP_TASK(Void)" v& O& e6 K0 ?4 A/ c
{* h- s" k8 y5 H
+ q+ `5 S2 y8 ?8 k# R
    int i,j,k,target_int_count=2;
3 \& u0 G; f$ d/ y. Z; G    char ch[2];3 X4 P% {. t# x$ f6 r. B& Z# m' E

# `1 b. M4 s; m4 y
4 [7 v# b% F! M
" I# b! x" `: ?/ _, y# E& H& Z% b2 T    upp_interrupt_count  = 0;
2 D9 X, ^7 \1 C* _- j+ C& e    upp_error_count = 0;
! M6 E+ B( a; h' d* n" }* u
  Y4 Q! [& u  Q3 _; j, D4 T9 W3 e    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( [0 p. r' L% O1 f* L% o" a- o    // Initialize data buffers6 y: @- t# i- C. N
    for (i = 0; i < upp_frame_size; i++)+ r6 {( J% K" s( `+ b2 n- L
    {7 A9 `7 C2 r/ w% E
       upp_buffer_b =i;7 e4 P% c1 \6 T( s3 r
       upp_buffer_a = 0xDEAD;9 F: _0 u0 Q& Z8 C. j4 _
    }
5 `# `5 N- w4 f" u3 F5 e, M; ?: D7 E) C8 H5 Z9 K% u
    //for(i=0;i<1024;i++)
) m' M" E+ L  ]. i    //    temp=0;6 F7 z2 i0 y4 i7 r1 L

, D# b6 c7 V% \0 R; S( K8 U    //UPPReset();/ x' a4 A" D8 i3 p* X2 U
    /*启动UPP DMA传输*/
/ W& e' g; ^7 }    UARTPuts("upp_prog_dma_i\n",-2);% s0 U* r% M, _6 }. W
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 |5 K! @5 z/ J7 H+ h8 v    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- ]& S. s) L+ C' }, O9 [0 ~    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% D. _! Y+ t4 G7 Q# u

0 G! W, k& V% @+ i! m6 v4 m! p    UARTPuts("upp_prog_dma_i\n",-2);9 i( d- C: ^: p- ]
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 J% l. Y- e0 X% r# {0 m" |( s, ^  O    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- t; T* \; g, K3 D7 C0 S
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! j0 f  S" O8 B6 x& g/ f% Q, D
. E$ o! q5 c! ]. @: j( z% r  q$ W+ r  }! f    /*等待UPP传输完毕*/! ^' i3 b$ U7 d% z
    //i=0;, W8 g4 T6 A4 l, s" i2 r! C6 s
    //j=0;
5 j1 z0 ]9 Z9 c" V5 {6 H9 n    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# z% \8 a8 Y! S! ]7 @$ b
    {
" R; o6 T. ^- n# r6 B        /*  测试UPP传输的同时操作普通DDR数据2 k& C3 n1 b* d& q% B  i
        temp=i;
' O8 x' p; m# V' `        i++;
5 h2 w5 l. d. s/ q        if(i==1024)
. J! |  N: H6 s8 A        {
, D( n5 j6 `( ]+ F. Z3 {; Q            i=0;' Q( E& I$ ?6 G7 g* ^& J, `. M
            j++;
/ S5 d, W% e1 A( F& @" C0 W  Z        }( R8 w6 k: v+ R0 e
        */) n* k: `+ q3 c. ~( e
, O  P2 Y. j2 `* v7 \4 f
       asm(" nop");
: r1 [* h8 u* i  [* d; ~/ [8 F( f/ a& S
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 y6 |. Q0 ~. o* k    }8 ]$ x8 [' X! l- V# b6 t/ Z) d

  y/ `8 _9 L( @- ?! O5 b: Q    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 O7 T$ W  U, G( D0 E% c. Q    //UARTprintf( "i=%d\n",i);9 x! A$ a  G2 h* O3 b0 |
    //UARTprintf( "j=%d\n",j);
- e; M: h+ z$ m" b/ F' ^    UARTPuts("Data mismatch in buffers.\n",-2);2 B& T' Z. m0 j8 d* M6 g! D; L" X
    if (upp_interrupt_count == 2 && upp_error_count == 0)) p; q; u5 e4 O! n" i# A
    {$ q) w0 E; d3 [. [
        for (i = 0; i<upp_frame_size; i++)! J# O5 ]7 e! \( i, u" ]
        {, K: B' F: U, U
            if (upp_buffer_a != upp_buffer_b)) F; t. s3 i. s* D  z' x
            {9 |, M' I* g- N. |' G
                upp_error_count++;
' j. n8 \7 k9 a8 b2 @. }, {. |: k$ }            }
" R* S# j" d0 z0 O( L        }3 G+ c9 b8 z) K1 ^1 |* f" ?
    }  d; }+ A- \7 q/ C
8 l7 Q* s8 g4 e+ J0 ?$ N
    /* 报告通信结果*/3 B. C" f( |# ]& L9 Z4 U/ z
    if(upp_error_count != 0)
, o" M- ]1 ^/ B+ G+ y9 q        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ T7 R% D1 w- ?3 S/ Y. H. f/ L# ?# ?
    else- b7 O: S4 {6 @0 b4 @$ e# Z  |
        UARTPuts("uPP transfers complete!\n",-2);
7 D: ~& ?; R3 s2 F6 ?3 v  }
# H3 {3 _' i3 R( K5 b    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* z8 }6 d9 k0 u0 x3 m: m7 A
    UARTGets(ch,2);
  J: q3 o) O4 b6 q( u( o9 {    UARTPuts("\n", -2);  F# o3 q; q/ @) {! o  J% G* F% `
! g: g. J, F( q/ S) n% `8 I% r, e0 W$ Z( ~
    if(ch[0] == 'y')" I: z/ M$ L( u, Q
    {2 d) v' y* u9 x& Z3 ^) U
        /*打印全部读到的数据*/
) r7 M5 A% L  N8 I8 {* U; X: ~        for(i=0; i<upp_frame_size; )
' y; m3 D( d/ y: i: Y        {- c5 G3 i, j# f: {; h
            for(j=0; j<5; j++)
! X, ^5 ?) s# ]            {* h9 K( w% D3 n; m) x: O5 a
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. ?* ^" l4 y  c2 E. Z& {8 V                i++;
- A5 h( e, l- Y; o  r- s                //if(i >= 4096): u0 I( S% n$ I: g9 b
                //    break;
9 W# b4 q* N0 ~2 a$ i+ r. @
( C3 g/ C4 V$ `9 L; W( B4 u            }
9 @- J9 _. o1 t; P1 W: b" C- M. B            UARTPuts("\n",-2);4 ~0 l/ q% M' @4 c' v5 p$ ^
        }
+ H! F9 F) [) `" V/ ]- B    }
- e0 W  y+ Y$ J/ Y$ g2 [( ^
0 v3 A, a. p. b* G" l4 [}
& @" G% F4 y. @
, t$ L" S% I1 K  f( S/ }
, O/ x/ b) U5 L" x4 M/ b( ]

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 Z+ G6 |& P6 Y0 A8 D' ]
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 n# H1 h. D, |! R




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