嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?6 W' v8 L/ I: f% j6 u
Void UPP_TASK(Void)
1 O0 {- {% V7 z# ]% V{3 N- I& V; A' {* ?* W/ x0 R* U* k
8 V& Z8 T% S! T- \
    int i,j,k,target_int_count=2;
1 v8 p* T$ n! r: g5 S% v    char ch[2];+ f& j! y5 u: g. k. s, p$ C, f

8 s) p( O: e9 {5 _4 D4 W: e$ Y  f# C/ @- ]1 {' U* j# L; B, ~

) i. a/ G  w" J  c    upp_interrupt_count  = 0;
. U( k. {2 {1 X4 H! b& P2 n8 ?    upp_error_count = 0;( ^9 h' Q3 }% P6 |7 n
1 s, Y4 A9 z4 U% M
    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ |/ P2 N$ \  k* w
    // Initialize data buffers3 E8 Q& A$ T" B1 Y1 I9 N+ m" W
    for (i = 0; i < upp_frame_size; i++)
2 u2 _. b% ]. k; E* J    {
$ H9 d7 k/ X& A$ A: ~       upp_buffer_b =i;/ s! }, [5 B" m1 a7 l, U% n$ @
       upp_buffer_a = 0xDEAD;
5 S  V' D- p# M: j    }- g( A+ T- b4 C/ n. C

# s% {* Q2 A6 D    //for(i=0;i<1024;i++)5 P/ V: y/ S0 f8 H; y
    //    temp=0;, g& z; H0 {+ |  y0 p( i

7 ?+ n. m1 {' `% ~    //UPPReset();
  D; }7 c  ?6 \$ g    /*启动UPP DMA传输*/6 y- l6 T% Z7 V% K
    UARTPuts("upp_prog_dma_i\n",-2);5 U6 z5 |( M6 g9 C* N( M
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  A0 S* A) J( Q- K6 A+ h/ m/ Q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! ]* J& L% E! M1 n7 O1 q! Y4 S
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, c! |& A' u! D* @- J
  y& B* J2 Z9 _- A! y) R    UARTPuts("upp_prog_dma_i\n",-2);
( o  L- h' f( b+ J; i7 M# g    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! _2 U3 E2 O( o- p! I. `2 s& q( K    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, {  E3 q# S! k    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 q  R6 N3 k' p" k

$ W- w- X/ z: A# I$ O0 M& H' b    /*等待UPP传输完毕*/( }' N4 q5 q. O% ?  ^: }- @
    //i=0;
* b1 ]9 ]$ C0 M) n, u- {$ C- h    //j=0;
+ v: r5 G2 F# o* I* S    while (upp_interrupt_count < target_int_count && upp_error_count == 0)) Y# q# _3 j- F( H% ?) c
    {6 P& k1 a* H, U
        /*  测试UPP传输的同时操作普通DDR数据
$ T4 \; m/ _# ^! G' Y        temp=i;, x7 h2 |  h/ w9 L- N, P
        i++;4 i+ k% I" G* c
        if(i==1024)( q! x  N' N, x) p
        {
1 U% I$ e0 ~  m) U' C            i=0;# Q& D# n- N, _) {; P& p3 }
            j++;
$ u( a& n5 U( h- R0 _# c# k; D) f        }
- e* Y9 o3 h( ]3 P7 m* L" U7 _        */1 ?5 B8 A; C, l' \2 X

; B' `$ X. T. e       asm(" nop");0 d8 N. T" _# Q* m

0 `6 V( X" E0 f$ [       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);+ j, n* R4 {6 K
    }  B% f9 [' v' H2 E3 o

: G9 c' _. m$ q2 y. l5 A    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ W% ~1 S; @' ]9 K    //UARTprintf( "i=%d\n",i);  H% F  i5 K1 @% D
    //UARTprintf( "j=%d\n",j);
3 a( a! i' n3 d    UARTPuts("Data mismatch in buffers.\n",-2);
5 e) @8 @3 W- b" ]' ]    if (upp_interrupt_count == 2 && upp_error_count == 0)8 v: M. s" C' D0 A+ I1 U% b7 e3 n
    {+ i4 {8 X* V9 r* ?! R' q" I
        for (i = 0; i<upp_frame_size; i++)
1 X6 B& e2 z& d, `        {
  F( \4 l* f* q5 n. R$ T            if (upp_buffer_a != upp_buffer_b)
0 L6 w( |+ y) ?: ^! _# p1 N            {
; ~$ ?4 R# j+ [4 W1 S2 F: B3 K# N                upp_error_count++;
/ `, M% E3 n" e" c6 O            }
! S9 H( ~$ ^2 c% g# u0 `! @        }
, z( F( P( J4 d! U  n7 A  K    }: H1 j# b8 Y- ^- F+ y

( I- w' e- W  e4 p0 h    /* 报告通信结果*/
  r; S0 b$ }0 n: w. H2 h* ?    if(upp_error_count != 0)
) O) b) H( D; \& h" `# Z* \        UARTprintf( "upp_error_count=%d\n",upp_error_count);) I# J9 o( _* w: S+ z2 o5 u
    else
9 D. C! F! c/ `' c        UARTPuts("uPP transfers complete!\n",-2);8 J: k) K0 |1 }# E" K
+ |7 v$ L& y% c6 B9 B
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 e1 U  t' S( r! G8 e
    UARTGets(ch,2);
8 w; n! A6 }5 k3 p6 h/ A# m    UARTPuts("\n", -2);
5 _2 {. P; S% m
& U. p! ]3 e  l5 y    if(ch[0] == 'y'); G" P' D0 I6 A1 ]- I
    {" Q3 C: Y4 d5 i, e
        /*打印全部读到的数据*/
; c  O+ p. u' K8 o& I        for(i=0; i<upp_frame_size; )& Y) M5 v+ H, Y4 n5 I
        {' L2 E, @2 U! n% Q- k
            for(j=0; j<5; j++)3 B1 V9 g4 n0 x$ t; G- R
            {
# u1 O6 v. i; s& `7 F  H9 l                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. S4 \, s% z1 S5 u                i++;2 K/ o; }0 ^6 G# c8 b. I
                //if(i >= 4096)2 J; _7 U7 k7 P4 O2 H
                //    break;6 k7 S/ |9 G1 Q9 V& ?
: r; d6 i& S/ X1 ]1 L$ u
            }; h5 |# Y* X4 h& R+ |* ^) k/ s0 h
            UARTPuts("\n",-2);
2 ~4 `; ^% |! d' |1 M5 d0 T        }
$ ]6 j6 X; b) v6 r- \( y3 p5 y    }3 f7 q  `/ n) p/ M
' O7 N% W4 |: ~9 ]/ O& F
}
, V( m9 l& w: e. o2 s& C6 D
' {4 D' z* j, n/ J

, t% \5 n6 l- A7 W2 o- I7 E, z
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* Z1 M/ @" g5 K& l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' l# o: @2 b3 ?$ _7 L, J- z




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