嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' h6 S4 R& R! i1 ?! ^
Void UPP_TASK(Void)
5 t) H/ u6 P4 N) K, |{
$ H) r# C. `' ^2 H4 _- S; K
* E5 \9 {6 N: H. q* W3 x! Q    int i,j,k,target_int_count=2;
# d0 n+ R5 J! m) D9 ?# A, |. m    char ch[2];
+ Q4 I- V+ H8 N" n
  B0 M6 W: I* y6 Q4 O6 k& y& Q8 I5 C
! n7 v  |" }. a0 M+ U; Q0 o
1 p. S9 g# N( ]5 Z6 W" }9 i) C8 b    upp_interrupt_count  = 0;
& x5 _3 A1 s1 T    upp_error_count = 0;
) A' C! j4 n  W( u% h9 q
# B  L( s& B2 y, u) K    UARTPuts("\tResetting uPP buffers...\r\n",-2);
, s, O9 i$ E" h    // Initialize data buffers
; }! ?! J# F+ S, N5 }1 c4 }) W    for (i = 0; i < upp_frame_size; i++); x; d- m; y3 N. R  c: b4 C
    {
9 J0 z8 ~. F5 x1 w: V       upp_buffer_b =i;; s* Y! ~. L7 g; N  H6 D
       upp_buffer_a = 0xDEAD;
1 f2 A  X4 ]: v; R/ ?8 s& m/ X    }. B' R/ I3 V+ A2 S
9 g) ]! b: G6 v1 o
    //for(i=0;i<1024;i++)- L% E2 a. P' P- C- J
    //    temp=0;
% V6 G5 f0 J  `4 a7 o; F+ c0 R; @$ m( v/ q1 G4 ?) Q0 K
    //UPPReset();
' ^. `; K  D' n/ T  L* H. [    /*启动UPP DMA传输*// Z; v9 t- k" Y! G$ n
    UARTPuts("upp_prog_dma_i\n",-2);
1 {5 ]! E- D0 s% x2 T    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 I# b+ T" i3 O; ~/ Y* Q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( T! y# W" p- P3 ]
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ @  L, G. q+ r: ^9 _9 R7 j6 W( ?! {8 ]% J/ s2 T! U# t
    UARTPuts("upp_prog_dma_i\n",-2);
( P. ]4 p% v4 ^/ P/ h9 i    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 F9 K9 f% |+ m; n4 J1 \    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( n9 |6 A6 _/ Q/ {( M
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  |8 y; w7 |+ ~$ h! Z5 m
7 z$ u4 ~6 G+ M( w  c8 o    /*等待UPP传输完毕*/" M! o: {6 C9 p; @3 L) Q: ~
    //i=0;8 R+ M# |3 V. V) j- {
    //j=0;9 e$ o* {3 W9 K8 B0 f
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* g8 K5 j7 }& y; w* |
    {; @$ ~) X+ J4 f$ @1 y: I- _) i: s
        /*  测试UPP传输的同时操作普通DDR数据) n) w/ \! {( Q1 H
        temp=i;
$ D* D, m9 ]! e        i++;
# \0 S2 E% g$ C0 N/ e1 F) W% Y        if(i==1024)5 V* x8 a  m7 g; D) A4 I
        {
; v7 Z7 m& B, G: K: a+ K2 p            i=0;9 A, W; R2 p7 r8 y+ a' g/ x* Y/ Z6 _
            j++;
& I9 h$ g" \. M, Q6 W" e7 A        }* L% q) [/ N) I6 ]( k- L
        */$ T" n- N1 n0 a2 G0 K

7 i$ a) j( ^$ \' @: h" L       asm(" nop");
5 G, c$ Z) y. [# h8 A1 J, R1 t2 {# l0 O$ \, r9 [0 h1 q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);9 d+ b- ]2 S4 `  C) H  ?% k$ u+ Q$ J
    }
% _, o* A0 _. B  h8 b: N' e) [( ]
    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 J$ j3 d" b* }: C1 L1 E; m
    //UARTprintf( "i=%d\n",i);
7 a$ |, e7 I6 i    //UARTprintf( "j=%d\n",j);. A. J& r) Z) P! \! R; v/ J
    UARTPuts("Data mismatch in buffers.\n",-2);: d7 f& q* Q9 p3 H( w/ H
    if (upp_interrupt_count == 2 && upp_error_count == 0)
( [5 v( Z6 f- E. }" G/ Y    {
9 a* {! g, B2 s0 E; l# w& j        for (i = 0; i<upp_frame_size; i++)& M0 x7 p' p" c, M" N5 u
        {/ t- P* G8 C4 b- Y3 m3 p
            if (upp_buffer_a != upp_buffer_b): f; @# k# G* }/ I: a
            {0 i9 B& @+ E8 i4 i/ S  W
                upp_error_count++;' x$ X& y2 T, C, Z7 K% j$ p
            }9 M, g3 X* a, y% e  Z/ q9 t/ N5 R3 S
        }
# |2 }& O) w; H3 H  Y    }3 ]6 M% x# q& q" x% O

+ g  M( w4 ^3 G2 P& U; N    /* 报告通信结果*/
) t7 Z: G6 c; W4 Q8 P    if(upp_error_count != 0)
' ~+ [. b4 v5 g+ [" @( M! }% r0 }        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 ~5 [/ S* a) |# J' z9 L
    else
$ \5 `4 `. U) `6 c9 z        UARTPuts("uPP transfers complete!\n",-2);8 g$ W( x0 w& t; F/ v  Y
) s; x3 [9 y$ O1 ]3 V% g: e
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 d; ?$ G/ {# H  t; L6 M: _
    UARTGets(ch,2);4 M7 U: s7 R: {! {" {
    UARTPuts("\n", -2);# f* a" o  U+ r5 s/ `0 ?  Z
6 p+ U2 }7 I! Q& z+ V/ B
    if(ch[0] == 'y')* `4 c; F6 h" D) M3 c9 G
    {
4 l  |, |2 s4 R        /*打印全部读到的数据*/. I& S, r& i3 w$ ?0 M9 `) o4 v" N
        for(i=0; i<upp_frame_size; )
- F7 U8 z% @' U7 V        {
6 H, w8 ^, b. P4 B: V3 `            for(j=0; j<5; j++)
. f  K) V4 Y  k" ?            {
6 Q( b0 S! F4 }) R" k% h                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
! i7 E& S9 P7 z2 w                i++;
( N) A. U/ O& ?' g                //if(i >= 4096)
( n3 B3 y9 v& G6 B                //    break;
" ^1 a) \: S7 [! _2 b$ b$ l0 D( N4 V2 ~7 n7 @* w3 m
            }
2 C: C( Y4 x1 i6 z            UARTPuts("\n",-2);0 w1 |4 K' X5 Z- l; P
        }; L- e7 C$ s5 a
    }1 ]7 E6 v. o, w

4 n" H8 V, x. @}

7 V/ r# _+ {% F, J2 s4 K/ M
) g: C9 s) {# a* }

4 P6 B6 r$ m+ u0 c6 I. I9 a
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 g. h4 W# I* ?$ d$ {% H
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 a& [  |3 L$ @$ n* z- Z. u0 @' Y





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