嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- v1 }' }! q+ ~& v* Q6 ^8 k* j( `+ P
Void UPP_TASK(Void)/ S5 v* I' w  S5 o3 _
{
3 E; `0 x! d) b7 y; D$ p9 ?! o
& L% a& \; n0 |1 c7 E    int i,j,k,target_int_count=2;7 s' q# O8 s& X, s2 y- b8 z
    char ch[2];9 l. |) Q3 P( Q% P' j) @

8 O/ \' o" f0 D* j$ f
* p' c) J8 e* d+ `. G  C5 w8 M% c; w
    upp_interrupt_count  = 0;
  r# I3 J2 O; `, f& k- D4 Q    upp_error_count = 0;
& h' n0 \' @5 ^9 F, {* c* F8 ^3 Q
" m5 E5 m' l4 s% M% ]    UARTPuts("\tResetting uPP buffers...\r\n",-2);% d- i7 [/ k( {4 S
    // Initialize data buffers$ F5 h' u" _4 z4 o: d$ d& z2 k
    for (i = 0; i < upp_frame_size; i++)
. @9 t7 l5 K: C3 R; m    {- t, s/ v0 q* q+ U1 s% E
       upp_buffer_b =i;
6 L8 K/ [6 r# I       upp_buffer_a = 0xDEAD;
' b$ r# Y2 m6 W1 d. Y$ K    }
) @! t( M# `  R9 e! N" X
% ^' B" R4 s! N# }$ q0 y    //for(i=0;i<1024;i++)
# m' I1 h8 W" _2 \) r    //    temp=0;4 h  \8 L! Y* ]6 k1 Z2 f0 H3 @; o
* k* g9 O7 i: P
    //UPPReset();6 K2 |3 j, G/ t& i' m" U$ i
    /*启动UPP DMA传输*/
* J& g3 S4 h) S& B    UARTPuts("upp_prog_dma_i\n",-2);
6 T2 H8 c" X+ `) D1 i/ `' o; ^4 p    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& ^3 Z0 W# P3 F$ d9 ^
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 i8 \/ m& h/ e* r, |$ {( S
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);( k& K& }4 G, n; R6 m4 R# d  L
, j& z! R6 P: Z$ i/ q& P$ G
    UARTPuts("upp_prog_dma_i\n",-2);# [- w3 r, Q  E/ G
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 [: h: A( T+ n" _0 b/ z' A    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; J  ?; j7 I& n) m
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 o6 ]& S" d& k6 J
3 C2 M2 [- ]. ]' M0 Z8 M    /*等待UPP传输完毕*/
' r) c. T( D7 m$ F9 B- f, S    //i=0;' a* R6 y# c3 E1 D9 G
    //j=0;
  o4 @% A' @& e' r# ]: V    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ _  X; {0 L$ N3 c# z+ o8 l2 Q
    {7 I, q. d! A" `
        /*  测试UPP传输的同时操作普通DDR数据6 r5 F0 X) ?3 n6 [  i" B7 J
        temp=i;( l- l: h, r! B! g4 e( ]
        i++;
7 D. q  w7 i( J' h8 M3 b( Q        if(i==1024)5 b, M6 A4 b$ E, j$ b' x6 r
        {( L/ T6 z1 \# M2 h9 y1 q1 f1 o
            i=0;
  D* D6 C$ u4 ]. Z+ ]  Z+ J& R7 |            j++;
5 s: ^8 X) m0 m: d( b        }
& u5 a3 K2 g1 k1 s" E        */
4 I3 I% I4 ^9 N2 N1 t# ^( w/ `9 C+ B: y& i8 V1 n
       asm(" nop");5 X% z  r  b0 v; U7 K& _* D7 t
! X; f9 A3 \$ b/ D0 X: v# B
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& m0 N; l2 Q! \" Q" H# `/ C
    }6 r' t6 l/ Y# F

; {3 P% {4 t: G; e1 G    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* y8 L0 S: L* H( J    //UARTprintf( "i=%d\n",i);# i. o; l( j# m/ q% o
    //UARTprintf( "j=%d\n",j);. K: ?+ e) o/ T2 q
    UARTPuts("Data mismatch in buffers.\n",-2);
6 o7 J! y* G# i1 ?% w    if (upp_interrupt_count == 2 && upp_error_count == 0)
+ q: e- j& i3 `7 g2 R! W( j8 h* x    {+ ]6 E) U% U+ K5 |; \9 q- n
        for (i = 0; i<upp_frame_size; i++)
. e, P0 [+ N: l9 V        {# l; b( D0 q+ s; \0 W  _/ e
            if (upp_buffer_a != upp_buffer_b)$ V4 j! T( y7 v% g
            {
+ {" w7 g( o: ?% \                upp_error_count++;9 F! \+ u7 R/ H" @) a/ Q+ l
            }
  Y% [& M7 [/ b7 W5 ^        }( |, @) I6 o  N' \# ?4 b% U( z% ]7 ?
    }8 z! t" R. C: y1 Y5 N
, _' F+ Q! H- |% h# ^  B
    /* 报告通信结果*/2 ^3 X# N9 D1 R/ u( |
    if(upp_error_count != 0); \2 h! K  T; n' b0 Y* Q. Q" y1 E
        UARTprintf( "upp_error_count=%d\n",upp_error_count);- d- v2 z- C3 u0 h# K2 }
    else
3 h& R# v3 ?% \+ Z# m1 K. C$ L        UARTPuts("uPP transfers complete!\n",-2);
! S2 q3 n4 g# D( p6 P, V. b2 {6 {% Q
5 i6 C0 f1 y7 E1 I9 {  _    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& Q/ T3 p6 N7 @1 T1 Z# w3 h5 Y
    UARTGets(ch,2);
8 V4 b7 m! N2 E+ d# b8 x; b3 Z# k    UARTPuts("\n", -2);
3 x) r) j8 I5 K: c  z* }
; n" F# b; k* O  l, R) H) L1 d" E    if(ch[0] == 'y')
* B2 `2 @) s0 I( }" y    {) p0 K. U/ Y5 }; I" y" m6 k3 G
        /*打印全部读到的数据*/3 I; @$ M4 ^1 q/ l+ F2 H& G+ H! \
        for(i=0; i<upp_frame_size; )6 M) e4 G6 w5 I4 u* l  o( t* y& H
        {- b3 ?8 ?- i4 s% g- x* v
            for(j=0; j<5; j++)% e" R2 B7 m' `" T/ K+ r( D
            {2 n# k0 I- g4 k6 {- z3 l& T
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ J0 B7 D1 y6 K% g6 ^                i++;; K% d9 p, G2 @0 A% t2 _
                //if(i >= 4096)
/ D/ c9 s5 L2 ?1 F" V1 t                //    break;$ d1 y. S: }- `1 w% a( k/ d: m" {

0 |' o3 O9 C$ u( O% T+ b, a            }
' \8 Z& Z7 l8 A            UARTPuts("\n",-2);4 X* G" e1 v6 U' ^- f
        }
: o: H; e; j: Z# |# Z    }: ~9 z2 j7 W$ o- L" _$ e' v3 ^
2 g9 Z  i/ `9 _5 K% f% v4 R
}

! r: |% V9 D: E1 y: d
2 |' p% i* r% Y3 Y! o

& F) `9 u9 a' A7 d/ E
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。, z, o* V8 M, b

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* D" E0 L( h) }4 h; S. R: t




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