嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 {! K, X7 O3 c+ A
Void UPP_TASK(Void), K3 G2 L; U; J
{* X# E9 g4 s  r. p! u. r# A2 u
$ f8 h, p2 `+ v5 e: t) \
    int i,j,k,target_int_count=2;
1 K. f7 K5 ^( G    char ch[2];
6 k# Y. o' I1 _# J2 [  g7 s% @% J/ R' K3 T
( w- i+ h* H. j% U. d) `0 F4 F

2 ?6 [, a  `' }* p    upp_interrupt_count  = 0;4 \2 G& V/ ?" h, `
    upp_error_count = 0;. v! ~8 z5 f3 e. `+ c

9 O3 w9 T9 q( t+ c4 M/ M    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 w" f( E. h0 }% h( t    // Initialize data buffers! J; L: g) l/ _9 l
    for (i = 0; i < upp_frame_size; i++)
7 C0 H8 c. N' w    {
6 r( U" Z: T; s; `/ G/ }2 q3 p       upp_buffer_b =i;, B% {* V. M0 d2 ~  U- G9 T/ l
       upp_buffer_a = 0xDEAD;
, H# ]4 c+ R" S    }
: [# ^- S0 T; e  W  }. Q* y& F& h( r
    //for(i=0;i<1024;i++)
6 J* H* W) a! x; P    //    temp=0;
) a# F$ v( X6 \# L' E7 L+ D% X# r$ X6 a6 V
    //UPPReset();
8 }5 G/ N* B( ~    /*启动UPP DMA传输*/
# J5 Y9 D8 T: ^' d, P    UARTPuts("upp_prog_dma_i\n",-2);
4 n* N9 S5 J% c    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% u' n* l  ^" p7 N4 C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! w( f7 _; R* F, I; s8 N
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" b1 p; B- I# d2 }' {/ g1 j, \- ]% v4 H, z4 u7 r2 `" \
    UARTPuts("upp_prog_dma_i\n",-2);
  F4 J/ ]  \6 a" [! P. R    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 l" a. u8 n& v4 H5 |2 ^: h
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* a6 E6 H) A3 N- z  z) }( N" l
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 O* \* E3 W# c) |$ T

3 ^  r+ i3 ~! J    /*等待UPP传输完毕*/
, E9 j9 Z( _7 l! q$ f    //i=0;9 j7 I" H6 O. [: ~3 \( \
    //j=0;9 `! {' B  h" F1 `4 m0 }
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# E- S+ [3 L4 X2 p' D1 W! S
    {
1 m8 Q2 `) v2 C/ h3 X        /*  测试UPP传输的同时操作普通DDR数据
5 b+ S& R* `: m  f; J5 f        temp=i;3 a1 q% N5 f3 W( J0 P, Z. c; x
        i++;
: g% b% G% L& K6 H7 c! M        if(i==1024)" Z$ B* [6 V$ k. Y
        {  u0 G: T. q% m" V; y) O
            i=0;! _, L% {' f$ U' e) Z- x0 i
            j++;$ t3 ?0 Y0 s: _8 S, z/ \  g
        }
2 `+ D* x3 \0 ~3 F( g        */
. t5 ^, _, h6 U5 v) Y. T% h
9 L+ X% r) n6 i+ G& O       asm(" nop");
5 d. i" F, C7 |' T, m9 V# m. S0 U* }7 W
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! r0 H/ l/ W8 }, s- Y
    }
) g+ e: |9 J/ R( v1 A! F& x- e' e$ l4 K( C' \
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 A7 C& d) ]7 w    //UARTprintf( "i=%d\n",i);1 z& |4 \3 i: G8 U% l# z
    //UARTprintf( "j=%d\n",j);% Q/ U' z1 Y  U/ ~* g
    UARTPuts("Data mismatch in buffers.\n",-2);7 N& o* G) Y+ e
    if (upp_interrupt_count == 2 && upp_error_count == 0)& z8 C6 @! e8 P  I
    {
+ W" ?1 f7 H6 A* A        for (i = 0; i<upp_frame_size; i++)
' Z7 ]1 a' A( Y1 F  j8 b        {. B8 s. P  P! G5 f4 ]
            if (upp_buffer_a != upp_buffer_b). o# i) C. h% }8 r
            {
: {7 s. K" m  p5 S, O                upp_error_count++;4 y5 x3 M% |# K4 h
            }
) h! W4 z/ x( A4 A0 U( N        }
1 n9 p' ^/ \1 h+ \0 F, v2 d9 l$ }    }
3 Q, _  }* K- J: |( g
9 V2 q- f/ i, F& Y    /* 报告通信结果*/- ^& ~6 Z  n9 C, Q  Z0 K
    if(upp_error_count != 0)9 H: Q, E/ Y& N/ d9 T6 G  n
        UARTprintf( "upp_error_count=%d\n",upp_error_count);" E; m1 f  O$ x# s6 Q  g) |2 z
    else
8 U) N  j( p8 Z' [4 s        UARTPuts("uPP transfers complete!\n",-2);. N. P$ a+ N$ c8 @, m8 t; ]$ P; [
3 F; _: A4 F6 h" V! U# v
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& W' [) r3 F. Q4 u& @4 q) ~    UARTGets(ch,2);
  Y- a* W/ S8 c8 \    UARTPuts("\n", -2);) N( L  y# C6 O) f

% z' U% K1 Z1 N, N- ^; U    if(ch[0] == 'y'), X! b& b9 @5 |1 \+ v
    {0 g  h/ A& |) j* m' M2 x
        /*打印全部读到的数据*/
0 K8 G4 b1 w* D/ _+ p9 u" ]        for(i=0; i<upp_frame_size; )
. ^; E- Y- P* D: G        {+ M+ L6 b" u, r: [
            for(j=0; j<5; j++)
1 K) U; q; W5 b7 X            {9 {4 R; g/ w5 r, k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ y& W( g2 z) u1 L7 T                i++;
. ]1 m4 a  }2 ]" ~                //if(i >= 4096)
) X6 N( j7 X3 c% D- i) W$ g                //    break;! Z$ m9 b6 z- l6 e, s- c

& g. a5 L+ `. B- Q+ I3 T            }( p5 v! L; U8 g( K' L
            UARTPuts("\n",-2);& H" v1 R3 d7 G1 e
        }
9 L' a& _, L7 q' A( Z, _$ S    }
' K, P- t) H& M7 [8 d- @; Q4 Z5 q: O) r& |
}

% X1 F( z1 d# V, n4 T1 K% f

+ L: w/ @6 W1 T8 p4 g4 q! E* F) w. o
1 T' ]7 j( @& p' n
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
  a4 o! Z' x2 G+ a7 E9 l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 B: j1 A  ^. _$ Q, [





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