嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! M1 J# Q1 Q; N  S+ H
Void UPP_TASK(Void)
; Q( M: o* v2 o% j! |+ [{# l, N3 u% C- Z
/ W% h0 F- H3 u  D3 W3 I, e! ]
    int i,j,k,target_int_count=2;3 T' C' A& V9 M
    char ch[2];
2 M3 J5 _5 _. ~4 E9 [8 M' x" G9 D' W9 w
3 Y" K% {- M# z: i/ l4 @3 h

& ^7 {5 d, E1 z( T    upp_interrupt_count  = 0;" T' a0 M4 `& q' I, ?8 d
    upp_error_count = 0;
, F2 ?. [$ c+ c# P! J" A% i" a  D4 k, H5 i' p' E" ^
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ B0 n; @/ [& ^* ~8 h    // Initialize data buffers) Q& w1 A8 S2 g; u* M+ _
    for (i = 0; i < upp_frame_size; i++)
2 Z" z$ Y7 @; z; s1 r6 Y0 R    {- O8 g! \5 d0 I( B9 I7 t5 U' ^
       upp_buffer_b =i;
) Z" ~+ d2 ^( q7 O! G       upp_buffer_a = 0xDEAD;/ j/ P+ E7 n8 Z6 S; e5 @
    }
& C  {, J- c; P/ O" N. P7 a! m5 }6 [8 d/ J/ u9 B; m/ a6 V
    //for(i=0;i<1024;i++)1 e% d0 J4 E  ]1 L
    //    temp=0;
. |1 p* ^! Z1 X3 c% ]5 p8 T6 [3 x7 c' O2 P# U
    //UPPReset();, g; v( S% W, Z3 x8 X
    /*启动UPP DMA传输*/
& U0 u: B. O9 c  M, }9 ~    UARTPuts("upp_prog_dma_i\n",-2);. g. g4 O0 x2 Q9 S4 V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;$ ~! m: Z3 M9 q( G1 J1 R- I
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' v! X8 d4 j) B1 K+ h    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 a! O$ V4 d  L& G5 l5 `' z% w" g0 A
    UARTPuts("upp_prog_dma_i\n",-2);
- f5 T, e' ~8 a* }    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 w! ?3 Q3 ?+ |% d, E1 {3 x    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. r/ `$ e$ A  ?! D8 m5 K+ q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( `; j0 L9 T7 ?& q
! c. A* I! p3 b$ h; s0 U    /*等待UPP传输完毕*/" i$ Q/ h0 r+ Z, m; V. L$ D
    //i=0;) S' t- E2 o: ~: ~8 m- m. c
    //j=0;
  P/ U, O4 t- o0 }( p    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 R0 p$ c  D+ \5 k    {$ t% k1 q7 q; O6 ?0 [( k! f
        /*  测试UPP传输的同时操作普通DDR数据1 a) K$ q& U/ C0 W5 y0 q
        temp=i;4 R; z9 ~5 W7 {
        i++;
( |4 k2 z* M% H) l2 j, X2 @6 ]2 G  I        if(i==1024)
8 ~$ S6 ~0 e, c" o        {
4 g4 X& C1 [1 T, v8 _            i=0;& F* Q* M+ x0 r0 y0 }  D4 E
            j++;
) A! u& _. d7 X8 ?  P+ \1 n        }
8 p! X! x6 A- z  k  W5 \        */
; b6 _6 y7 j1 K6 ^9 O( f- y* z2 Z; Q7 d* d
       asm(" nop");+ q4 A0 x/ g7 s

$ _+ L7 z$ p& ^$ _7 q; ~; [& K- ^       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- }3 \4 w* K$ n4 {8 I+ O" |    }
2 a, O5 W! b4 I& ^7 G' @9 S' m: x
8 `% T1 @2 l$ _; ~5 W. k    /*检查UPP传输的数据是否正确 (loopback modes only)*/" V' }, i1 {* q. K# T# B
    //UARTprintf( "i=%d\n",i);" J$ k; F! G$ o* J7 a9 b( Y# p
    //UARTprintf( "j=%d\n",j);
8 T- `3 I6 ^7 S0 Y( l    UARTPuts("Data mismatch in buffers.\n",-2);4 Q& M9 E- f& s8 ]. w* G5 Z; }
    if (upp_interrupt_count == 2 && upp_error_count == 0)
  V5 T- I# o- E    {  I+ l7 C6 B" u' U8 Z* [
        for (i = 0; i<upp_frame_size; i++)
* F/ _7 P% M. [- ~8 [/ y: }: E/ x        {. M* L! E" ?0 P
            if (upp_buffer_a != upp_buffer_b): j7 h5 Y; i! g- z, N% r$ Y
            {
( V: r& K9 W/ O3 i                upp_error_count++;
6 i. T7 W" S/ p/ t            }3 j& w( @* u3 r6 m
        }* S9 c* a+ k) X- C) u0 R5 m$ P( q
    }$ B: Q: n% T6 L

, Y. B. T& r) S% f    /* 报告通信结果*/& u" C& Q0 }( k
    if(upp_error_count != 0)2 ~/ S' Y! J4 Q, j
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 t% |0 n% w% Z: b' e    else
7 R/ C  k, J. }- G0 v( q8 |3 {: K6 Y        UARTPuts("uPP transfers complete!\n",-2);
3 B( U+ D- m  n" b/ |
9 B# v6 H* J9 w- b1 E/ ^    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 z7 t  X) s! u6 J7 G8 S# _
    UARTGets(ch,2);9 ~5 ^- @1 |" j% J  g/ \# t' @
    UARTPuts("\n", -2);( V+ A, Q7 ?4 i# @2 Y4 r( z

! ]$ p! j% e; F, `' s; r+ W# A) K% p) v    if(ch[0] == 'y')
7 l9 i& [( c  L. z' `. N. B; m    {
8 a7 p5 v* ?: |        /*打印全部读到的数据*/
8 y0 {8 A1 r0 _3 c6 ^+ u: w        for(i=0; i<upp_frame_size; )) v* A3 n5 x& X
        {  E7 W2 [3 l3 N3 T4 B
            for(j=0; j<5; j++)2 T) h$ R4 a# f: H
            {4 r) E5 V+ J1 M6 r5 _5 h
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ D. l/ @7 Z, {, V+ j8 |$ m$ a                i++;, u1 B/ K0 O* j6 y3 A9 v
                //if(i >= 4096)
8 y) c( u  t0 D7 [                //    break;8 j+ c+ ~& X; `: m6 R- K6 A, q9 Z

% T! P, ?  Z- l1 R6 E8 o8 j. Q            }" V% _# [; n3 p0 D4 C8 y8 M
            UARTPuts("\n",-2);7 Y; \% p6 u& k1 n8 L( E
        }% w  X% o. `: N; w/ s3 M( Q
    }
& Q; ]; [/ n1 X% `7 Q' H4 Q2 B# r9 s/ @/ @7 S
}
1 V) a* z7 b+ z* U
3 |2 z& V3 ]6 R6 @7 @0 O% ^( b) z/ Q

8 |9 }. Q$ P1 q9 p% `
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 Z# P" z) W. i" F2 {; ]% _) V
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! B1 ~( y1 y/ W( k0 p" I  p" p




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