嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?0 L/ R7 k: e' ^0 N( s' _
Void UPP_TASK(Void)
' v" T  X0 c: ~& @{9 R* \9 O, e! I

, N9 {, N3 x) C2 v7 s    int i,j,k,target_int_count=2;
% U" l. O0 M# o6 k7 ^, Q" M: @' @+ N    char ch[2];
$ ]: x3 D, Z6 f; v! x2 R; r, H4 t* d6 p

" G9 {: K; x) ?% n7 B- ^. t- N7 s% s; @: s9 W
    upp_interrupt_count  = 0;
. b* i9 K5 j& M2 `    upp_error_count = 0;" J! E* t' I9 n2 T6 w1 C! O

$ b' A9 F  o9 p- d4 p    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 D! [: c. Y/ [
    // Initialize data buffers! B7 J1 u9 m4 ^3 l
    for (i = 0; i < upp_frame_size; i++)) r0 [" n* D5 M' g& C
    {& o* M4 i8 D, u/ M
       upp_buffer_b =i;/ y! L' t  Q' I
       upp_buffer_a = 0xDEAD;2 E4 _5 j9 e& _. M5 e6 s9 {0 p
    }
( F; S! |+ x6 f( Q9 ?* U
! P8 L) B7 a2 i' i" O    //for(i=0;i<1024;i++)' V/ q; e( r/ E+ A' ~
    //    temp=0;
! f' u. d8 J9 E1 j, G# g
# O" c$ i( {& E0 `3 K9 U1 T% _    //UPPReset();
2 i5 N* ]7 u9 J* `    /*启动UPP DMA传输*/
" Z" o/ Q! ^8 x2 o. Z    UARTPuts("upp_prog_dma_i\n",-2);- q4 y9 P5 ?$ `1 w+ W, C2 X
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 u/ k8 Q- z* K4 K  s5 q/ W+ Q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" A( v& Y% d* ?" a    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 r$ n# v9 _4 r; S4 V9 S( ^2 |1 C8 s3 h
    UARTPuts("upp_prog_dma_i\n",-2);
( A: N0 a+ O8 t7 q* B+ d2 n5 a    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. F9 c; E+ `$ R    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 K( K; _* j" w: C7 y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" j2 ]6 l1 Z. |- P2 ?  {
9 q$ e3 Q2 [+ Q
    /*等待UPP传输完毕*/
; _# q: M: k6 b* p! j: k    //i=0;
) f' {! U. N" j* f4 C! a2 F    //j=0;
( J* N" Q. h5 ?( p% c* h  k) m    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 j" u6 y0 f7 Z" o# z
    {) L( j4 `7 ?/ o6 C0 \
        /*  测试UPP传输的同时操作普通DDR数据. G, X( O5 T( T4 }# T3 {1 q
        temp=i;
7 j5 O" \, I9 P2 z; Z' Z/ b        i++;0 Y& l7 M* N$ ?
        if(i==1024). q# e& A" E# K- w0 m" l
        {1 _0 N9 y4 v7 n3 s
            i=0;
  {& ~$ `2 S  Y) P            j++;! Y4 X( A+ k, X5 N% i
        }: m$ l) H2 c8 v, g8 O
        */
* N7 ]; ~4 u1 ?" j# U% S
: h1 i" }" {. h7 h       asm(" nop");9 m6 ]6 \- t, B0 N' p, i
5 y$ z& H2 A% T/ Z9 i& A+ s
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 @; g7 t6 m: S. c    }: k. p7 G2 P2 o7 U$ i* ~
7 r- T" v) T: G
    /*检查UPP传输的数据是否正确 (loopback modes only)*/$ i2 |7 t) r" ~
    //UARTprintf( "i=%d\n",i);4 s- U/ d7 E' v4 z- @' B# a
    //UARTprintf( "j=%d\n",j);, `9 I/ M, d$ J4 z
    UARTPuts("Data mismatch in buffers.\n",-2);" K; k) G5 {& f7 }; m& A6 y
    if (upp_interrupt_count == 2 && upp_error_count == 0)! K) q# I; U3 E3 F5 `  u* l
    {8 s3 X/ m0 m: n# I, Q
        for (i = 0; i<upp_frame_size; i++)
  I: M, n2 z/ J9 D9 @' r        {
0 Y2 e8 Q' d' W# K/ C: y5 S5 x            if (upp_buffer_a != upp_buffer_b)* ~: d: ]5 K9 @1 {
            {. D5 r) i& R  R, f" H" @. q9 `- E
                upp_error_count++;
% h4 ~4 e! y* N/ P            }4 Y2 u6 [2 v8 n3 t, W0 h6 z4 W
        }
) A9 L; v" g% k- Z7 O    }) E1 U+ u7 G0 z& _$ Y" Y

6 F& _, Q8 I$ U$ e    /* 报告通信结果*/6 f  r# G% Y3 y6 W: r6 M9 {
    if(upp_error_count != 0)
' g9 V. G  C* L        UARTprintf( "upp_error_count=%d\n",upp_error_count);
" `3 t4 _! [# _  v+ A    else/ I! m. O: Z) n/ V7 }
        UARTPuts("uPP transfers complete!\n",-2);
; K7 E( @4 E- i
& C7 o) q9 |9 }3 t0 g, T    UARTPuts("Do you want to print all the data?(y/n)   ",-2);+ Q4 X4 ]' H  R
    UARTGets(ch,2);
2 ]- u, x1 ~: G$ M0 Y: f    UARTPuts("\n", -2);5 p% ]  Y# {7 h& z2 G( s  t

3 ?/ V4 A9 _' d) `" n; N: m    if(ch[0] == 'y')+ w3 Q9 e, x! Z' ]9 a% r: u
    {
# t6 ]' N0 I* c; ]: f+ _        /*打印全部读到的数据*/; u- z+ }( G% @
        for(i=0; i<upp_frame_size; )
9 {; I' D' f1 u  ]) f        {
4 o0 {) E5 e; x) E' u            for(j=0; j<5; j++)# o6 o" r) h& }
            {+ k5 C& t& K0 E; R' ]. r
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( v" D; t8 ]  u
                i++;
+ j. n4 Z, N1 b                //if(i >= 4096)
$ N- N+ R4 ]1 e. F$ I5 X0 G                //    break;9 w+ I* l% W% r# |) j# x; t
4 X2 J: z8 B! U6 n9 s
            }7 I2 ~3 f7 K7 M& {" f
            UARTPuts("\n",-2);6 U$ Q" I, [- U
        }
) l4 \. u8 J  G. {# i    }; c1 r, P3 S: {9 j* X

, R- G; f+ q0 T% }5 v}
: t2 U2 |9 J" W! e$ j

  S% q& Y: \8 H+ {
9 F0 z9 L6 @; ?; d( Q$ y8 T% z% m
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& t4 o4 q! y( @4 H2 x
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& M/ n+ M; E, u$ o




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