嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- E' m+ ~  \6 e4 }( }- ]
Void UPP_TASK(Void)5 f* i- _0 r4 l1 v9 `6 F1 I, u; e
{$ W# w. Z1 `) M0 c3 V# b: C

5 S' O( s0 C6 A& ?1 S+ _" v5 j$ @    int i,j,k,target_int_count=2;* T5 g& W; O( x5 _6 C% ^
    char ch[2];& C/ M/ C0 j5 ~4 T
" u' f; U2 o  U8 d- r. ^1 K" O
. j% \; q, e: t( g

( l  l/ u( @8 A    upp_interrupt_count  = 0;
5 y$ U+ x; Y! Z! L8 B    upp_error_count = 0;
4 A/ r1 F& `, ?! S  H) {0 Y9 R, r
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. r2 j( E; @) D( \( x( E# D    // Initialize data buffers2 R3 ~8 E. I/ b
    for (i = 0; i < upp_frame_size; i++): u( `7 M! S! j
    {& F6 {+ u' J$ [* Q1 z$ y
       upp_buffer_b =i;; O$ R4 |* n* U
       upp_buffer_a = 0xDEAD;  ~) n$ @' P8 Q
    }
( m" ]. D$ I  V! q) g
- I5 H5 R9 F: [5 R* A$ S) {    //for(i=0;i<1024;i++)
& r2 \3 u8 A& x& h- O% t) W  a    //    temp=0;
+ y9 E" Z9 G. m4 q& k0 ]) y/ q: R/ U9 C5 V' @! [
    //UPPReset();$ D! p: ~: n( D% b
    /*启动UPP DMA传输*/! M$ `3 m" P) i. Q9 W
    UARTPuts("upp_prog_dma_i\n",-2);& }# {. L6 h6 F; x8 f# b
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% O- l' u9 j# B  t; A    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; [1 x! j% {- _  ^
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! [* f% R6 l4 n% f9 }7 w8 @
8 e9 m1 i' i! X3 `( |    UARTPuts("upp_prog_dma_i\n",-2);
- G0 A( w! L2 Z5 V$ |    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( W% b$ t7 M0 y/ B$ e5 c    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* i' i5 X' r  r3 G7 t& t& `
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);9 l* h( n: x/ I/ g$ z  `5 V  j  M! M

1 m* t! r  s$ {8 |  `, o    /*等待UPP传输完毕*/* X+ S% [1 v) ]* }) u# @
    //i=0;
5 I; `& C, R0 P8 v/ W5 t9 I    //j=0;
5 @* ~/ @  u3 J) ]  z' z7 n    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 _/ O: k. ?& I  W7 e3 x1 X: M    {  p1 j% [3 N3 C" E- W+ |7 u+ w
        /*  测试UPP传输的同时操作普通DDR数据
! m3 \2 [( m+ J6 Q: z% @- K        temp=i;
+ R2 ^' t6 F. r" G3 ]5 \% ?        i++;
2 ^% v* H( C. Q0 ]# w! I        if(i==1024)+ f/ k& I3 h+ N+ ~6 S1 d
        {" a4 v; Y4 v3 o7 Z% X
            i=0;5 X) n% ~, L! X. Z9 b
            j++;
5 p3 \! q$ H) q! R- o        }6 G' j* n/ {4 T* J
        */+ P/ v7 v! C* h2 l, e6 p8 |% U

9 J& i% c  ^* Q; ]. D       asm(" nop");. |, i% `( |( X, N# o. M# ?
. b) g/ L2 h# H7 G
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 i. Y$ ?( S4 u8 P  r    }4 e  s# C6 x" T
6 h5 l' j$ ~- C0 n
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: z6 u$ g- C; ^/ e( I    //UARTprintf( "i=%d\n",i);
9 Y2 O. E- z3 Y' o    //UARTprintf( "j=%d\n",j);
% ~6 S6 ?6 {' K" @  H    UARTPuts("Data mismatch in buffers.\n",-2);
) K, ]* T4 ^* U6 w( U    if (upp_interrupt_count == 2 && upp_error_count == 0)
% \/ Z/ U7 o& d" c/ W& r! Y9 x    {
  }6 L$ E) @9 U2 T9 y  C& f0 X5 e        for (i = 0; i<upp_frame_size; i++)" m; X; q5 ]) D% ^: x
        {, t1 C- R/ U! U, t) {
            if (upp_buffer_a != upp_buffer_b)
( O2 I" Z1 d" b6 D7 \- m! T            {
8 q0 J: c2 G6 P6 N6 P                upp_error_count++;
! N, H+ T8 R4 Y  u% X            }" A  W2 T4 X/ d  j! D
        }* ~9 S* `( x- C5 H, ]* Q" \& n
    }0 ^, W& R8 S2 }3 y
5 A: W' `' s) R- y6 z
    /* 报告通信结果*/
# J2 l! p" B7 A- G: B    if(upp_error_count != 0), @1 _* M+ @' v: x
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% I9 U" b% ^* b7 g    else
; \5 u; w* \6 M0 u, [        UARTPuts("uPP transfers complete!\n",-2);( K7 F0 a- c, |3 d+ O2 M
5 q5 s9 n0 \3 T  d
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: G! l& B; V8 }: ^; h
    UARTGets(ch,2);; e4 |4 j9 q, W" _% }( _9 D
    UARTPuts("\n", -2);! F3 U, c1 v* q6 Z4 s8 K

  n* y, R9 a/ K: ?0 O    if(ch[0] == 'y')
- b8 x- L  G( ]' e    {0 ^9 C3 [/ [8 w0 Z4 d/ ^1 m
        /*打印全部读到的数据*/
) D) ?% B/ {4 ?8 u1 T        for(i=0; i<upp_frame_size; )1 ?: O+ W. s& U1 \. ~
        {
, n: F) U' T& o/ W: @9 I8 d) E            for(j=0; j<5; j++)
! S* G2 ?+ {- p            {
/ ^6 U* j" a* \" b3 {, |" g" `                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, \) x! G: Q7 Y- C4 u* ?; J
                i++;3 _/ ?* v% ?. B; C
                //if(i >= 4096)5 j9 M7 \1 h/ ]6 U' l2 q# k
                //    break;2 c4 J/ N6 X! N, F7 K

7 Y, _* C( s( A6 m; H            }
: p3 t0 O( [. R, W, c            UARTPuts("\n",-2);
" \- E5 q# C6 f. f        }7 w% x* K5 w, ^
    }3 C; \1 X% }& v  I: \
% N* V3 w" t  f, ?+ x" U# v' s
}

( N" ^& e* x$ u; X7 u$ X4 N; S

* s# K2 |: c% L, n1 A6 x% d- ^: |5 _* Y) m! C' p  c0 s" j, Y

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- Y0 T/ A8 y8 @
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* G. `* z$ S8 D2 g' U- Z. J( b





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