嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 h2 g4 _  V2 Q  F( b9 w0 i
Void UPP_TASK(Void)
+ H% }4 M- _) r8 r6 W{9 R; Z- O* g& e7 O/ _

  y: q1 a! Q1 Z/ {1 @  l    int i,j,k,target_int_count=2;
/ f$ E  h, l/ A; ]  x6 W. y    char ch[2];/ l3 G+ N+ X# V( ~8 w: i

3 q- m- x3 b, H5 S% E; L0 x  s1 y7 c) R( g

- \, O; i: U$ D0 d6 l: c% J    upp_interrupt_count  = 0;
, v! }2 A( c; W- l# T    upp_error_count = 0;
; C& g+ F+ e. Y+ e$ i9 a2 y$ I" `" K- _6 K+ F
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; X0 q2 l; {. R  i( o    // Initialize data buffers2 f& }( v) u7 P+ q4 F2 a
    for (i = 0; i < upp_frame_size; i++)
7 w1 W/ |* }0 w+ X9 A    {5 A& ~' \6 A, J  m1 @
       upp_buffer_b =i;; T7 W" e$ N( C( I" c" |/ @; H
       upp_buffer_a = 0xDEAD;7 P3 T  M9 G1 K- W1 v/ [2 e) }
    }
7 a4 ~. j  R- t( A0 Y- ?# M3 ], Z" [, |1 o: P+ [/ _3 E
    //for(i=0;i<1024;i++)
3 p+ L# N( ?$ R# A# G    //    temp=0;& t; h' Q- m3 z% ^( u4 U1 s+ F' K2 {  ?
1 l7 h$ a9 r0 V
    //UPPReset();
3 U8 U( a8 ?* G7 @; t4 |    /*启动UPP DMA传输*/
& J, P+ u9 r% J4 r' K    UARTPuts("upp_prog_dma_i\n",-2);
$ N4 X% n" j( C* F! L, \    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
  N* v4 A- G& W  F) a6 ~    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- F4 A% S) l+ X# n) Q% \
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- H" N* N2 h0 Z. ]" {; f. k  Q) \$ m; }4 |8 r
    UARTPuts("upp_prog_dma_i\n",-2);
+ m6 ~! U0 \: ^9 W; N' s" i    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) `! v. o: l' V, w1 g' q' w
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 T9 N6 A  U  E7 G, x* r
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& ?: `$ ^9 h5 r; S  d9 u
4 C# O: p. [2 w8 u    /*等待UPP传输完毕*/6 U4 J  c2 I, v4 Q
    //i=0;
6 |" G) u% M; I  t6 R    //j=0;  z7 d5 O& h8 D0 Y
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 q+ j4 K' w' S9 y7 r7 c
    {0 c$ v; j; V: C4 |. n
        /*  测试UPP传输的同时操作普通DDR数据. S# c; q6 _) |  ?0 R  N
        temp=i;
4 r* a4 V" X' |        i++;: U. y2 ~, H% L3 c/ k8 |
        if(i==1024)
) s' ?$ V) y7 T: h$ i) H7 E        {
! h. q( y0 \* J9 T1 |( m. g            i=0;
- m# U' Q& M! I+ J6 G! H7 {            j++;2 [6 F6 L4 a, ?: p4 b# h
        }, W* d2 L. ~/ W* N: l
        */
; `! }1 W% q) |6 U& Z$ Z
/ p% f4 U5 ^5 i% w  s) l       asm(" nop");% c& ^/ i: l6 K- Q4 W* N7 i+ i
$ Q6 b$ W0 E* Q" }6 A$ l( I8 q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 s2 `' y$ w# C1 x1 I8 @    }. `/ s, p* U* E1 x: Y

0 U4 F: Z/ |+ x9 t    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. H8 [  _! H& g9 x' B( m% P5 [    //UARTprintf( "i=%d\n",i);. N0 I* _/ U& `3 s) j$ A
    //UARTprintf( "j=%d\n",j);! R1 \3 m1 t: N0 J/ K: M9 u
    UARTPuts("Data mismatch in buffers.\n",-2);
( E- |3 ^0 Z" R, y/ P: t- M) W    if (upp_interrupt_count == 2 && upp_error_count == 0)4 }* I. C9 ]" @
    {. f% u1 V$ I, ]4 h/ y1 }& \
        for (i = 0; i<upp_frame_size; i++)' q4 A' @* V8 M
        {
  k% L$ z: A0 K! E& F            if (upp_buffer_a != upp_buffer_b)! }$ Z+ c2 Y9 k$ u
            {$ ?( b0 J% {% m1 w3 o0 ]
                upp_error_count++;/ N5 t+ S: V' d5 q1 H( F8 G. }6 m
            }
0 M* N$ X/ f3 E: y8 u/ d- s        }5 u1 r9 `5 f8 l# Z* L" a* h# b
    }
  l8 U. n3 r, v# q4 }; @* W& |! o( R5 V  _: z. s5 j
    /* 报告通信结果*/; p7 H% u5 K4 a; I
    if(upp_error_count != 0)
( t) B. G: U1 |. [8 O: w# l; G        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ }7 k" ^" W5 A0 s" l3 }/ ]
    else$ |/ J6 ~0 w- ~' f
        UARTPuts("uPP transfers complete!\n",-2);0 G& q3 g% Z( c# k) U) B

7 Q" c* s" I8 Y; c) @    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
1 S1 ^6 ~' ?+ _' L    UARTGets(ch,2);
+ Y3 @6 j, k$ w# O    UARTPuts("\n", -2);6 ~3 F2 g- \2 p9 M  d
4 x, \0 A4 \5 z% N' y
    if(ch[0] == 'y')2 q, J+ g; E  D6 U9 ]
    {
! W' o: l: k1 A* s- ?        /*打印全部读到的数据*/! f8 {# R2 v2 d6 ]: _5 e; {
        for(i=0; i<upp_frame_size; )3 Q* `+ m% s' j
        {
6 {7 D# u8 e$ d" I! I; o            for(j=0; j<5; j++)
9 u! _/ u9 `. C% v& |            {
/ x3 q/ E5 N  ^: `7 }                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ E$ s7 |7 G7 c, b% d8 U6 q
                i++;
4 k- z) F/ C! {* h9 r3 `$ l7 O3 U                //if(i >= 4096)3 L' V9 C+ X- v. Y% ]. c% f  A
                //    break;: J5 e1 x( @! l8 U

! O4 c/ Z/ q0 F8 l! u6 w7 h            }: Y( I; `8 q, U) _
            UARTPuts("\n",-2);  |( b  F: q3 g; F" S$ [* K6 i
        }' T) J/ ?: }4 L0 |
    }
" [3 F. _0 _4 x9 t0 I: b$ C8 v7 a$ Q' d7 P- ]  ~
}

6 K2 C, F2 y& z7 U, a; j

  \4 \$ T2 r! r* E- E5 N1 I5 V7 E) U0 x8 Z* i+ q4 T6 I: q* I/ o

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 u3 N! C: V. B. r* `- A" F
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ M( f- F" k. M& ~




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