嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. f& f, T1 w2 B
Void UPP_TASK(Void)- |. Y; k: H% j) {( f
{
& i+ `4 I, f+ k+ M  p% z/ T  D
9 E. q/ Y& b' d+ T  X# i, |7 O    int i,j,k,target_int_count=2;
4 w% k# z1 F' l2 Y7 Z    char ch[2];/ ~& K7 i: t: ~& E+ A

- g* M5 I( q1 Y& P0 s) X% I
$ s8 ?5 P5 ?1 {+ P' Z' g
/ ^& M4 m1 N3 i0 c3 d    upp_interrupt_count  = 0;3 W# B) K7 n. f& V9 Z. F: `. J
    upp_error_count = 0;
$ f' b0 K' v3 _1 e4 R9 n  `7 a1 c5 t  D2 V( a& u/ M
    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 ~+ Y; \$ i& {5 O+ h
    // Initialize data buffers
# u' ^6 M' s  W; p9 A5 ~    for (i = 0; i < upp_frame_size; i++)3 s" f5 i+ P! t2 h5 x) d
    {
! f2 j3 h# l3 E9 u( T) C       upp_buffer_b =i;
1 X* u  w* U5 o- ~; R' [. G       upp_buffer_a = 0xDEAD;
$ |. x- t) {  Q, C4 j# N    }
( f& P% L$ T/ M$ H7 K/ ^- j
9 o9 c; h; K% a* d, u" `2 O    //for(i=0;i<1024;i++)1 B: x* [" N" s; n2 K& }
    //    temp=0;
9 T" h$ ?1 e* G
: N; Q2 s2 O1 L7 m* ]: B$ i/ B    //UPPReset();
! p' Y+ c( y* Q2 T3 k, ]    /*启动UPP DMA传输*/$ h4 X" D, T/ Y- x  F7 H
    UARTPuts("upp_prog_dma_i\n",-2);
! F, P8 v# U! `/ m! x  Y$ }    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* `9 A& K$ u7 C) c, w# W' E( K
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ ?# p! ^6 h9 f, b- y5 M  L    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);7 Q% g- S2 K7 R

( C% m9 ]" R4 m; `# r5 y    UARTPuts("upp_prog_dma_i\n",-2);# a& w5 o  y$ K/ J
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  \+ d, V0 E0 i    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, Y1 b& b& M/ P    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ J/ s( H% q. O9 s5 `: @
8 g  }) l# T. A  K; F    /*等待UPP传输完毕*/) b8 ~2 @+ T" {, W9 l6 I, S7 w
    //i=0;
5 t2 ?, Y1 ]9 H$ p* _, z    //j=0;2 T. G) v( q: V& U! @# ?
    while (upp_interrupt_count < target_int_count && upp_error_count == 0). c# Q7 z9 s0 n3 @* ~
    {8 l; M0 z& S/ ?6 B
        /*  测试UPP传输的同时操作普通DDR数据4 W. s$ R, s& M6 C5 U
        temp=i;# M. u0 L# V' y% H. Z/ r# ]
        i++;; R; I) n$ B( R6 \
        if(i==1024)+ p* r3 a) R% O, G6 i+ o
        {+ \: T- B2 p+ U/ o
            i=0;
$ R# [: r% k: g  t; p1 |$ f  t: h            j++;
( k0 S- v& V5 w; B* G        }
7 u# H& a1 a+ L. w7 G) X* j. g        */1 ^& ~% ^7 W1 ~1 `  I6 t
( ]! s" C" L: R3 t/ p# V6 R) z2 B+ }
       asm(" nop");1 ^9 h" f3 m- i5 e* c6 ^; W4 D% ~

$ C, W8 w, j( y0 p! _& P& y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- I1 j: L5 I* e7 j/ `    }
7 m+ ?* Y" \3 q3 h& E1 w5 E5 _) N  W+ Z' L$ @+ G* a
    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 `; p9 }2 i$ r; ^" [% J$ m
    //UARTprintf( "i=%d\n",i);' }/ s: v$ ^% B
    //UARTprintf( "j=%d\n",j);- h- K3 I7 C4 D: L( y7 w
    UARTPuts("Data mismatch in buffers.\n",-2);& r! T! T! _+ B: [8 O' b! g
    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ }) C( i4 B# S6 L    {% ~& w% A$ {+ _9 B, v; M3 \/ i
        for (i = 0; i<upp_frame_size; i++)8 y& ~+ U: P7 ^2 Y+ D, A0 _; w
        {
. {7 j7 \4 a1 H: b0 n0 {1 J            if (upp_buffer_a != upp_buffer_b)& |. I3 k$ o  c+ Q6 o/ B5 w
            {
: Y( V- Q2 n% o& D                upp_error_count++;
% U6 J( b8 \; ]4 `; @( f5 u            }- C: ~  z7 M5 s' W% @
        }
, i4 b  x8 o& ]" Z, a    }
! E5 ^8 f. b2 @: A3 d
" e: S& y- g3 l  Z$ I( F    /* 报告通信结果*/
1 l) w1 s/ ~( @1 ?    if(upp_error_count != 0)8 ?3 Y% ~) A, `' W" d* C  a
        UARTprintf( "upp_error_count=%d\n",upp_error_count);- ~" M) E8 q% @7 H- h
    else( u. Y! m. x8 i$ u% p
        UARTPuts("uPP transfers complete!\n",-2);4 p0 f& w4 `* L: C2 ?: m% S

9 {# q; `& Z' g* v    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  M( d6 |. K: N4 ]    UARTGets(ch,2);
. \) X$ e' ~% m; c    UARTPuts("\n", -2);. H& M5 y7 d6 f6 I

: r* t- s5 Y- P9 w    if(ch[0] == 'y')2 [: P* E- M) M) C# x
    {
5 Z) d/ U" j1 r. u" V# p6 f1 b        /*打印全部读到的数据*/: Z2 o1 S  G  K1 K- P
        for(i=0; i<upp_frame_size; )
, z' O8 d6 d) E2 ?3 j2 V        {0 B, K# O5 T7 `& {9 {( A
            for(j=0; j<5; j++)
$ F0 I( M# B* o3 ^% A. n            {7 L* w" }, [0 V- O0 A9 R
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( E" b0 |7 G/ S% X% ?
                i++;2 f+ g  K: ]" w* o4 Z
                //if(i >= 4096)
- L. F8 U- T# I5 \                //    break;
1 U, k" N) f+ N! v. }4 b- [- X2 N8 n/ m# O& y( G$ v. X
            }, }6 Q! G! `# v; p! t! m) u: F2 E! _& o
            UARTPuts("\n",-2);: Y6 O% y* E& e" u& J2 @2 ^' h' T8 m
        }
" b, `: }' d; U+ m: j    }
% `3 {/ |6 A4 i/ C0 A9 ]
! c/ m4 R; y. o5 w}
% g8 a5 x! [" ]8 S" e4 b5 S
( |  }0 W0 |& Q) U9 L" B
: v/ K3 r/ W% }  d0 M2 T

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 I. j5 X; U1 a8 R1 \0 L( g

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# Y* n/ p) B: ^2 M' Z




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