嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ P$ }" c& \# z% n4 a& P5 |
Void UPP_TASK(Void)
4 ?5 t) U0 N+ U) a( V{
* H$ R- j. c5 e8 ]1 j$ a
2 Z7 X( t" f! i    int i,j,k,target_int_count=2;5 |* @8 D  T3 G+ O1 f+ T- ^9 F  ^' S
    char ch[2];7 c4 r% G# u0 o

  [, P5 ?7 e- O- o5 [1 j, v6 W* K5 A9 `+ l) {( j

) m. r  E5 ?8 B. I% h" e    upp_interrupt_count  = 0;! }8 U1 |8 X8 r
    upp_error_count = 0;
1 c# x. @% `2 g; {
& Q+ d: K# p" U+ }, ^; [  p! Y7 o. w  @0 p  Q    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ @4 A) h  a. ]- P4 m1 i: Q+ ]    // Initialize data buffers) ^; y5 V! g* f# [
    for (i = 0; i < upp_frame_size; i++)0 k8 }) C, h  D1 |5 D' B. k
    {
  r0 W0 F; T. r# `  X$ G) M& B% n       upp_buffer_b =i;
, {! A5 \% y5 T( n: i' u( Q       upp_buffer_a = 0xDEAD;5 E/ y5 C+ Q& F; [7 c6 G2 _
    }
; X* A* Y6 p1 N& a/ N% X2 }6 w" x3 P6 m" c* N& ]
    //for(i=0;i<1024;i++)
7 R: g  W* d6 A2 v; A    //    temp=0;! Z; w; T0 g/ S  C$ N6 ~
  m& U2 ^5 Y5 ~
    //UPPReset();
8 @$ \3 n! G6 y1 |. e& Q) l* h    /*启动UPP DMA传输*/( V& K$ d( Y: V- L
    UARTPuts("upp_prog_dma_i\n",-2);7 B9 h8 v3 @# [0 e! ~" a: H
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. n9 [+ r7 a: w+ C; j
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 x0 q6 E1 N* m: ?7 s" J0 p0 _
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# {; S6 y  I, D  L# p
( h, F4 T9 }0 {0 k& P    UARTPuts("upp_prog_dma_i\n",-2);9 {) w/ D2 w) S! j; p. n: q
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# N. P% ~; d, Z  f, h9 q7 s    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& V" o% s9 r; L) z* K% R: P$ p) |
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( m8 ]" }# }9 k+ \% e& A+ [
7 a+ ~0 j# _" a/ F2 U  E: r
    /*等待UPP传输完毕*/. X) K/ ~; i$ F1 Y
    //i=0;
# G) l% `* ^7 H    //j=0;! C, \. y  s- r6 `! u1 v! G0 {/ L
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( X5 ~  J) n0 f5 b$ g
    {7 H( k! j: Q7 K& v* q* `! }; Z* E5 F
        /*  测试UPP传输的同时操作普通DDR数据
0 H6 B0 F9 b, c! X: M        temp=i;
6 V' @/ R+ p7 C' Q6 t) d: V8 i        i++;: V8 K1 f& Q3 {3 |6 W: q
        if(i==1024)
/ g! i% T& t3 @        {0 ~5 F' l7 g, ^8 g7 }
            i=0;
2 A/ ^1 Q" h" s; T% |. F7 d            j++;
' T( g4 b' M! y5 `1 E' x        }
( [6 a: @$ m4 Z4 j2 f        */
9 }2 z3 S' {4 @7 {5 j2 O
8 h( q7 D) X* A* L       asm(" nop");
" n$ {! A  t1 o5 z# D2 A' F% v; m; W" Y& g3 k+ i* r
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 H0 u4 I7 A6 N: n: v, g, o/ i    }' m5 v. f: T' h  p. u4 b- z, [! g

7 U+ v( d" t* a! \3 G' k8 W/ _    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 Q* `( e# l& U+ k6 C  b! I( `
    //UARTprintf( "i=%d\n",i);5 ~( G0 _! r: O% o* n
    //UARTprintf( "j=%d\n",j);
! p/ d/ P0 U4 m    UARTPuts("Data mismatch in buffers.\n",-2);$ E/ ^" j- B7 `$ D0 P. }( ?$ a3 E
    if (upp_interrupt_count == 2 && upp_error_count == 0)
2 r) z  `* E9 Y) O! e    {
+ W  s, @4 g! c7 U9 G; I( u/ j8 C0 o        for (i = 0; i<upp_frame_size; i++)
5 G* P! n$ m/ J) ]6 D        {$ Z0 V0 F, j4 w& `& p) t
            if (upp_buffer_a != upp_buffer_b); @  e- A, ], F* W
            {
" O( B4 \! M/ V                upp_error_count++;
/ R* b2 F1 ^  O# I. ^            }5 B2 F& A6 [0 ^, T. G( R
        }
! k7 w' ]$ n* W    }
* c4 V0 e+ h" g; O" G7 v: Z) I% H% R( `6 J! L2 Y1 w+ t: i/ R. B/ |
    /* 报告通信结果*/* ]0 g; |2 q3 B0 i2 n+ M  ^
    if(upp_error_count != 0)
" Z4 n0 y0 c) Z$ p8 H+ ~, x        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 e, }( l3 l1 o/ R5 H$ f2 @    else
+ V2 V1 D6 q  B) s) p2 ]        UARTPuts("uPP transfers complete!\n",-2);# z0 k0 ~+ F, m" z0 ^6 B# S6 Y/ ?; v( a

% D0 e$ i2 h# ?3 z  S    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. J: a; d+ D6 ~, A
    UARTGets(ch,2);
6 q* M. m+ e- e# U6 y; v    UARTPuts("\n", -2);% u; m% W4 L/ _5 C

- d' l: T% M0 @5 ^" t    if(ch[0] == 'y')/ a" k: d, m& w4 d* v& r
    {
. V9 s6 c( ~0 x        /*打印全部读到的数据*/$ m) P8 l- K' M  m/ C) @5 }
        for(i=0; i<upp_frame_size; )
: k! P( f/ P9 P8 y8 X+ p        {1 z4 u, Z# c+ j& M  ?
            for(j=0; j<5; j++)( D" o/ {! ~+ F2 e& Y" W5 r
            {) I( H# n$ Q; w, P& k  P! B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% H! `* y" V$ E# N3 _  P
                i++;9 ]6 A' c- C( u- T+ r. k
                //if(i >= 4096)
9 U- _: K% t& `3 `                //    break;! m: Z+ }- M* h

( X2 i  p0 |; e# x& q  V( p            }* v( g% K' s0 w; W) K3 r& x
            UARTPuts("\n",-2);6 D- J. q! M9 m0 F8 j9 g% W
        }6 i) W4 m2 L7 Q# _" Q- D" e
    }7 W; A7 Y0 _  f. ~9 i

& k' ?, U4 ?/ W1 x- R5 C}
& v( _6 ?7 r2 O5 J2 M: a

3 d  n8 j% T* n6 u1 w& E7 C" o5 s$ g' K# u: Q6 Q- @# v5 ~

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。2 c+ e7 v) R4 I' X# f

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 V  L& b) G  I4 ~6 T: i: s1 U; s" ~




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