嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?1 ]( u! K: m7 k# }2 F; C" c
Void UPP_TASK(Void)
" O( s5 i) z  ?/ P{
2 i( A1 v& w2 X1 ?1 @3 |# {; {, l. {: q0 i- d$ ]
    int i,j,k,target_int_count=2;
) H, ?$ b+ [/ L" t    char ch[2];' S0 X/ W7 ]1 S3 v- k8 D

4 Z9 i# V- Z" l! t1 \2 {" N5 q8 y$ @/ {" i/ H  P

3 n' W& Z) |+ n2 K    upp_interrupt_count  = 0;/ v0 ?8 h( B6 z# r( Z2 u
    upp_error_count = 0;
6 Z; l% C9 [$ y1 p3 y( c% i7 a$ P" V
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ Y3 I% `: }" v! X) Z! u) x8 l    // Initialize data buffers
4 ?8 u, V$ h% E7 ?8 Q' g    for (i = 0; i < upp_frame_size; i++)
+ E4 E# s3 d4 z; a! u    {
# _) `3 C. d; m: p* w2 l! j       upp_buffer_b =i;: k( o8 k5 U7 m% w8 q3 C5 i& K
       upp_buffer_a = 0xDEAD;0 ]. [# z, z5 Q# W: ~) {
    }" }9 h+ A$ B$ r9 a7 h
( S/ `- ?2 w7 \: D. w" a
    //for(i=0;i<1024;i++)
/ U( j# X, l) f5 K    //    temp=0;
) v1 U3 w- Z7 d" E" z/ X' C* R$ L3 v- Z1 d3 p, `8 x6 z& I' k$ }
    //UPPReset();
" {% ~6 d; `0 ]8 i( s& H    /*启动UPP DMA传输*/' R1 F1 X4 ?& k! a/ R8 X
    UARTPuts("upp_prog_dma_i\n",-2);
( U, W" P8 [+ [  Y- I0 w    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 j# I. W) D1 V
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: S  G0 P) R0 M2 D5 g" I7 X
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ \3 E+ q4 ~; U; W+ i) a
' x! F8 r' u- y
    UARTPuts("upp_prog_dma_i\n",-2);" D1 X6 S- ~) F
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 |) {1 v' O9 B1 C& M    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* ], ~4 K7 q' T  N/ l) ?! G
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# A8 H" G& r' H! a; S" I0 f: v4 J  x3 ~4 ?8 ]
    /*等待UPP传输完毕*/
6 ^6 k: X4 w" l. q! o    //i=0;
; a- h+ S, k7 w4 ~    //j=0;
* H9 u. }( Q- S& P6 n5 h: c; y  i    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* v* U+ m! ]* d8 Q; S8 A' e
    {1 {# R2 V1 \. X4 p2 ~; I9 _* l6 l/ ~
        /*  测试UPP传输的同时操作普通DDR数据* y8 Z/ k. K. n
        temp=i;
5 c' b7 s# t* I0 G! l        i++;; n8 r3 r- H% e5 r& t
        if(i==1024)- `( N" `, D- q1 P5 T5 P
        {5 |) k) B% p0 t1 s8 b
            i=0;- w" ~8 j/ y) [; x2 N/ s# ]
            j++;5 P3 A6 y3 v( |+ N
        }
. O: l! r  m4 G7 {  A9 V- M        */
) Y% P) J1 p# j% ^( t6 I. m. t* \9 p7 F% [* t/ q
       asm(" nop");2 B& X$ K  F& v2 K

4 N6 s2 J( B) k, z! T       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 S" J1 ?0 Q+ c
    }
) q+ Y6 i8 I+ ]: s1 m
. S( V; Q7 F) R    /*检查UPP传输的数据是否正确 (loopback modes only)*/
; l7 C5 G3 A" F' r9 m    //UARTprintf( "i=%d\n",i);
1 c3 ^8 J& R; V    //UARTprintf( "j=%d\n",j);' s) }3 m5 J) p7 G6 P5 I
    UARTPuts("Data mismatch in buffers.\n",-2);
4 D5 W- Y; }  D% w& i0 b1 d    if (upp_interrupt_count == 2 && upp_error_count == 0): o4 ]5 L8 ~1 R( R2 i! @  u
    {
1 n+ S) C2 d( R7 }        for (i = 0; i<upp_frame_size; i++)5 X( q. S0 O8 Q& A
        {9 [! V. N3 j( N3 t4 `( f
            if (upp_buffer_a != upp_buffer_b)+ g6 R0 F' P8 w: T6 y
            {
, S" C/ n- @/ Z! F; k                upp_error_count++;
) d- P3 u4 r: p! D8 Q, @            }1 A9 _4 _2 q3 [2 t
        }
+ t0 r. Z8 D) [7 o* z    }4 w5 ]3 G9 e/ \
; x; y4 H9 M& r3 a& |
    /* 报告通信结果*/6 M: n8 E  m6 s  d) \: r; v
    if(upp_error_count != 0)
$ V3 P" S: W8 y: N$ }        UARTprintf( "upp_error_count=%d\n",upp_error_count);0 A+ G# T# B' m0 h/ l
    else1 `3 h3 i# Z; A& o& X
        UARTPuts("uPP transfers complete!\n",-2);2 I$ Z+ M2 I: c) Q+ _9 _( j
" r5 N1 ~! f4 J) a( t: p. O
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* `! J7 T7 J. m9 U    UARTGets(ch,2);
2 i) ?/ z/ {4 g  Z! j/ O; |    UARTPuts("\n", -2);& Q- F" i! u: I/ I4 r& {

& E9 E3 U" u% H' w; s0 @( Z    if(ch[0] == 'y')
: u$ b+ I* T- @: O: w+ a" [    {& [% ?& \4 k. _, M$ z
        /*打印全部读到的数据*/, H, ~) W  t' T8 l
        for(i=0; i<upp_frame_size; )
+ N3 U5 H% \+ ]. t1 Y# p# d        {
, X! r9 G/ m( i# _$ ]1 u8 M7 \            for(j=0; j<5; j++)
9 B6 Y* K, P1 T1 ~! L            {
' L- a! [- a! ^6 o; r% q3 M* J                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, P! c9 B3 A) r# ~
                i++;. N0 R. y7 ^0 K, ]: p
                //if(i >= 4096)
/ D7 y+ L7 t2 F) d/ |1 x                //    break;
4 b% c0 [, `) @/ z
2 T  o& O$ ~7 f3 c' s' m9 H            }
% e; x, E9 T6 Y( i8 J5 I            UARTPuts("\n",-2);. H5 V$ @/ W* O9 k" p/ b8 Q, K
        }
5 `9 H- d2 ]+ {  m2 y    }
9 M; o! n: m4 E' O! N4 W
! z: ?* k) T8 b. ?}

5 U& J" M3 v" o' s
. c5 Z& n# J. B6 Y

. d5 Z. f2 ?; D  y6 ?1 B
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。2 _; P' j* h; {! Z8 ~  ?$ J

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 K; P/ A0 U' ]! f  o  @




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