嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 y* G. D# h3 \
Void UPP_TASK(Void)/ E, }: {2 e4 r6 M- z
{3 g$ q7 a' s4 i" U9 T% M

4 k8 X# M% F7 r- u+ d  d3 P    int i,j,k,target_int_count=2;1 g! T( g- z; [* W
    char ch[2];
( e, K; @2 Q6 ~3 N0 t
9 d) J. ~6 A' D8 q. n+ Z- X0 w
& c; A* e# m" I( P' y$ X* L; H, _6 m: L7 O, M
    upp_interrupt_count  = 0;
9 h( x7 e# f0 W    upp_error_count = 0;
1 x  h5 |( j) o. ~' m1 {- Y  u3 r3 [
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* A3 a! k' }) h" X5 F# g8 G  N: h    // Initialize data buffers  N+ H( C7 Z+ P6 M) P9 @2 ^
    for (i = 0; i < upp_frame_size; i++)
$ o6 w2 g" B4 `; k9 o  \: c    {
. s# f5 D& j8 E  u2 }& p; [" ]/ l       upp_buffer_b =i;
* s% C# _  d  c/ E$ t% k       upp_buffer_a = 0xDEAD;4 i8 T: _3 s. B0 |- t
    }* Z# c- b! X$ v: L! O
6 z. l) `+ ~0 r- p' x
    //for(i=0;i<1024;i++)
, D5 D6 r# F& e. M# C    //    temp=0;
$ b7 y/ [' g2 G4 O
' o  y; W6 K7 ?1 g    //UPPReset();
' R( S* u* P; w" ~1 D. ~    /*启动UPP DMA传输*/6 u0 _* b# O: X+ S+ C: ?. \
    UARTPuts("upp_prog_dma_i\n",-2);5 {' C, p5 y; {: K
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 O  e4 J5 `6 }9 v, v
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& c# o: z. H8 i; I: Z0 ]4 S    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' S) Q) l; U6 L6 R7 p! l
* |+ B# m3 P3 G0 s5 Y4 B* F) _
    UARTPuts("upp_prog_dma_i\n",-2);
. Y: u% E# @4 [; \    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, I% L- J4 T- s3 }: z3 s' q+ P    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. W8 x- }6 ^: V  g% f6 J2 ~
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 c& n, c8 F6 b; q* j  J
: Y! h4 g. X3 L  o    /*等待UPP传输完毕*/
! Y; _8 j9 O" L    //i=0;' O& ~$ Q* ^7 y, Q6 S6 w
    //j=0;( ^$ T* u/ Q1 q: l1 e3 r, d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! D  h" g4 h( Z4 E5 [/ H* V" T6 T9 O
    {
) U) X1 J( T/ e        /*  测试UPP传输的同时操作普通DDR数据2 W2 r- l) j3 o% k0 S
        temp=i;9 k1 e( {8 o5 y& I
        i++;2 d5 u! C6 b0 N; ^: Z
        if(i==1024)0 \2 O9 p( ]2 H: D4 c
        {
2 }7 ^) T2 m7 U            i=0;
/ N8 r6 O1 l8 e/ w  R8 G            j++;
: p: z  @+ `/ W, J. B* V: b3 Q        }! b2 k2 d6 t) V
        */
: c, n' r% w$ k8 V* D1 Y5 U" R3 o1 |& {
       asm(" nop");
0 l6 I. Q0 X5 ]4 J! N% o4 L( J' l7 z% V0 p
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( U) T$ a9 x* @0 w( e1 y# {    }7 Q7 v) w  b; _
0 D5 Q. `8 O5 C+ U! v. N3 }
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 S- e; Q/ T% ?0 K5 A    //UARTprintf( "i=%d\n",i);
2 R5 ]6 x- Z# E, Z4 c3 D3 \    //UARTprintf( "j=%d\n",j);& A. R) ~# y0 H  K% c8 Y1 ]/ U8 i
    UARTPuts("Data mismatch in buffers.\n",-2);5 _/ @! N& p) w6 e( U3 z2 K
    if (upp_interrupt_count == 2 && upp_error_count == 0)
: K" v3 E) I- c    {
0 R; [! x6 W% }, }; S. _/ ?        for (i = 0; i<upp_frame_size; i++)
7 j" h* t2 |0 B        {
! z$ f( O, j5 o! V0 P! \            if (upp_buffer_a != upp_buffer_b)
% ?7 q6 Q1 T! @' f1 w7 q4 k            {
' g3 a( k8 T; U2 L+ ~( P( P4 G3 m                upp_error_count++;
. H0 t0 i1 [' Z- x! _& z( E( x            }
+ A4 w# e8 a1 |$ r" o        }; k/ N. G  ~/ M$ D) S: }- @2 Y
    }
( l6 z% o% T1 u- u- I- p( I) C: ?& Q/ Z
    /* 报告通信结果*/! p6 u: |: L& M6 a0 c! g
    if(upp_error_count != 0)4 U( O- Q' S! U9 O) d5 Y; Z8 p4 p% k
        UARTprintf( "upp_error_count=%d\n",upp_error_count);8 v8 f3 O' M" t/ }7 m! d8 @% [, |
    else) {# y' J/ }& J' `+ g7 K
        UARTPuts("uPP transfers complete!\n",-2);
. ~) v! U: ?: Z2 @8 ~5 E. O+ P! n$ ^# N( p0 a" F
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' n0 c9 D7 g. s( V  g: {3 S( u    UARTGets(ch,2);1 t4 m5 G8 Q9 n9 r
    UARTPuts("\n", -2);' B! a' J# @3 C% }( E
) d! M' R8 T5 E' v/ c/ T
    if(ch[0] == 'y')
3 j& q$ A2 |" ^4 C/ O    {" ]* b  S1 a/ _3 ?2 A# B& \3 m
        /*打印全部读到的数据*/
  w, o6 @3 i, A2 G# |$ {. n        for(i=0; i<upp_frame_size; )% T6 ^3 f3 @7 \# ]% w) U
        {8 N* c6 J5 |0 [) C
            for(j=0; j<5; j++)
3 x/ ^! p% r' O) j& _7 L; B" M8 d4 H            {
8 i/ M3 ?( ^2 w' d+ c                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' h; Y: V- {2 e* G$ k% f
                i++;
5 D) E% q' j7 i! ?4 o0 c+ ^- k                //if(i >= 4096)
2 Z$ \4 Y' g0 x' u& Y3 p                //    break;
& f# T8 u( Q- c# m: Y) |5 e
. H- ^; d" X2 n! `8 P9 X            }
* F0 d) e% P5 ]# V            UARTPuts("\n",-2);; I" s+ i0 P0 }3 W/ y1 f/ N
        }
% b( t. ~, g9 h9 N* y    }
$ e: E0 A5 r. Z% q/ q0 |0 x6 m3 R8 V
}

# ]8 I: p' e! ~0 G( s
2 i2 E' F+ m5 x) Y0 l! e5 t$ D
8 P5 b. l8 p: a$ T3 O3 @% d

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) o: V  c1 G0 ~1 m9 a, h& O. A; K

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ ?0 C1 t1 }  a$ T9 b7 C





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