嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: C8 |" J6 {9 `4 h1 l
Void UPP_TASK(Void)) Z$ V- f* H# h
{
! v' h9 j. G& n0 h# @
5 m, d  a7 e$ |3 w    int i,j,k,target_int_count=2;
% L& V: b6 Q8 K3 y# h& |! Z    char ch[2];2 a" f& D. v2 N7 _

. o2 j' e: U3 L3 Y6 X
9 k0 f1 b9 x" l( P* d! z7 a0 {# Y9 W2 r6 k7 J
    upp_interrupt_count  = 0;3 c8 t' U4 _1 ~* Y5 b% |7 C
    upp_error_count = 0;; y: ^  o2 g# q/ C' L" I
( B9 f) y1 C4 r9 i  b& _
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
! q. c5 [2 z! Z    // Initialize data buffers' R8 c$ w  o" i
    for (i = 0; i < upp_frame_size; i++)
0 x2 X- n8 t  i  T: T2 H7 f$ X0 B    {% |$ [) Q- {8 f7 o
       upp_buffer_b =i;
$ m% U% {% R! z; J0 q  }       upp_buffer_a = 0xDEAD;
2 G4 k1 h' X$ F0 \- ?    }
# }# d) T/ f) ~. J+ l* V; ?1 a
' c' o2 n% t" [* u- r6 O4 K9 t# {    //for(i=0;i<1024;i++)8 ?' H$ {  f% @; k9 W
    //    temp=0;
. F1 I; g" z: A7 _: B: q; a4 k1 Y0 u: t
    //UPPReset();
/ N6 W3 @3 ^' J* W) J2 n- F6 z    /*启动UPP DMA传输*/- @; e) q9 k- e: @+ I
    UARTPuts("upp_prog_dma_i\n",-2);2 J8 b5 |2 `! H0 s6 a# @
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' s; U" P+ r( w! \# U% L2 h    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ e5 x+ g: r4 X7 |" r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ r9 r" H+ @! y# A+ O/ t: _0 E; m$ W
    UARTPuts("upp_prog_dma_i\n",-2);3 X4 d) ^4 g1 A% z$ Z0 s
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 v) T! d4 Y! P. p" F    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 R' @: M) A; V% {
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 q' M. h6 k  u0 f# y# b" a
6 S3 X4 o  o% B6 R  v
    /*等待UPP传输完毕*/* X6 o9 ?5 Y, C9 _
    //i=0;
1 l' C, X1 S8 N- [  ]. e* u$ h1 i    //j=0;
$ I: C% b' p1 C& m. |- x    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- s1 _+ D2 i+ W( U! `
    {
/ M& g: {5 ?$ }7 a6 d6 f0 B        /*  测试UPP传输的同时操作普通DDR数据/ U. y! o* X1 @0 x  R
        temp=i;
' A7 d5 n3 Q3 B9 h% s: W( Q        i++;
' B6 H4 H* L2 T4 Z        if(i==1024)
/ P9 y3 y" n5 A! q8 k( w5 p  o: b        {
. a7 M1 z6 z) u1 @            i=0;
$ i9 u- S: b$ o9 k6 j, x: Q7 w            j++;% Z# c# q; p% H8 }" x& @
        }
1 H' C  v$ ?6 |# X" a        */- N2 U9 G; I2 R# {% i% N
3 C* t) |+ X; g: f
       asm(" nop");, d0 c( H( S: m: m$ j
% Q2 E# v1 p' s" P$ Q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ {" s) p/ X; e; @    }
' o1 ~/ G- I0 k2 h$ ?. {3 C. z9 a5 r% V2 a& X5 s
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
3 k- A6 _/ {% C0 c5 ~    //UARTprintf( "i=%d\n",i);  f; y/ z) X2 P2 k
    //UARTprintf( "j=%d\n",j);" Q: ]% ^2 u' o6 x
    UARTPuts("Data mismatch in buffers.\n",-2);
+ D! g; Q* m9 O- N) D) q3 Z/ ^    if (upp_interrupt_count == 2 && upp_error_count == 0)
" c1 E3 G6 g( b+ E. ?8 p    {; j+ D  D# T. @" ^
        for (i = 0; i<upp_frame_size; i++)1 o2 A8 l: Y! N* H' i
        {% F9 f/ U. }, C2 N8 r
            if (upp_buffer_a != upp_buffer_b)) _! C, Z. w& h( B8 p8 m  i
            {
" ?2 s, t/ N3 g) G2 ~                upp_error_count++;4 b- j0 O- b0 G7 w. z7 p5 C
            }
2 r8 e' ?* t1 n- C! V        }1 u$ m9 d/ K" e8 V3 J
    }* \( S) d+ H/ Y4 u' X7 T( T

+ d% {, Q8 H; R! T4 X' t    /* 报告通信结果*/5 |4 v+ i6 ?. I& I( g
    if(upp_error_count != 0). ?9 S2 w7 h+ }% V& |3 K, U0 Y
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 L/ q% A$ m/ B; }7 J
    else
7 ^/ f4 n4 B) I        UARTPuts("uPP transfers complete!\n",-2);# @; Y7 u) ~/ E" u! z: Z) z
) V: w# r- w  E. r
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- C$ u) O% \  v3 ?: @( H7 N) T    UARTGets(ch,2);
' B9 g3 `1 z% U' t+ E- ^# ~    UARTPuts("\n", -2);
1 P: X5 G" a% x, [" P  H& [/ J8 l4 h" V' S( L9 u% m" i2 e9 \+ I
    if(ch[0] == 'y')9 s- k4 V' U# f/ e
    {
0 X" b6 k; W9 l        /*打印全部读到的数据*/
& U; D% y& Q! \# A3 H1 @        for(i=0; i<upp_frame_size; )
# y" l8 r3 W1 W        {, \  J5 M0 m! t8 \' L/ e
            for(j=0; j<5; j++)
+ k. d$ I4 L: t- D            {
" C& T: f3 G6 d7 [& N2 }  A7 K. D  V7 O4 N                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 O# c6 b% G9 w" E# z
                i++;
, C4 `+ W2 d' P+ D2 y                //if(i >= 4096)9 w- w7 e4 E5 Z/ y4 G
                //    break;
& h( Y) x0 j1 h0 h, ]6 r& S% {2 h8 J" S# w
            }
' t6 |+ h: p$ {. z& R            UARTPuts("\n",-2);# q8 l* Q5 J! K: n  F6 Q
        }- o  F5 |9 Y$ {
    }3 V: E( C6 p9 t5 u& t
' E4 A& ~; `# ^( x: B
}

, r' o. c: Z1 f

) C( ]3 x. z8 J" @- [, r' y1 T* e
# V$ F8 T: Z, @) v4 p
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# Z% a9 ~" [' |% D8 T

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 C% ?( m9 A, J* }* p





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