嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' x( L2 ]4 z% m7 c; ?
Void UPP_TASK(Void)) G# }# Y' p% N- U2 s
{
* }5 p& \( }) Q9 a5 n  ^; c# I8 S& k+ U
    int i,j,k,target_int_count=2;, R$ A5 v+ \2 j/ X
    char ch[2];, r  _6 f. i5 c/ M: M
! V9 u7 }) o4 R. w0 m
* u# }/ K2 p: A& ]: ]3 @

8 ~5 V1 Z. r7 ^9 `9 J4 [8 T    upp_interrupt_count  = 0;
/ ~  b) S6 S9 C# Y) i    upp_error_count = 0;' B) @( R/ ~- }) q, z! K

3 c/ h" j$ @( r    UARTPuts("\tResetting uPP buffers...\r\n",-2);# ?- a3 H4 R% R! q3 u5 Z9 q  Y
    // Initialize data buffers$ w" X. g( l6 @3 \6 d, X
    for (i = 0; i < upp_frame_size; i++)% a1 O! O5 @. Q
    {
2 Y6 A( P8 F8 T       upp_buffer_b =i;! B( \) I, x1 A* N# \
       upp_buffer_a = 0xDEAD;
  i* I; S6 u1 ~8 [% B    }
0 F5 O$ L% N8 ?0 A) j0 M! D' w3 w# d- T2 I/ G
    //for(i=0;i<1024;i++)$ W. |" x3 g3 D: e% q: P6 z
    //    temp=0;, E4 _. Z  u0 G/ r+ _
8 V% v3 [0 E! D
    //UPPReset();9 i* I' M! q8 g- R
    /*启动UPP DMA传输*/$ ?: ?% q4 F9 z' j, L6 G; k/ E
    UARTPuts("upp_prog_dma_i\n",-2);9 k% @2 ~; e7 ]
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;; t' [( q7 U3 s; C3 X
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ i' p3 q  k5 M
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 `1 O' J. }( `: M& _% ]# x
% V& t6 A) B! ?+ m/ E- x* H
    UARTPuts("upp_prog_dma_i\n",-2);* n. b+ E& v6 X/ [0 W) r
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 b5 ?/ W( S9 t9 i+ H    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 c& F/ e, @" B: c8 s) E9 k9 H: _
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 ^# j# |5 i# ?$ g+ p. o! g+ X. |7 B" B  U5 \. t% h' l, Q+ ?
    /*等待UPP传输完毕*/
# e) g9 C1 _% H$ l    //i=0;
9 x4 U8 }' E1 {5 z& N% }    //j=0;
1 t6 }3 n. R" a" `  x+ Y4 M: x    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ s1 `2 b% I% {6 s1 B+ l
    {4 ^* q9 B( R4 q9 g# f
        /*  测试UPP传输的同时操作普通DDR数据
7 j8 l* w& P8 I; q+ I1 x' R        temp=i;( a1 u) F9 }5 ?. G( O9 H3 j) V" g7 G' q
        i++;
& Q! n) L7 m  `! ?        if(i==1024)
; I- i! @1 \! W- E; q        {
" U0 H. y0 t3 C4 s            i=0;
: R$ Y* x  _# O& ], Z: v3 C            j++;
! \0 m: K" v6 L" L- r2 Z  i        }
7 Z* G( ~9 G% o( Y7 h. U. T        */
+ ~7 @2 K5 N! Q: {' R
" s! B4 ~$ g6 F! F6 `0 ~2 ^       asm(" nop");- u. @) ~- a' O& e4 d, {
# j8 R, J5 g* ]( @7 u0 s
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ C! o; C1 X, k2 n' @  P& T
    }8 v/ I4 m& \6 E" E/ O
% d1 D  j0 ~. k" @' t" V1 W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ \' N' o6 v( Y1 |. M5 {7 C
    //UARTprintf( "i=%d\n",i);  a* W$ u0 k. h' o9 y
    //UARTprintf( "j=%d\n",j);
+ {& G: ^. |! s  g    UARTPuts("Data mismatch in buffers.\n",-2);9 z% x- u, z. B. J3 M/ o
    if (upp_interrupt_count == 2 && upp_error_count == 0)0 D7 c; p8 U% Q; ^3 O
    {  E7 M/ N! J: e3 [; i& P
        for (i = 0; i<upp_frame_size; i++)5 a8 N, X6 }, E3 R  _
        {" E5 y& f5 H! ~
            if (upp_buffer_a != upp_buffer_b)
  `( P; Y, A8 R( _, |            {
+ Y, }% f9 K1 Y& e0 l                upp_error_count++;+ b7 ^+ s7 {! A5 S, J3 D& s) A3 T
            }; l6 H, R9 j1 E; ?. d" e
        }5 E& s0 x% ], K- o) V) s
    }
( B" m) \7 ?- g" C+ ~8 S/ e4 d1 [6 h# h
    /* 报告通信结果*/
: o+ `% ^/ t; D# @+ k! `6 E4 P% H    if(upp_error_count != 0)3 z/ J) v) l9 [; F+ u. f9 K* @
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! [8 H& n) ?+ F: l    else
( `) f2 m3 B" c        UARTPuts("uPP transfers complete!\n",-2);
+ o+ j# O( c2 u! V" n: m3 f
/ u) Y/ K7 J3 I6 D" U: v! r    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
$ l, K7 Y3 Q% w    UARTGets(ch,2);
: [6 D- K0 ]: l    UARTPuts("\n", -2);
& A3 X/ q  n0 t8 X/ I* P" D' i& D' y  R3 e9 h9 H- O8 Z4 A
    if(ch[0] == 'y'); _  a: R1 U* w
    {5 G! k" z+ E! s% M) p4 Z2 P" n
        /*打印全部读到的数据*/& V# G& `; t7 j8 T) U# i" n* w( v
        for(i=0; i<upp_frame_size; )
5 P; R- l2 }2 r        {
$ @8 ~" u/ u( u9 W) F$ Y" K3 @. H            for(j=0; j<5; j++)% E3 s+ N! d0 `
            {
$ x$ N) A2 h5 e6 E                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  ]5 C* M& A& D& f, S% n' B" y0 p+ A
                i++;! R; }7 h: M3 q  f! \0 W) o$ v
                //if(i >= 4096)
  h/ y- Z5 r3 E; r( O                //    break;
* f1 r. X3 z. }
" x+ u8 M0 C% I/ k* D            }. ?3 D3 _" S/ Q! Q( p+ N
            UARTPuts("\n",-2);
$ h4 W: ~" j' U& S! y) o        }
$ _  L' _) c2 j9 d9 I, ^3 r    }
" }& g# @, \2 B% A0 O  A
1 e1 L1 T+ r- x2 h}

; ^2 U' r1 A$ h1 \  s+ O  ?

! g- _3 z: e# G! E2 f) {- f( v/ ?7 w  H: D  Z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 x# N1 w4 q, u/ g8 H% E
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- p4 w% W! ]4 I: T. U/ Q2 R




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