嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. u& n( ~$ F% {$ h8 Y# l
Void UPP_TASK(Void). o8 V& u% H" @% z
{2 h2 L1 I9 Z) ?' D( h0 t

  P+ l5 \  p' K3 r  V& [: m    int i,j,k,target_int_count=2;
; W# }9 F9 i# H  K5 l4 U* J, N2 G    char ch[2];
3 i% e0 ]4 b9 X" F5 @4 P' s" q$ o3 C  Y! g. Q& [
' @  H; M7 L' B  L  D2 V

( C! I% D! e/ i    upp_interrupt_count  = 0;
- k; Q# @: y  o2 ?/ R" @, s3 j! i    upp_error_count = 0;
2 O% c. s0 ~% H  l: \' q7 L  k/ j. [$ {1 x+ b( n. p
    UARTPuts("\tResetting uPP buffers...\r\n",-2);! F8 b" o. f5 X1 A8 x0 m
    // Initialize data buffers0 s4 u+ y; O/ A9 m/ z, g9 n0 Y
    for (i = 0; i < upp_frame_size; i++)) _* Z( B" a) j! H
    {
( Y- f5 P5 [8 p1 q, @) @9 K       upp_buffer_b =i;3 c0 R, b$ h5 P& w- j# U* ^% n
       upp_buffer_a = 0xDEAD;# X3 u$ i$ y! u* `* A' v$ I
    }# p* L0 l+ |3 s
% U4 [4 f6 m+ i' p7 N# r
    //for(i=0;i<1024;i++)7 J4 H( u6 e" N9 Y% f% B3 G7 y/ C
    //    temp=0;6 d* Z  L& A+ r

* A% d# f  K3 u9 E    //UPPReset();% @& W% N6 e0 a8 Q" ~  X
    /*启动UPP DMA传输*/
/ c8 s2 h/ G' B/ Y- {# F$ [$ r    UARTPuts("upp_prog_dma_i\n",-2);  ?" W, @. ~5 m3 I* G1 E" c1 e' R
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: S* V2 Z$ s! O
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 p- }: _2 n0 o* a% o7 F
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 c" m: X. F) S. y& M
0 M! n, ?3 C0 e
    UARTPuts("upp_prog_dma_i\n",-2);
% U; {( A% O9 \9 t, J6 {    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 e; d( w5 _5 a    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: U* u+ W' I* A6 {0 S! _    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) N9 J3 J' ~' P" B; u' F  U5 v) [9 ?) _  ?
    /*等待UPP传输完毕*/
/ |' T4 W2 a+ ]7 x1 H' S8 p    //i=0;
) F4 t# F( x8 \, ?0 {/ `0 `) V+ W    //j=0;
5 e4 d" Q. f" U/ B+ @8 e    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& b+ C. _& j5 Q6 ^# D& u+ g    {( j* X# q- D4 s; F
        /*  测试UPP传输的同时操作普通DDR数据
, I# F& t( ?7 ^* z& m$ g. \/ r        temp=i;- Q( ]' T/ K2 A" ~: {
        i++;/ z! u0 G. y0 _9 R
        if(i==1024)0 @3 \& y9 |3 x; D! u' r
        {
) {% v2 h0 N3 R9 i% Y. L            i=0;
1 m* x( c* }& j- o            j++;
; P6 t, _# F3 `/ r" b        }
* b% K9 `) i9 Z! U6 V" ]        */* h) G5 a3 d4 x& C3 n
" P$ U7 Z8 C/ L* m7 C0 d
       asm(" nop");; w' N5 {; S/ Y( S% u0 R: N  A: {
) q. w) `8 b+ p
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& K9 M1 ^" ^( i! i7 }- s' @$ |$ `    }
* n2 |( m2 k' ?7 j' s* r
: Q5 q# s; P& S& k! c" X# x    /*检查UPP传输的数据是否正确 (loopback modes only)*/. i. f  f7 \( ^# A" X0 z
    //UARTprintf( "i=%d\n",i);
  I6 o; m% W6 I) S    //UARTprintf( "j=%d\n",j);
9 m0 D2 Y2 P/ M. n* Q( J/ d3 }    UARTPuts("Data mismatch in buffers.\n",-2);) l, v; k4 p) k' e/ v7 a4 e4 h! t( e
    if (upp_interrupt_count == 2 && upp_error_count == 0). f2 R8 E+ P: [/ J
    {
" N' G) A, A+ w( ]% Y        for (i = 0; i<upp_frame_size; i++)% v7 k$ |- P) W4 e
        {& P  f+ W0 {# ?9 O' j6 I' O
            if (upp_buffer_a != upp_buffer_b)
2 l3 {, e3 `1 H+ e            {
/ G( R/ Q0 u& G! `: H                upp_error_count++;4 Q0 ]$ W* {0 m8 ^  {" K
            }" k, L4 |6 k0 {. c8 z
        }
2 R* D/ x+ B- V6 l+ h- g) o. r1 |& {7 ~    }
% P' L  \& X6 Y! h0 T% ^- w& o4 ^6 U" y; y$ @! I
    /* 报告通信结果*/- S, Z. K6 s2 T, j- x
    if(upp_error_count != 0)
$ x" \" `- R* U( r9 _        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 B+ O0 Y. b. `. w
    else
( |/ E' s* p8 L( q        UARTPuts("uPP transfers complete!\n",-2);
8 ~  u4 I3 T: y2 g- l9 O5 c
4 N6 k9 A- S) P8 v. a5 M6 B    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 ]" [, z5 @% g' x    UARTGets(ch,2);
' H; ^9 d( W( U9 l+ U    UARTPuts("\n", -2);
4 s, q* F! Q" R' y' @5 J8 F3 }, Q/ K" I* P, \: A
    if(ch[0] == 'y')
1 r8 I( @' Y+ d, ?. W    {5 [" d1 ?& I4 N3 }/ A2 Y
        /*打印全部读到的数据*/
6 V( Y0 r- X$ A' u2 f  D        for(i=0; i<upp_frame_size; )
4 [0 v0 h, O/ J! C! g$ F' I        {
) a# ^, \+ Q- s' Z            for(j=0; j<5; j++)- Y# f" g; l9 p- L
            {
9 ^* d8 C/ ^6 b3 o                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' B9 I- b( k0 T9 i" j4 Q8 B* i
                i++;
, l$ D( o8 T4 e2 R                //if(i >= 4096)# y: H. Q, X% M, w2 H' u
                //    break;
0 |7 n# F4 s  x2 Q! F- O1 L/ Z7 E$ i3 K1 Q' d9 T& `
            }9 N# `9 {( M2 `. b1 M
            UARTPuts("\n",-2);3 o- N- z. O. x7 @8 H3 `  k8 e
        }& N2 f9 ]# w$ P
    }+ n1 C0 a4 x0 N: r
( J0 b5 x9 e$ y4 i, e
}
- c4 ^7 G2 N' y1 q5 ]. g0 d0 G

2 b/ z4 e4 V$ d$ n8 g" N# f
2 O+ l' H: _  A4 V
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% S  X9 [3 M  d1 M3 k6 F2 l+ R

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 }8 C0 W  d0 b6 u




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