嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?1 j; r; t8 T9 P$ L( }2 ~: ]9 A( S2 x
Void UPP_TASK(Void)
7 t0 _% ^, }0 ^{1 S4 L7 m. V2 u" E" c) ^2 ]- j
' Y# g. J7 j9 n" T: Z0 K+ c" z
    int i,j,k,target_int_count=2;7 d% l/ u! R; H% {1 l
    char ch[2];9 B- j# Y; W6 ]; U
% w& m  j; o: {( z+ F, ~
) S, t, y- V, ?( b* u% H+ H9 V
8 P, O; a% F$ d. I1 X/ O1 ^$ H% r
    upp_interrupt_count  = 0;3 E, f! U% J7 r* s1 F1 n+ X
    upp_error_count = 0;$ \# p* g6 m+ i6 v9 ~* j- f

% {0 V8 L: O; X2 s, `- d4 W    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 S" K9 `& G9 W+ u
    // Initialize data buffers3 G) O& Q: A6 M7 k2 C( g: k
    for (i = 0; i < upp_frame_size; i++)
" u. r( V( M' S    {
/ t& ]1 H( h8 ~" a5 q       upp_buffer_b =i;6 p* ~. P% _  T% C8 @, K2 X* N
       upp_buffer_a = 0xDEAD;
5 W  Z  Q3 ]5 y4 A6 H8 w% `6 y    }
  p/ ~% q& W5 x; x$ f# h5 F, Z
4 |* x4 H/ E# A% b    //for(i=0;i<1024;i++)9 d2 S8 m7 l) u) i" g! X( {* P" R8 R& C
    //    temp=0;; }4 X! Q/ v2 F" U( m
% v1 A, P. U! \7 l% A
    //UPPReset();; [. `) N4 B; }% r/ Y  t7 \
    /*启动UPP DMA传输*/0 k" ~2 F" ]# x) m4 `
    UARTPuts("upp_prog_dma_i\n",-2);
# Q, r% Y  T# Z( j    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ A& ~/ R. I+ u9 g
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 y! d6 d4 I: q$ {2 n( p; x
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" F* k3 i) o% z6 h8 r4 K" C1 p8 |$ Y8 E4 o. r
    UARTPuts("upp_prog_dma_i\n",-2);
) m0 _4 V) z. \5 W4 T' Y  g    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;6 c! K. ?' J* g
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, t. r: T: X+ d5 ?! G0 G    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& R9 T$ O7 b7 x# j4 Q# B4 B* L# a0 s6 o. e, \
    /*等待UPP传输完毕*/. y. h0 v! D( I6 ~# g/ ^
    //i=0;' _2 `+ A1 {9 C  H) k
    //j=0;
* u* D8 k; X6 M    while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 Y0 \. D; K0 n" ?9 P2 l
    {2 o; n  @! d1 P- Z- S
        /*  测试UPP传输的同时操作普通DDR数据" ~5 r0 W8 n/ ^3 `; p7 F
        temp=i;
3 B- A* Q5 x9 P% g& s1 N, J: S6 g        i++;
! \- ]6 c1 s% q. A3 S' x        if(i==1024)
, k' N& h/ G  R7 Z1 q1 _0 H- v; U        {
1 N4 }$ N7 U- H' a8 O- D3 g            i=0;2 u" u0 K: b$ ?; a8 y
            j++;* Z, L  f& p- E5 F  i
        }
1 b) B; @) e# s3 N3 x        */' S  R% q1 P8 F& ^% K

6 b# v( L$ N6 ~       asm(" nop");
7 A" F' G) K, K& q
! B& o' E8 X- }3 Y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ A+ J- `; t4 @  [0 B    }
% O( w1 }) ~0 U% x" ?* z
0 ]1 k/ p6 S/ N0 C    /*检查UPP传输的数据是否正确 (loopback modes only)*/
" k* v" a" N, h; [: U    //UARTprintf( "i=%d\n",i);
; b, Q( U7 N$ b$ u4 ^% O' h    //UARTprintf( "j=%d\n",j);
; w2 \% S$ u" H    UARTPuts("Data mismatch in buffers.\n",-2);
: m" Q- M, C! U4 B; h6 ~& B. O- h    if (upp_interrupt_count == 2 && upp_error_count == 0)( t# G  M$ Q8 U8 e: G9 S
    {
& P, V# j' I5 ]: L2 y0 [        for (i = 0; i<upp_frame_size; i++)
% p! S/ y; n4 X, ^" {+ u9 S        {
, G2 C/ d: e+ |( ^5 E* ~  s            if (upp_buffer_a != upp_buffer_b)8 |4 v5 r% H' R. t# z2 C
            {
9 Y# C2 I- h  t6 \                upp_error_count++;' P; d6 I( H5 z9 e7 l1 q
            }, r! [7 Z: d( q! k8 r
        }! L7 t3 l6 m3 b2 R
    }+ z, L& l+ }" C8 ]

0 l* b' c# z8 P/ y+ k+ B    /* 报告通信结果*/7 |6 S. B3 k1 [& J
    if(upp_error_count != 0)/ u" ~. e" \) \# m( B  L+ j) ?, L4 ]8 w
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 N  n2 K' D6 N! W$ S4 z8 [2 ?1 ]) W, t    else
$ C: r8 q; U( \        UARTPuts("uPP transfers complete!\n",-2);. @5 K9 N4 ]" m  o, Q
: e$ _9 Q* k, W3 B0 u2 Q( B
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ j; C; n8 x6 S' \    UARTGets(ch,2);
% i& ]/ T) g6 g; _    UARTPuts("\n", -2);
3 t, @' C4 g0 ~( ?9 l+ D7 g$ [8 G/ o$ e' r6 u
    if(ch[0] == 'y')- A1 N) W7 `" @, ^
    {: k, m7 L6 i" |. g
        /*打印全部读到的数据*/
& R; ~) W5 T( q  R1 ^" q        for(i=0; i<upp_frame_size; )
$ \& Z% u9 |! Y0 S+ t        {) m. z- z- N# ]6 P% i! L
            for(j=0; j<5; j++)# v6 c' a5 J* B6 w- _6 ?1 I4 K/ \  A- f
            {5 j8 V2 N' _$ x0 B8 U3 L  ~' g
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& S1 w/ {4 U7 o
                i++;
4 I, Y( L& p" M$ [                //if(i >= 4096), R- E" x/ p4 x( Q
                //    break;5 q, \: l4 ^) c+ B* W

+ x1 ^7 Z. _( F  R" A            }
$ R* G- V# z9 m4 R& J' a! L- n            UARTPuts("\n",-2);
: B, X1 u, \1 ^: q- ~& |        }
! F/ W$ O8 J# W5 e- Z. C    }
* e5 o7 L  Z0 ]- E2 `+ g$ ^$ g  m$ i" S; g# }
}
) i5 v+ a) u5 F
! h2 K4 b, t- w& F4 r! `$ g5 F

$ x/ v# t- y$ @+ R1 [
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( I/ D2 O" g; c* R  d1 ~0 }

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- z* P5 @  g7 d# Z





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