嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" Z, D. f% m" a# r3 [) X6 l3 b; Q
Void UPP_TASK(Void)! A, \$ W3 p- a# x5 z4 i+ N) R
{$ K  x, h% ~. Y. J% f6 z8 C- Z
: X/ t" P0 y, N4 t! Q9 _/ E
    int i,j,k,target_int_count=2;, I% s& f: {1 G' f+ B* Y
    char ch[2];/ |1 p- X2 S/ K- Y8 m
" U5 p0 b( @8 S9 ~- n' y- N6 R
! v4 h' J! F0 |7 ^! q

, h$ `+ p: T3 }# U" `3 ~# ~    upp_interrupt_count  = 0;
; E- W! w; B1 I/ G7 U    upp_error_count = 0;! e. h8 o3 ]6 ?9 Z# ^: ~
' K3 A) Q) }; B7 q& u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* ~4 B  {2 f2 @) K. d) y    // Initialize data buffers
$ a4 \3 m0 Q3 W) n2 q0 A    for (i = 0; i < upp_frame_size; i++): Z) Y9 `7 {* [- d2 q5 b
    {" R  P) k& z$ q# e( ~# ]
       upp_buffer_b =i;4 [' L7 v" G: y: X1 o/ ]2 G
       upp_buffer_a = 0xDEAD;$ ~" }% H/ X, w
    }9 F6 {+ F; U1 T2 j5 a
9 r0 h3 e5 z( J
    //for(i=0;i<1024;i++)
0 @1 A, S" y  N0 ~: U    //    temp=0;
8 O& L( l1 ]7 U$ h1 ?4 W$ D/ O8 m
    //UPPReset();
9 K2 [+ O: p( k- c/ ]    /*启动UPP DMA传输*/
# ?- f( d+ O) b0 l    UARTPuts("upp_prog_dma_i\n",-2);
. W% |3 K7 a+ s2 [8 A+ m    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) ^/ Z/ q" j) s, a' v    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( b8 ^& n; L$ S7 l
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ e; k+ P) q! |6 ]+ B, `' [5 T" j9 J
    UARTPuts("upp_prog_dma_i\n",-2);
; }2 A; e& |) N' L3 ^    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ Z8 `8 n' M: R4 m    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# c! l5 B, `& \
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, R7 K% g- Q$ T2 J+ v4 q

/ G6 z5 O8 Q7 m& n6 ?    /*等待UPP传输完毕*/
# m/ T/ }  F1 U3 s2 z  ~8 T9 \/ w! z    //i=0;
1 K/ N1 X/ J, H: ~9 P/ O    //j=0;
8 X" e% I, S8 H1 F0 q4 P( r$ q    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  V7 G! I7 h  F0 {0 _    {
( X* y. \4 n) _        /*  测试UPP传输的同时操作普通DDR数据
8 \3 E7 y0 h/ g0 Y4 N4 g" {        temp=i;
: D: G) _8 Z' _        i++;2 O& ?( f- g7 W  R; L; x
        if(i==1024)* k: Q. x, V  L% R' i, U
        {: \1 n3 p6 Z1 w& [7 ?0 N
            i=0;
5 g3 k: K: X3 ]+ w7 [            j++;
7 W1 Z) y" ]4 a# u) r- D& q* T8 c2 W        }8 {' s7 J( z, P7 c6 |
        */
) P) }6 k3 `/ O2 r+ B4 ^
4 @% ]2 e3 k5 w) R2 ^2 _; z  x! c       asm(" nop");
' L- x; t0 T5 j, d0 R0 s: m; j5 F" i2 K8 u
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 d- `$ C4 J* Y  x    }& o) C/ {" z# q, g: M
4 Q6 z/ Z4 W0 C( D
    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 w' l! h3 e7 k! U' t" x6 w
    //UARTprintf( "i=%d\n",i);
3 v- W2 l& d5 N' X. O% d    //UARTprintf( "j=%d\n",j);/ _& y- M8 S4 n$ B) c7 u6 ]- ]
    UARTPuts("Data mismatch in buffers.\n",-2);
6 ~& F& @( d! V/ a+ n. M4 P  k, n    if (upp_interrupt_count == 2 && upp_error_count == 0); Z  O) w: h/ `( I6 p, a
    {  x" g' k* k! h  x8 k  @5 P* r6 [
        for (i = 0; i<upp_frame_size; i++)
3 E. @& r/ U6 o: p        {- h! x3 e+ r% j/ ^& v( N, J
            if (upp_buffer_a != upp_buffer_b)
( ?" w( _( \" U0 t. }& ^            {- M( q& K# Z( N5 ?4 `# D2 W, U
                upp_error_count++;+ v. L2 W" ]0 n% Z
            }  z, z+ O' p: J- X4 Z6 B2 R
        }
* N8 k! p$ j0 l7 M$ P& V9 w    }0 @8 v5 J' x! V  p7 l
- {+ a& t" Y3 u  e. d# U+ j
    /* 报告通信结果*/. O! l( v9 D! m, b5 S5 G" Q0 F$ Z8 p! _
    if(upp_error_count != 0)" w! ]# V% l6 w* j" T* V
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
. ^# ?: X1 G  h5 U& r3 c  I6 o% k    else
" Z! z4 K8 h+ w/ l* W& G        UARTPuts("uPP transfers complete!\n",-2);/ B- Z- O2 x+ D/ G/ p9 F7 x) v

7 U, e7 W4 Z8 ^6 R/ R    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; c1 k7 X' z% a; O0 u, M% l( L    UARTGets(ch,2);
/ E9 o8 j- u$ }& q    UARTPuts("\n", -2);
2 T$ i( f2 Q$ v% |9 `$ E; L: E  Q2 [4 H. y7 ^+ h
    if(ch[0] == 'y')# f: @6 b9 h5 r" n8 W. k
    {
+ q1 r# j& z1 I( O        /*打印全部读到的数据*/
) L5 L( [9 U2 W% Q4 I        for(i=0; i<upp_frame_size; )
& @7 o  L0 j6 L1 Q/ j1 C- k2 t        {; G4 s3 w. \: P. Q& ~% d# Y& O( Q
            for(j=0; j<5; j++)
3 N- f2 `7 m/ P4 Y' J% ^* S            {
) e* P7 p; [! c( Q                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 g, Y$ O+ b# n
                i++;
1 e( D+ E# g) `" h" ~: s- |8 h0 s                //if(i >= 4096)3 o& S6 ?# X. E- j2 i7 e
                //    break;2 O% {( h. Y$ W: k  Q: w. k* }/ t
$ D! ]  d  S7 c! J/ m9 p. i
            }  F1 }( X9 c, o+ a, B" c
            UARTPuts("\n",-2);
3 H4 ?! N: D8 Z" ]* n; {5 C) p        }
3 |! k7 f! C- W2 P    }, h8 J6 _7 X) A( f

: Q, c+ D5 ~+ l) }- |7 L& ?}
% |! f( x# D1 T

. d' L+ f" C. n
- l0 T+ ~# f) b
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# Z- F+ J1 v5 x7 M7 P

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' L% T$ v$ k5 x9 H4 {




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