嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?+ p$ e& T! r6 G1 i: r
Void UPP_TASK(Void)
5 ^# E+ o7 c8 d) X1 D3 _{' @+ F" t4 [# i; i/ q
& Q" U' D4 C: h6 o
    int i,j,k,target_int_count=2;& G: X3 s9 q$ C2 N) }/ G, |" X7 @
    char ch[2];
+ U  o. z& U5 M  S# I) l! m4 g0 o# b( W! L- [+ x- e

! U% d" \* Q9 t' D8 S- s
, y/ P) M! e; u1 Z% v3 e' f& ]    upp_interrupt_count  = 0;
. }( B/ D5 U6 L) i, b& `9 S    upp_error_count = 0;9 i: O' b  n4 M: G" T+ S9 a
7 p: {9 w# @3 u8 ]
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( N" A( Q4 J2 m4 V6 T  {5 _" j% p  `" E    // Initialize data buffers% Y& h; T  O* N- T: U' B, J
    for (i = 0; i < upp_frame_size; i++)
: t1 t. U0 V) R7 Y& L    {
3 q. l5 @& P0 k) R6 V/ R       upp_buffer_b =i;$ A0 W6 X1 j( |  w, w
       upp_buffer_a = 0xDEAD;+ d' t  W$ y1 G
    }
4 n/ D3 @6 b+ ~9 O% t3 [4 M$ d- e) u9 p) O' f2 L/ i& s& P# y
    //for(i=0;i<1024;i++)& b0 b2 R$ K3 \5 P
    //    temp=0;* x+ W6 f; N% a) @1 o$ L% y5 w: c( Q; V
- Z) n+ V' a9 H7 P4 j
    //UPPReset();
. \8 c' o- Z2 C: e6 E0 Y    /*启动UPP DMA传输*/
- t  `1 F( o) _0 `* b    UARTPuts("upp_prog_dma_i\n",-2);
- W, A5 J$ H5 ^' P& i    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 ]" m  |6 M' Z, q. G  d; D    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ r. X  |6 g; {; `3 T    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ `% D1 O% q6 s7 e
$ h; {) B* \1 d$ S0 z3 A; c    UARTPuts("upp_prog_dma_i\n",-2);' j) \: s) h8 o: h- Q2 I8 s& m
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ H% v+ Z9 h3 x. e2 x7 T) e; `: x
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 v- T9 M; u% A7 w. e( E7 F3 \
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" D3 j; k2 u7 I( D- r' L6 p( H/ U

6 H# H1 q$ a' Z6 u. t; o8 J9 U    /*等待UPP传输完毕*/7 i+ y2 u" S& q% v
    //i=0;; R: Q3 y- B6 R. W
    //j=0;
$ S6 s( P! b% G  X5 |    while (upp_interrupt_count < target_int_count && upp_error_count == 0)3 z, b% Y$ z7 h# _
    {
1 W, z0 i  R3 X( ^        /*  测试UPP传输的同时操作普通DDR数据
1 E5 Y4 {2 ]1 a5 m9 a; f4 A        temp=i;) U2 B, x1 `3 X4 t9 l8 e
        i++;, b$ @- ^2 ^9 l4 ^3 ]0 F
        if(i==1024)/ e5 @3 E& t+ R$ a
        {& f2 x) v: i* \; V2 n' T' E7 K
            i=0;
" o' f! D3 t7 P! D            j++;: \4 K4 w% _# L: u1 X9 i
        }# V  _* h9 `& K6 @: T
        */7 o4 @. ?; u" y" f! g

- ?2 \$ N" t2 r1 K3 a3 g, N       asm(" nop");
9 o1 I3 }; g) }; R0 |
1 g2 X) t1 u9 [       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);$ c7 h8 A# E- e. `7 T' }7 J
    }0 ]8 F! X! D: O) c3 u2 R6 M6 n
, t0 Q7 I0 {% R: X. f( Y) t& E' x+ \
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( M/ J  A# f# V4 \    //UARTprintf( "i=%d\n",i);9 l0 k" `' O: {4 p
    //UARTprintf( "j=%d\n",j);8 z. _6 o, A) y, \
    UARTPuts("Data mismatch in buffers.\n",-2);1 ^- F8 p. A2 k
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 E  Q2 N" ~. L1 g+ `    {
8 h' y, j" U, c" `+ P7 t& n        for (i = 0; i<upp_frame_size; i++), M6 H) U) `! q
        {3 O& m: T! s- p/ o( m0 s
            if (upp_buffer_a != upp_buffer_b)
: }2 A- H: _# I4 ]8 e            {
1 \* W* `% z6 E) c/ e; b                upp_error_count++;
4 m) l3 [* I5 d- {7 x: M) P6 l            }
$ N+ j  _7 k1 M9 l; E5 M0 J        }
) E7 c1 R7 c  t  r9 |- w. V    }
) c7 V8 U5 n3 b2 p" S& P. l2 ?4 o
1 m8 ]4 j9 [# c( t    /* 报告通信结果*/) w5 n% K. A+ l7 H8 k
    if(upp_error_count != 0)! K9 J! E0 K* u
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
" y4 S  j  k' f+ Q6 p" z    else3 o0 q! U+ @4 [" c
        UARTPuts("uPP transfers complete!\n",-2);2 n% v, Z& X. l2 g

8 x* {9 R. n+ C, F; T3 V9 t! S    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* V2 P# [+ m( _/ i+ j    UARTGets(ch,2);
2 m! P) N6 z% Z1 N' ^( v8 q    UARTPuts("\n", -2);
& x$ [6 i$ l6 u# s# T9 P* @  q. S' s& |/ X
    if(ch[0] == 'y')- i6 e2 J: \; f; @8 k2 k3 N
    {
: G9 R& ~0 x7 @% F  d        /*打印全部读到的数据*/: b, s7 g/ N8 \; Q2 I
        for(i=0; i<upp_frame_size; )
9 L. u2 N# @# D$ N+ p2 {& d        {2 ~8 E' D( @( _5 p3 s* h+ [4 \* w3 K$ u
            for(j=0; j<5; j++). a' l$ K2 `7 Q3 a! K
            {
" N3 j( a* ^" v8 f4 S                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 ~! r5 o+ s, R0 [- m                i++;
6 j' m6 O$ l$ \* ]5 s                //if(i >= 4096): X4 ~! M: l- n/ Q: n
                //    break;
0 I: A7 @! N& B: a, u/ S* v7 S3 ?2 F
            }
. J/ M1 ]  a+ M& ?  w            UARTPuts("\n",-2);/ w) [$ d* [% A; X4 a3 o
        }
! @0 T3 g& ?) p' ]: Y: a    }
: n! f; _# m$ C9 ?: d% H  A. T& l- j0 Z
}
' o1 U: Y3 C; {: Q! P
  y7 }* K; c% @9 U- X5 G$ X
0 m5 n9 F* m: q5 w; b, G# S+ C. r, z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; ~8 K, e7 m1 r3 r. E
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) H8 g2 H; ]' L" b





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