嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?' P0 S4 ?. i5 Y+ V5 q
Void UPP_TASK(Void)
3 n4 j+ M) b4 ?7 k  [) I{
: V# Q( ^7 ?4 n7 x/ a6 {. S8 _( I" P8 r. o5 g6 {( I
    int i,j,k,target_int_count=2;
! V( ~3 D7 p9 t2 W  k( {    char ch[2];# k1 o5 j8 m: \! u, S* z* M

6 P  t: s3 q; E+ ?0 f6 k& Y8 B/ J# N  \) ?0 `

) C" N1 o7 N  G3 Z" g    upp_interrupt_count  = 0;
' f: d1 Z7 _' ]* Y- m    upp_error_count = 0;' \' @! l% x( U- v
- Q9 |3 z4 i3 F" Z3 C* U
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; j$ J! n0 s. C( [    // Initialize data buffers
, F* [6 t8 v. E' l' h: Y$ m    for (i = 0; i < upp_frame_size; i++)
9 S! s3 {" ^: ?4 a    {
" l. b- E! G4 R% V) o7 J2 x       upp_buffer_b =i;, ]! h, S- G  i3 O! Q/ o
       upp_buffer_a = 0xDEAD;
+ h7 V( m' Y! M" ]5 @7 H  [    }) \) {/ R( [4 h# y( I1 ?8 ]
! e3 g0 f9 Q; r. n3 |; F
    //for(i=0;i<1024;i++)+ H! `/ Y* |# g+ c  i4 O; F  }
    //    temp=0;( s1 r7 m6 @* q* i/ b

, J# M8 h3 r- Q1 h: m    //UPPReset();. ~* }: m5 ^6 v/ ]( F
    /*启动UPP DMA传输*/- i! `" I7 D8 H5 ?! l2 h
    UARTPuts("upp_prog_dma_i\n",-2);4 y5 N  x3 t, C$ a8 p8 S7 p  w
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' U& j' `3 ^8 `+ E' i; r2 ~7 G, o    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 D! t% V3 _; a
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; m2 D) u3 ~9 y0 B& @" B- y, U# z/ v1 p
% j: Z& y. c* q$ c2 A. z( f: e) x    UARTPuts("upp_prog_dma_i\n",-2);
, _' i: P% u5 w. Q# o; z+ V) z    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: V5 \* Q  b& }+ h! I
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( f# q. Q5 b6 w# ]
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- _2 ~2 D* k: I& S! e' w6 i1 U# i5 m  t4 t! P
    /*等待UPP传输完毕*/7 [. c8 W/ C9 m7 e3 X# \! ^
    //i=0;1 y' ~4 ?8 W: n6 d4 L8 ~. @
    //j=0;3 I3 f. q; l6 L# |" }
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ l7 ~; j, u; }2 F
    {
, P# k7 F: {5 V        /*  测试UPP传输的同时操作普通DDR数据) p4 G: K3 _5 R
        temp=i;
, o1 H) T! M: s6 [# `( O' O) _! s        i++;
) W  j3 i! K$ O        if(i==1024)2 w( T/ V* f. X: P& _8 s+ T" m2 A' ]
        {3 Y% e$ c1 I6 P
            i=0;
- T, S5 @0 [. M5 M8 |) D            j++;% F1 A/ D9 E. U( s- u
        }
' i7 L6 h7 r+ r7 e+ Z1 P; h        */
9 m7 ?: N9 A5 p! R4 M+ A' V' P6 i4 z) p2 w9 E" v) s/ b
       asm(" nop");3 l8 M# u! Q) w7 d
' D! }2 c0 N* l: a& o& {$ H: @
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 c9 j* D7 \$ J7 j8 i- q) c    }
2 h$ X+ N1 m% e+ X/ O7 s
/ a8 c4 @: W( e2 ?  X; J    /*检查UPP传输的数据是否正确 (loopback modes only)*/
" @+ n9 n& t) T4 s: Q$ s& D    //UARTprintf( "i=%d\n",i);; N, m8 g5 @) c
    //UARTprintf( "j=%d\n",j);
9 D' F- t9 h  B6 m2 ?    UARTPuts("Data mismatch in buffers.\n",-2);
! g2 b2 u; t; h: u    if (upp_interrupt_count == 2 && upp_error_count == 0)9 ]  `' B3 A# I  y$ g, U
    {
7 r+ c% n5 y9 y) K8 s        for (i = 0; i<upp_frame_size; i++)
: w0 L! n* P) g3 E  v( ~* n        {0 y8 P. W, z/ y
            if (upp_buffer_a != upp_buffer_b)
9 J" `, [% o: b% V) a            {6 r3 z( [" L! a& e" F2 v& q
                upp_error_count++;
( Y" l, O5 @* m  G            }
) Q1 e0 G* o( I4 r1 w7 c. y        }6 v/ r1 c& L. ]5 Q' i  E
    }
, w" x( G; y" n& ^( R9 r, a. a; F7 a/ O1 s6 g* b
    /* 报告通信结果*/3 S" j, p, {9 j  y  |& Q
    if(upp_error_count != 0)
+ }7 m: y4 p. e0 i        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( s. F7 E% s+ J* E6 |# B  X    else( d* f( V/ S) k2 ^4 S& Y4 n' D
        UARTPuts("uPP transfers complete!\n",-2);
# ?; r8 N; h% v: S
- ]3 F! f) j  B) O, V    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ ]5 x: d! U1 z7 ~- _4 \    UARTGets(ch,2);
' _8 v2 q6 {" M1 K5 f3 u* h    UARTPuts("\n", -2);
: T& D% U4 ~7 p5 P9 o  L+ z3 p, V* t' d# o7 [: v& C8 F
    if(ch[0] == 'y')% ^  |9 b7 i' g- b; }2 a
    {# c+ T+ r( K# S- l
        /*打印全部读到的数据*/
  [* H+ K7 f7 e4 _. ~7 Z6 G        for(i=0; i<upp_frame_size; )* X. y! Q' |& d
        {' k5 b( D, s: q: @# Y2 ^0 t
            for(j=0; j<5; j++)
$ t$ g6 j( I/ c0 H. U- S6 g            {, e" c  Q* h+ c5 V
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);# E: K, _+ R/ M1 U6 M' q' O2 n' w
                i++;* [# Q% {2 s/ P1 D; G7 \+ p- q  ^! G: k1 y
                //if(i >= 4096)5 P3 e# S0 X; U0 Q( k
                //    break;0 ^# F) m1 r+ I  B0 r

* n1 w0 q9 U$ Y* c5 c            }4 E8 J9 e5 G5 U7 z7 f
            UARTPuts("\n",-2);5 U% ~9 q# f* v' i* k1 s5 h
        }
) x/ b* K; l( E" h# Y    }
$ l# r9 A" k% Q: S+ n$ q" D/ n) x0 u+ Y  c
}
4 U+ J6 L" b* ~4 {

* v9 k2 w0 U" z1 [
: H' N4 Z% D; p7 U8 l' v" \
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 A, m2 B: Q: ]
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; |! w5 c4 C/ L- k$ y+ d0 A





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