嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: h& d& `6 a1 d$ C2 J  Q) X5 ?1 A
Void UPP_TASK(Void)
1 {1 M$ u2 ?, I9 ~3 T{
; Q2 x8 o3 M# p2 q# f( g3 y" |: ?8 U8 F2 g0 }0 C" |5 M
    int i,j,k,target_int_count=2;' x$ v/ c9 Z% L. Y+ t  E/ Z  z* d
    char ch[2];
5 B3 j1 ~9 E& g4 g' x
4 K$ I; z# D4 \! f: w2 \. T. D" V8 k3 A

  c" X4 P; c  C6 \* q0 I0 F    upp_interrupt_count  = 0;
% J( K1 t! W' F/ F    upp_error_count = 0;. q7 v3 ~3 v( d; `$ m$ S

7 L! d8 [  W( m2 U. Y$ Q& ]! M    UARTPuts("\tResetting uPP buffers...\r\n",-2);! u! g& v4 H6 w
    // Initialize data buffers, X. d  P3 G+ V6 C' a  W
    for (i = 0; i < upp_frame_size; i++)
3 `2 V, ]1 F9 K/ F' G: F    {
. L  i' u) k6 t/ c" G' ~& R  _       upp_buffer_b =i;
6 I$ ~- S: L9 \; f       upp_buffer_a = 0xDEAD;; ?, J% D; _( ^; L" q# `+ e+ ]
    }* A" D( Y) }+ f9 w% W0 E9 i
5 m" Y& b* A  T+ c- K  P8 i. z
    //for(i=0;i<1024;i++)$ e  c! T! h9 j
    //    temp=0;3 S0 g9 B4 c) }* V2 g
8 `5 k! F. N. M" z4 X
    //UPPReset();8 b- w* U/ o7 h) g7 P2 V
    /*启动UPP DMA传输*/' {! T2 |0 s# `& V0 g
    UARTPuts("upp_prog_dma_i\n",-2);  ?5 ]0 @+ |4 c% ?/ E
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% j7 x& o2 j* G" b, N/ G  T    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( P; e3 O6 }# o& ]5 ~    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  l& p4 D0 R; u( O4 z& E& X: P+ c+ p7 a  |% V. b( R1 e
    UARTPuts("upp_prog_dma_i\n",-2);! S2 W, J. x5 _
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ u1 h0 `+ N  d/ j3 C1 H$ w, h
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, e8 [; Q: f% {1 D: n" q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- }& f$ \  R( N9 q" E0 Y( }( z; k# ?9 G, [! `
    /*等待UPP传输完毕*/
  B  e, D' m6 n- m" X# J( P    //i=0;
0 ^4 I( i+ b" \    //j=0;
8 q* ^+ J7 U0 w- G0 \* P8 X* B    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' H5 L. @& l3 A4 x7 W" o    {0 e6 h" V( e- z' V& f
        /*  测试UPP传输的同时操作普通DDR数据: Q5 P/ I7 ]2 c- y
        temp=i;) o' z# f. n' K
        i++;' [4 Y! |1 Y1 s
        if(i==1024)/ h4 m' @. V+ O- y! k
        {
3 U- n  }, Y2 L, v+ k; X            i=0;
, O9 S" q" W' e! x7 ^: t* O' V            j++;: ~6 j( u4 n& b7 P
        }
, [6 Z- a5 l9 R/ I) b( q3 k        */
; O/ ]7 _2 r" x8 Z8 P* Z
+ i8 E: }3 h: ]& N5 `4 a       asm(" nop");3 z4 R+ z! e) [, V6 s% k
1 O. `6 Q" C! ]' V
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) N0 J" g1 O8 C' x
    }' A( k) \! O9 L9 Y" {, q
: m5 E: R0 y$ Y8 I% q* J& D, v% e
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) A; A# f7 R/ w) M    //UARTprintf( "i=%d\n",i);% \( G8 |3 N3 q: D4 e! w
    //UARTprintf( "j=%d\n",j);
2 L* d+ `8 D- w; N! P- y5 t  F    UARTPuts("Data mismatch in buffers.\n",-2);
$ d  k7 S8 n' E" Y3 T  A$ ]" v    if (upp_interrupt_count == 2 && upp_error_count == 0)+ n+ U3 B, j, P% Q6 J$ N' V" z% D( ]
    {
& \2 l" u9 b; s" `0 W3 _        for (i = 0; i<upp_frame_size; i++)
) c; ^: O5 R) Q, E* W        {0 f- S8 m! P/ y% B) Q3 M
            if (upp_buffer_a != upp_buffer_b)  ^) L% @- {8 w" g% G/ `
            {/ T5 Q8 h. |9 f1 m6 n# d1 [$ V5 M
                upp_error_count++;$ s/ o7 G5 {/ ^" T
            }' R+ V9 `( a: h2 O# F5 j. K  `
        }& f3 ?+ t3 r' {# s" m) V
    }
2 n. G! k& c" O- M2 f5 D# k  Y% N; {( c! C$ h
    /* 报告通信结果*/
9 w" A) [0 M8 C4 p9 V    if(upp_error_count != 0)
8 D9 H3 R: |8 b5 d6 B        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 [: i8 \3 n# i0 x0 q; c
    else
3 U' c2 Z! p; E- z8 q  }! w        UARTPuts("uPP transfers complete!\n",-2);
- ~- c3 H3 G' x9 ^, C, K+ }% b. y& l& g
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);$ F& ?# U% B. `$ \" i+ q# H* Y
    UARTGets(ch,2);
1 S  p6 n: @1 |3 S+ x  n" N    UARTPuts("\n", -2);$ T# T0 x% ^: V" Y" y
: ^' j5 u( ?0 n5 R7 e6 V
    if(ch[0] == 'y')" c) ?5 }2 K* I" L' [# [" y
    {; @- G5 H9 L# f0 q' n' @: r! N
        /*打印全部读到的数据*/" t# O4 g+ f/ u$ b' u3 e
        for(i=0; i<upp_frame_size; )
/ [* @: Q& g9 @' d+ w5 M        {
; b; u2 d7 P  u: K( x            for(j=0; j<5; j++)+ z& ]$ h/ B7 f  Z5 ]
            {" j  r9 l, N1 I2 d) ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
5 \& r( G1 F' J                i++;
: l* c1 e2 |2 @5 u' _3 _: g                //if(i >= 4096)
) ~/ v  y" W+ D9 c. s. t                //    break;0 s$ M2 [7 f+ A8 N% ?, W3 y, |
' I; g9 i2 p$ p
            }' [8 l! ?$ ~2 c) V1 f1 t
            UARTPuts("\n",-2);, O2 X4 ^6 J- A* A$ p; u" U7 t
        }9 T+ Y6 b$ A2 c0 ~0 d
    }# |6 h# ^  r) s3 H1 L
' n$ J' ?$ `2 F8 D: @
}

* x! G: n0 G5 |' K) c7 @+ ~

: u5 I3 j0 W% ]6 @0 e6 u
) X1 ?+ o7 _0 ^8 H
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ F. F, }9 c8 g" o: f0 r4 e
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ k! [! |; p1 N% I' I




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