嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) s5 O( K5 |7 j6 [" t- ~  E
Void UPP_TASK(Void)& S  G/ a. o7 d$ n
{$ A8 c- R+ j8 D

7 z3 `4 E+ S# ?1 U' r8 S+ Q    int i,j,k,target_int_count=2;* I! U) }$ N& r3 v3 d# P: |
    char ch[2];0 O2 A3 y* h. }1 @" B( H! i
) D  `$ _  w: g6 N  [, G1 _
" ?* _$ i6 R! V! J5 V" u' H

' I8 _! m( N/ q9 }0 u3 H    upp_interrupt_count  = 0;% x: S8 ?; I" o
    upp_error_count = 0;
; D9 O; n( q. `+ L3 ^$ k8 [, y0 U/ {  L$ y
    UARTPuts("\tResetting uPP buffers...\r\n",-2);. F$ E! R% {" N1 {
    // Initialize data buffers
, f1 U' B* p( C+ e; K6 c# H4 ~    for (i = 0; i < upp_frame_size; i++)) A- B2 S: U# i$ w1 D( G" J
    {
- i5 ?- L/ d5 T, j5 S       upp_buffer_b =i;
) I  n2 i' y- v8 Z$ j, B       upp_buffer_a = 0xDEAD;3 j  `: g# o4 g) M: S( a
    }
2 d0 \, b9 w+ b/ A' \& a! ]# W. i6 h4 o' y6 |( C# q
    //for(i=0;i<1024;i++)* X( \& m/ H3 H. R- P! v
    //    temp=0;
2 [" i) K7 @+ N4 m% Z5 V* a  M" ~' N' t
    //UPPReset();( z4 J& p5 t& J" L, }' b2 z
    /*启动UPP DMA传输*/
3 c3 Y6 f0 S/ `9 s5 s, ~( k    UARTPuts("upp_prog_dma_i\n",-2);; p& X* T( |0 a" M7 y) Z( x
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 v! r. n8 A5 C8 X& K2 `, d5 b& p
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 f( U& V1 V6 e+ S
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. x7 B* \% i& q2 G1 q9 V
, G6 ~  |& Z3 ^( p" t( b9 x- _, `
    UARTPuts("upp_prog_dma_i\n",-2);
; ]2 S7 z8 u0 [5 F    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 p( w* E6 V+ h- o' u9 B2 V- U( x    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 y3 Y2 R6 S% }7 S    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ S/ p* a% C( J( ~' w" J) ^" {2 b, e5 G, y+ p
    /*等待UPP传输完毕*/3 E' i7 I2 w9 M) w$ C4 v8 `! d7 ^
    //i=0;3 h, R; z, {$ g) x% s- \
    //j=0;$ w1 C* N" ]# k1 g! o4 f
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% b0 n! p  y" B6 q2 q' k: X" W6 c8 g    {
7 y7 y6 }( Z7 Q* Y        /*  测试UPP传输的同时操作普通DDR数据
8 I& u! f* a' ~/ S( O        temp=i;
) a) C" z+ f" T0 Z1 w  v! \8 V        i++;
' c3 b2 ^* D. h  }- a, a8 b        if(i==1024)
# j4 @( m1 Z, x* _5 [' t" H7 r        {3 `0 G8 s3 y- g) ?3 \
            i=0;
. l- {% Q' N/ l' `- }            j++;
4 n. @/ B2 o( [/ A, K        }6 L* o. u' _3 {
        */; f* X3 J. s7 Y3 |2 ~' j  w) L; p# e

- T0 k% R( o; a8 J8 k       asm(" nop");
. e- z6 U2 t' z: s% v) L. E# G7 U+ n3 ~& ^# |0 E% Y. p% i- B; K: F
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 n- E) y& ?( R  E* F- R    }. a+ t( T! H% K% _/ Y/ z, F

) u, X, r8 h' t' i7 y    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# b" l' r. L( e" f: t& m- f    //UARTprintf( "i=%d\n",i);
$ W& P! c- N) B: }' U( ~5 _& q    //UARTprintf( "j=%d\n",j);+ `( O# Y, m/ |1 c
    UARTPuts("Data mismatch in buffers.\n",-2);3 t; l4 h9 M5 n& D. V: H
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 n7 u; ?8 l$ J5 i    {
/ p& _3 e9 J- Y% C" a2 E- `        for (i = 0; i<upp_frame_size; i++); t/ }, v/ }7 F
        {
5 [4 ]( m/ _+ {+ {+ N5 A6 p1 h            if (upp_buffer_a != upp_buffer_b)
/ O5 d, {5 }3 t  f- @            {/ ?6 y: {: R* g3 ?* C
                upp_error_count++;
1 b7 S: `5 w0 r5 l            }- T( Z. o2 ]" M* C
        }2 q, N& I$ I3 _4 D: s/ j; K
    }" F$ U; f5 f5 c

9 Y: f( \$ P" w4 Z8 y% c    /* 报告通信结果*/  Q9 f+ N& ?, X
    if(upp_error_count != 0)
# C  Y$ P+ ~/ R; {& ^/ C        UARTprintf( "upp_error_count=%d\n",upp_error_count);* ^- z. ^2 B( E* T2 V' ?
    else
+ p& u# M" A  n* W1 u0 p        UARTPuts("uPP transfers complete!\n",-2);! Z+ ]$ P  v# f7 o
5 G3 ?1 ^& E# [( Q& m1 J" D6 B# b8 i
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
! ^' ?. q# V) F2 s' ^    UARTGets(ch,2);! N' l8 a& G  z/ n+ D1 O1 z
    UARTPuts("\n", -2);
/ g( ]( X! _8 L1 Y0 @9 U- s# A- e5 ]: }6 h. z. k
    if(ch[0] == 'y')
2 g$ e$ w6 [# D1 ]/ P! ~: }5 h+ @    {5 ~$ {9 e  I4 ^2 d9 d! R
        /*打印全部读到的数据*/
$ ?5 f! j" k4 K9 @1 V: z+ X- y        for(i=0; i<upp_frame_size; )
# l: G2 A: L* C1 `  Y        {
- b$ _" e. A7 Y5 Q  t            for(j=0; j<5; j++). @! \8 K/ \- w! _  ~
            {
) a1 x% U2 Q+ g! F+ @! f4 L& c                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 Y6 Y+ C! [7 M4 [. [5 _
                i++;7 z+ G. B5 ]) s+ [( q( E/ B
                //if(i >= 4096)
5 Z4 z" z* ]- n2 w8 }& q                //    break;
2 F7 H' C, H9 I+ S# F! j
" x& X3 C" w+ h+ P0 G            }9 H' b0 ~4 u3 \4 ~+ @
            UARTPuts("\n",-2);
& s+ [* t# \& Z$ [. I) e. \+ S& W        }
: v# F. G( s! O4 ?. x% E! d( ~    }
+ L3 E, v" f8 W! M3 R/ w( U: a$ c0 y' ^* P- r2 K5 O
}
0 Y2 @- v5 `0 O3 o# s2 e
0 d+ f( W1 c, z: R; x, G
' R. O4 M8 w* Y$ N+ W( l! x* |

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- G8 H$ K! b, k1 e
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。2 B& T5 M  C5 b* S3 Q





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