嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ U7 z5 R% Y* J6 |0 E2 p
Void UPP_TASK(Void)  W5 D7 o% f" ^4 M$ Z
{
) }2 Y! p( Z) n3 ~; e; {( E2 x' P( C& L1 R) X) C2 h  g( @- K
    int i,j,k,target_int_count=2;
; n5 b  F1 `* {2 a  ~    char ch[2];- S" b. }; P7 f4 [1 d( H& s2 w
& R- d. E7 v$ l9 c  D  H* G
7 J) a0 p( ~2 H3 H8 \* P" `. |
9 L% R& I6 q% U8 z6 C9 x" A
    upp_interrupt_count  = 0;, P  S# g( i+ y4 t
    upp_error_count = 0;) t" m) C  u( G/ l2 q6 w# c9 A8 D

* s6 J* d& S% X7 b) {1 e4 N" F7 b    UARTPuts("\tResetting uPP buffers...\r\n",-2);
& a7 _5 w% S% I# D/ D    // Initialize data buffers
- E# k( f( D" f    for (i = 0; i < upp_frame_size; i++)
6 P1 @& G8 q: p2 ]0 S. C* W8 x  k+ |    {5 G. G  k, n3 k/ @
       upp_buffer_b =i;
# m; U" q; @6 H  H* R       upp_buffer_a = 0xDEAD;- a# D6 E* k% H) p$ A" a' ^
    }
$ y" {  N" C1 J
5 y- s2 w  C0 `4 J    //for(i=0;i<1024;i++)
9 t  g5 |3 F/ @) b" N    //    temp=0;5 o1 F& `2 F5 ?# C
+ R, v; x- ^' a1 T6 ^9 c
    //UPPReset();
  h+ Y, r  K" w* I    /*启动UPP DMA传输*/* ?# `/ S9 K: e# y9 T
    UARTPuts("upp_prog_dma_i\n",-2);
0 C8 Z5 I. F, P3 l" r, J    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# c: z! F  l4 V
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% `! _# w, t2 `- C: Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( W  j! }( x' }" |  u0 m
/ `5 j" t. i! T: @# w$ `, H8 H5 u    UARTPuts("upp_prog_dma_i\n",-2);
$ h: `# w5 D2 U- P3 L    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;8 t) E/ B4 w* B2 i( F
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 [4 k# A7 g% p. `; p1 w    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ h7 N! x; i: n
; `. n0 o1 Y! G0 e
    /*等待UPP传输完毕*/0 p$ [2 M& P3 }/ A
    //i=0;" O! N3 X3 A: @' L: d, |
    //j=0;1 W- A7 I0 S9 g3 T: h
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 p( c" I; K1 u3 ^
    {9 I& A4 q9 X2 V' D( u, V
        /*  测试UPP传输的同时操作普通DDR数据  j$ V; E# V( n6 w3 F
        temp=i;" [, ?# R# C1 f8 @- I
        i++;
& y0 C9 A$ @% T# L! O* h; ?* r! M        if(i==1024)8 G8 ]3 ?1 y0 J3 l# b
        {
9 t! I& F0 \# Y1 A8 U            i=0;
1 ^8 n0 c& i7 P            j++;4 W7 ^* N) C2 D$ n
        }6 k& o+ m2 c+ z, u
        */
1 E6 s! Z( j; L5 O8 o
5 Y2 S$ _$ `: c8 K$ L# ], Z- d       asm(" nop");
0 i; v$ j2 @. O5 R1 v, Y' r% L7 a* O" i/ K
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, x1 M# k3 ^1 S. N& h8 j- _    }7 l- t$ x3 I. J0 p% A, r3 ^# c

. u9 u. K7 U3 t; J3 E9 q  I( f    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 i0 U. v( g* m& f# x6 j3 c7 B2 j) c
    //UARTprintf( "i=%d\n",i);* ~8 J) R6 |% }6 _2 Y" r
    //UARTprintf( "j=%d\n",j);- f! e9 G. Y- {3 X
    UARTPuts("Data mismatch in buffers.\n",-2);
$ P) O! S+ R+ F    if (upp_interrupt_count == 2 && upp_error_count == 0)% J7 l0 V. [* t' x
    {
/ F# C2 p1 e0 a% j8 W! j        for (i = 0; i<upp_frame_size; i++)/ R5 Z  s' B. x: b
        {
: N4 N9 X) w  U! s6 w            if (upp_buffer_a != upp_buffer_b)
5 z2 a. f& x) a9 o1 M8 c; t3 e. q            {
( W/ ^& {6 n* B& M                upp_error_count++;
; s. Z8 @. o4 {: W6 a0 d            }
$ X' D$ J/ j7 M* p6 E- r7 M+ M; a        }% T) n- ?* O" O: ]
    }
" }, ~. W  {% n7 n; X+ H' w  P7 R' o0 r, [- I1 s7 k
    /* 报告通信结果*/% ?% I) r2 P, ?) ?$ ~
    if(upp_error_count != 0)
; V, O+ r) e5 g, V        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 a/ v$ A' k2 t  }    else
+ m. `7 c6 X. {        UARTPuts("uPP transfers complete!\n",-2);
! X; Z) [3 S1 u2 a1 z% D1 N8 S
% Z' P0 H2 U; z  G/ r+ a9 P) ~( A. \3 W    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
! k. Q; w! b% h$ J- a    UARTGets(ch,2);+ w. i# A/ Y& u0 |3 y
    UARTPuts("\n", -2);
- w- A: h* d8 n+ O" Q3 n+ C" M4 P! E7 O' J' ^3 p
    if(ch[0] == 'y')
# K' R- ^2 I  |% u  Q    {, K' C+ g1 x" m+ y. `  a; k; K- @
        /*打印全部读到的数据*/$ P) r! ?8 M8 y# r
        for(i=0; i<upp_frame_size; )* z  `$ B( x/ l; V9 @6 `$ X
        {
' ~" j/ P; C$ @. Z            for(j=0; j<5; j++)
- k; N6 v- l  s! d% k  `' w: k            {1 U: L3 i! O" v
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 x% i  P* ]9 G) ^                i++;$ E8 n5 s2 R9 W- g3 `8 W" y4 w& d
                //if(i >= 4096)
& k* W+ R% O  S0 N; A                //    break;
% i. _9 Y4 t8 o: |. J
9 ^. o, W6 m9 ], V& O2 K* G( \            }1 i& K' y4 M) Y! R' I
            UARTPuts("\n",-2);
4 K7 g+ g0 b# p; r        }$ q' ]( P! g  Y& f
    }1 `4 g$ |7 Z/ z/ G' h# Q. U9 V/ X) o
3 z  f- p+ x7 d) }) a' s
}

" q6 |; h+ A$ S/ a5 K7 @6 w5 E

; E5 _- t" e2 h3 s4 r' ~1 D  x- x0 x% _( N7 x  |2 U( h

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 k  Z2 U6 c6 Z* S8 e

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ J/ c9 t+ V  s2 ]* d) q" i) ^




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