嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# ~9 U- T; g2 }" @8 m- E: E
Void UPP_TASK(Void)* c, W! ~' t/ L4 T6 U
{' F. |, O( a7 _8 ?7 w7 u& Y0 _) `

; S! ^- x) e/ q/ J5 j9 a1 T    int i,j,k,target_int_count=2;
: U% s; e) S/ D! W- U# I/ e    char ch[2];) P: g2 Y/ d" t
3 j! O' ?6 D; i2 d" P2 j* v

* x8 a' @* x# C* `4 x" b% W1 a1 W
, \7 s; M8 u) f) w    upp_interrupt_count  = 0;
# `; Z5 M8 m: B8 h* i6 o, }    upp_error_count = 0;1 ~0 g8 g" z3 L6 p9 C: A0 v

. O& J' W) `; \) l  ~    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 `8 q- {8 O& d2 ^( u. k; F/ z# @; ?* E    // Initialize data buffers
* x7 X0 ^7 ?1 ?* w2 t! ~; Q    for (i = 0; i < upp_frame_size; i++). D7 O. A( N7 g) _2 }& v$ s% C6 K3 p$ K
    {9 s0 |- y& z& N' b& _
       upp_buffer_b =i;
+ ^/ w# ^+ f  n: U       upp_buffer_a = 0xDEAD;: n9 B7 ~* O6 u
    }
. M5 e; g$ C4 u
* d+ b1 U2 F. u& N    //for(i=0;i<1024;i++)" [& F% n% j+ ^) s3 G! Z
    //    temp=0;
$ m5 z) z9 p6 v* h2 z, y
0 A& g8 e% h+ H. {: Y    //UPPReset();$ u0 {3 D8 P1 c# n" U) V  q: g, j
    /*启动UPP DMA传输*/
/ j5 v- e7 v. H. `; q+ b    UARTPuts("upp_prog_dma_i\n",-2);% [6 J+ g; ^! g. z' T
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( |& Q, i% V& v# r! M! A
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' w5 @# q: o, Z0 N( m6 C2 n2 r
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 w& d* I: H. c6 T! w! L( m4 _: L

6 p, V# ]) J; D1 j    UARTPuts("upp_prog_dma_i\n",-2);; p: K/ U" v: E! M. W+ V* E
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 c. Z/ N5 R' ?* L& a    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- X% V0 ?: j6 s7 F' T7 w    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" v. J- j' ?& C8 U

% S2 g0 O5 h& E0 h" Q    /*等待UPP传输完毕*/0 _: }$ E+ F7 {2 _+ M1 v  _
    //i=0;! f( F* ]/ @% R, Y
    //j=0;
. M; a4 y3 K0 J( T$ C. j$ L4 w    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 h( m7 |' o1 ]( w: F' P
    {1 q. t" K: ^+ {2 }+ B/ c( ~+ B
        /*  测试UPP传输的同时操作普通DDR数据
2 a) q2 v+ T/ @5 L        temp=i;2 v$ t$ l* x# G6 i( K0 a  m: c" M& l
        i++;3 F+ X4 y0 b" ^, @
        if(i==1024)
$ A/ D8 \( @( M( b        {
8 n: ], L5 q  V0 c, A            i=0;
7 E" t- ^$ u/ `            j++;& X4 r8 i* t8 K. D" o
        }
0 R0 n9 X8 |- i+ _& u        */' j' W$ u* z) S! N: V
3 {5 R; q5 d. ^3 Y: n
       asm(" nop");, B  G& X: s8 i0 v5 C( L4 ~% a

& ^* D# C' ~5 U       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 I6 K3 z9 j6 l2 C% i$ p
    }. G8 j, y' O& W3 l

' w, [6 b. ]* y; k0 P1 K    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 J- B" K9 e2 h0 F8 q
    //UARTprintf( "i=%d\n",i);8 h7 k! @+ a$ s, x3 ^
    //UARTprintf( "j=%d\n",j);  H* O  P5 a- n. o2 R  u$ c7 b2 S
    UARTPuts("Data mismatch in buffers.\n",-2);
) r& O/ ^- t0 x7 g+ x8 y% Y! \    if (upp_interrupt_count == 2 && upp_error_count == 0)* M: O' g2 T7 V& f. I! a3 f
    {( Z2 E4 I  W2 U  p9 J" i/ A
        for (i = 0; i<upp_frame_size; i++)! _, U, j+ H6 B; {
        {
, p  y1 [! g/ l3 t- m: T( b            if (upp_buffer_a != upp_buffer_b)
! q3 C$ l6 M6 I8 z+ r8 q: J: [. }            {6 C# ]$ F6 {9 E0 q* E. F% q5 S1 y
                upp_error_count++;
1 g0 O8 o* L) X7 x4 q  W            }
/ T; W2 Q( [% z% b! n        }
* \6 S1 R7 p8 Y$ W    }
9 b$ C; j- y+ ?% s7 E. y. }& X6 U+ O' E
    /* 报告通信结果*/0 i- \. N; j* C! O4 M  \
    if(upp_error_count != 0)
: Y% D* N: k8 k' K% \" h        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 _/ [% f/ g( L3 O7 G
    else, q( a) p0 `1 j
        UARTPuts("uPP transfers complete!\n",-2);
) z0 U/ b0 Q; e( N2 X* V0 @# u, ^
  f- Z9 `9 `( l+ ^3 Q2 [% ?" f    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 W: q/ I3 U, @5 V& x0 {, T
    UARTGets(ch,2);
' o( S, X8 c" l, v+ P    UARTPuts("\n", -2);
  S5 B# U- w3 K! [
) V5 J, ?5 P7 F    if(ch[0] == 'y')& `' K4 D' G* B/ X
    {5 S" a+ R/ E4 M7 ?( N
        /*打印全部读到的数据*/% Y3 V: W) P7 B
        for(i=0; i<upp_frame_size; )# T) v) u) _6 |4 C. A0 \. K( p2 S
        {
( t  _9 l$ c! p+ v- G4 X) y" j            for(j=0; j<5; j++)
; ~0 k2 @; a& p. i% j            {
7 M; Y& a+ n5 [, P$ {4 U                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
2 ]* W* j; h8 F3 d3 E/ X* |                i++;% _  g1 p1 w) j: G9 r& a$ ]& Q* ~7 I& u
                //if(i >= 4096)2 f5 v+ \4 r# Q5 \6 Z
                //    break;
' C/ v7 p4 |$ G/ S2 D. v1 @- M: B% h# a
            }$ K8 M) }7 r, [( f$ k* t
            UARTPuts("\n",-2);
- y  L, ]. x+ S' p2 W6 V- A        }
) s) b+ s; e% b, |2 J1 W    }
) k9 [3 O7 c8 ?% m/ G7 N4 y3 B# B* J* W
}
# V: f1 T2 g1 D1 |' _* K1 O+ _
1 l% R9 D" s1 W# e

- q/ r7 g& z* n
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 |9 j, b* f  N) |
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 B7 u. M2 q' E$ R% O; Q/ E0 x1 z& m





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