嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ F8 n" U; ?0 u) n6 t" {( g4 |
Void UPP_TASK(Void)' p8 d& X* H$ F* M1 }
{
) B" S9 B: w; b0 S, t* u5 D. N9 M: ]$ d0 u8 Y6 b( V
    int i,j,k,target_int_count=2;
  K# {6 Y0 T) V    char ch[2];
( s. U# ?& a  }
' P) p5 t! V) `
6 b$ S) Q  p% ^8 ?" K( g4 g3 a+ x! y. t
9 @9 ]/ A! T) w9 R8 X    upp_interrupt_count  = 0;
7 M# a+ \, t) c' V: ~5 A- N* ^: k    upp_error_count = 0;7 H+ R* }. \: ^; n* f# F

: ?/ C1 b) n  n2 }" m% s    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ J9 v7 k: G. Z9 B" C* y
    // Initialize data buffers5 t6 P: P* t0 c% k6 C  ]! X
    for (i = 0; i < upp_frame_size; i++)' u1 B* r% v, Q+ Q% R: P
    {
: W# K. Y7 `- Z" W' j. b3 N  Y       upp_buffer_b =i;
/ N+ Q3 a/ e6 x" \4 ~4 g, u       upp_buffer_a = 0xDEAD;
% Z/ G4 f, S) B& T0 `    }
2 J; z1 X# ^: T( J6 U3 b7 a4 i# F5 N* E! P! t% q
    //for(i=0;i<1024;i++)
3 n6 x/ Z4 r2 z; U* N' K+ `2 d" A1 Y    //    temp=0;
) D8 U" e; e1 D; _7 ~( C+ i( F8 z; M& b! t% J8 ?5 {
    //UPPReset();
: p& U# A$ {5 I# I$ `6 h    /*启动UPP DMA传输*/' x2 R4 ^* ~* P3 w
    UARTPuts("upp_prog_dma_i\n",-2);
, z& O9 W! l  A: V    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 K3 {3 _* X* M' q$ r: i. m+ P* r' ]
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 U% j: X  b- [+ G
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 o/ n" ~' Q! m- w/ v; d

  H* D3 P7 T! o/ Q    UARTPuts("upp_prog_dma_i\n",-2);
" _( a$ t: V/ Z6 I; c$ y8 H  g    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 F8 y3 M6 P( T6 s
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* M: A1 o& a$ j) v5 L  j# K4 m
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: `' a, T% a/ m& Q8 F# e1 z0 R6 C( x+ V
) L3 F, g. e# Y3 t7 Y6 s    /*等待UPP传输完毕*/" q! q8 T- ^: c" @) W1 ^6 |" T1 r
    //i=0;
) T5 i8 d  d2 s& n# X' J0 P    //j=0;4 Z! O3 _! x. c+ }
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 u' `9 ]; Y5 D4 L9 s    {
9 p6 g5 y: v: a) u7 G        /*  测试UPP传输的同时操作普通DDR数据
% e, }5 W4 i# }- B! I1 V        temp=i;
- T. Y5 i# e8 k3 n" s, z        i++;
' ]) t0 H7 T* i: c        if(i==1024)& Z; [& q6 O" ]2 @. S  Q: {! ], G
        {
. [7 `* s. \3 ^9 @+ }; M2 k# ?            i=0;) J7 K" e9 a  A1 N9 P: q9 ?" ~
            j++;
9 G; Z9 e* W* u+ n& O        }$ t' q1 U/ P. ~) A
        */
3 c" T! K. S5 o  K, _- ]4 f: b' e$ t+ `5 }; o+ ~% P# Z/ y8 I& G
       asm(" nop");  r8 c3 I: A9 K- B' T
' ~. B2 T; p* e1 n* z2 `
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 o: G7 b2 d9 @) L: L    }
$ Y! n9 b1 \% P) C
2 w0 q2 [( z. ^! W4 G( X    /*检查UPP传输的数据是否正确 (loopback modes only)*/% g2 s. g/ t" o- _, J
    //UARTprintf( "i=%d\n",i);  {- ^/ M; T' ?* P
    //UARTprintf( "j=%d\n",j);
0 A# Y/ t: B5 k8 a  r4 U4 w    UARTPuts("Data mismatch in buffers.\n",-2);
9 {& k$ l! C2 j1 Z    if (upp_interrupt_count == 2 && upp_error_count == 0)7 d: {9 [2 |6 g; J" A
    {
! w7 W* u) q+ O, M' T5 n( a6 z        for (i = 0; i<upp_frame_size; i++)
" o) A  E) p8 X        {
! |! g8 E2 \7 f8 Y: y' i8 x% l            if (upp_buffer_a != upp_buffer_b)
( R& p1 d" Z% F% P( v/ @; @            {0 q" H7 g; U8 @9 c9 a+ j
                upp_error_count++;
+ n6 R7 _; a, o  e7 D9 _            }
7 {0 A5 B! x" X  t. u; k        }0 |: B( G, K( Y+ }' |; f2 T
    }/ s% t+ Q- [5 B9 ?  W, V

% h. M, e/ }* ]: B& H$ j2 b    /* 报告通信结果*/! q; f/ V6 b! R* E  f1 Y
    if(upp_error_count != 0)3 M2 D/ x1 u/ P  a
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 O" w; l" ^0 |  ~4 E' n# }
    else
; m; q3 H1 E9 a' e; R+ R7 ^2 |8 a        UARTPuts("uPP transfers complete!\n",-2);
. j8 F. M7 u7 i0 U3 v0 w% u$ K/ _# r# ~5 c1 t5 o7 M, \3 [
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 S4 b- m( n( i& _
    UARTGets(ch,2);* b# J8 \+ k7 ]9 o7 F
    UARTPuts("\n", -2);; {" U; K* o+ ^" Y( p3 I

, t6 J+ ^' y/ S0 _/ \: j6 i1 }    if(ch[0] == 'y')
3 s$ K1 \: V7 p4 R7 \7 H    {- m. c. c' ~5 b2 i# o/ Q1 X; J
        /*打印全部读到的数据*/
5 n3 L- X0 I( p  W5 e        for(i=0; i<upp_frame_size; )* M1 J4 U% M1 \/ X
        {
: n$ Z2 ^) i6 T! G9 l            for(j=0; j<5; j++): W; m2 k  N8 _  P
            {
: k# k8 j- D2 k7 U( g% c                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# j, K. h2 I5 X9 @$ T/ v2 w, a; h                i++;
4 Y( }: I3 f7 h2 M: h- i                //if(i >= 4096)
9 G& B: D0 m* B6 K' T# ~                //    break;1 W! |  I4 U4 }5 B6 ]' {, e* A1 z

0 l' |& o+ j$ Y% i) a) _            }
: C9 R4 V* \2 \            UARTPuts("\n",-2);% y% z& Z0 o; _, Z. y  V8 @  F# k
        }$ a# {. Q& j* A( Q8 L
    }# V9 i+ L) v- k2 d: d
, w3 X" B% ^( Q
}

0 w6 o/ M. }0 w# _
4 {) |7 g  R. B

3 k+ x8 y( j/ G8 g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 R: ^, Q/ C* K) ]3 T

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ j3 ~4 W+ g( g# r  r





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