嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?, d! E5 l0 N" d- s' w3 `
Void UPP_TASK(Void)$ h- Y2 L9 w3 ~0 }- T
{
+ @/ _9 _" _. x+ f% q4 V: ?  R
: b) S+ v8 L7 |    int i,j,k,target_int_count=2;* h/ p8 \% p" @# ]- _
    char ch[2];. k8 S4 q9 ^- T, A0 r' |  v, t( |- a

% e* Z7 g7 k2 m# y
4 \# }# y9 P( }) l& R5 v8 @% |5 {! g$ d0 h! f& W3 ^4 m% T
    upp_interrupt_count  = 0;
4 M: v/ Y% B: [. b$ m    upp_error_count = 0;- o7 M/ T, h$ H7 R+ M. o5 A$ X

! T9 g) X$ t/ S7 ^8 v    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: p: [' H- C8 ]0 C. M) S    // Initialize data buffers
1 Y3 @" S) [/ A' u9 ^    for (i = 0; i < upp_frame_size; i++)
/ U, s) G7 w" Z2 Y1 g$ |, r9 n    {
8 {* i$ c8 g( ?+ O; [# ?       upp_buffer_b =i;
- X; ^' ~5 t4 d9 ?0 I# k" K       upp_buffer_a = 0xDEAD;
" {* [, c0 Z3 }2 f8 J    }
6 j) R0 z% W" F' P& b# u( K9 w5 G! P1 H7 m$ T" `4 z" t
    //for(i=0;i<1024;i++)
) a5 x7 [% k. o6 ~    //    temp=0;
- x; r; A; K5 t5 c, K9 O5 [8 h! k* }0 y: \: A" v$ p& A
    //UPPReset();* N% r2 n7 y" |" [
    /*启动UPP DMA传输*/0 ?5 v. t$ h5 S2 ?; U
    UARTPuts("upp_prog_dma_i\n",-2);
% R3 ?$ `& x) ^2 x    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 P, l8 `0 f/ s; ]- p, m$ F
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, L) Q; g3 \  {% p
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% R& T; t. d; p0 h1 {+ [8 c1 E* T0 X; S
    UARTPuts("upp_prog_dma_i\n",-2);6 E: m1 `' P1 A8 W
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. E& E# N$ \8 Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: M  C6 M3 G( l2 g$ v8 F  W/ ?6 f
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 |7 T: Q" ]" z/ S! G( |, y' `9 C  Z- ?
    /*等待UPP传输完毕*/
; i: G/ y  r# w    //i=0;
+ i2 {& X3 w1 v3 F' W6 I    //j=0;
5 P7 P, G, f& ~. j  D1 i& r; z: A    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% ^! `& Y& p+ D3 k* P& W    {
' A% f1 o. W' `' G, c        /*  测试UPP传输的同时操作普通DDR数据0 ]( J: r) f+ H$ Y6 R
        temp=i;
8 }$ @1 O1 Z& m' u* M        i++;% ?& C9 W: M5 a* c7 }! `" R
        if(i==1024)
" D' `3 _0 P, m+ b( @8 z' A        {2 i$ X$ [2 p( I
            i=0;
% E. ^9 e9 g+ h, g* m/ @. Z            j++;6 _' c& V( h8 J9 z9 q
        }# ?8 S4 {4 s$ k* |& S  N. m7 Q- q+ _
        */& p+ y+ i8 f0 x" _8 f, ?) m

1 W& u/ f$ w2 [" H5 Z, Y       asm(" nop");
' F3 f4 J% Q2 i; c. D& o* h7 M* C4 s- Q( `5 {, M
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 \% S0 A3 A$ o! }
    }5 L2 A: I: c- F4 ?1 o# o5 [5 n. W
% k% G' X4 G% z
    /*检查UPP传输的数据是否正确 (loopback modes only)*/. e! G' x# `+ u( ?
    //UARTprintf( "i=%d\n",i);
! L0 V7 m6 m7 t    //UARTprintf( "j=%d\n",j);( }- d7 e8 y: N, D1 I
    UARTPuts("Data mismatch in buffers.\n",-2);
* c1 e) M' R) t; h% y+ y6 ]    if (upp_interrupt_count == 2 && upp_error_count == 0)
% X% y. k& x" |    {
$ a9 w6 g- W/ H9 y$ \' W        for (i = 0; i<upp_frame_size; i++)
7 T4 E9 D8 L' }/ U* ]        {! ?( W+ d3 Z  |1 ]6 q
            if (upp_buffer_a != upp_buffer_b)
) B, U9 z) W  L  E% R% I1 e! N            {
: O: ^4 ^6 f+ j  C% U9 `/ l                upp_error_count++;
' x$ x9 y- M, {, @) I            }1 Y7 a8 ~; q, a% U( P) j6 r
        }4 z9 P* c9 G2 A! _, {
    }
0 C- M9 i% H6 c' P* U$ q+ @$ o$ a* \0 V6 k8 e4 ^4 e# Z+ S* J
    /* 报告通信结果*/
. A% u9 U. d2 x' ^# R, S    if(upp_error_count != 0)
$ H: L. M: l: z1 M  X& f        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* d1 V1 ]/ o6 A6 w, H4 U    else
# y. K: S9 ?9 c5 i& `: o: o        UARTPuts("uPP transfers complete!\n",-2);6 J4 c* @: p+ s8 G7 W
+ L$ c3 O* @8 m+ ^( p
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
! |2 J7 |+ d6 t! ]' Y    UARTGets(ch,2);
# }& Q+ D( t4 R/ b! B% k    UARTPuts("\n", -2);
2 \2 e4 P! g: y
% g6 z$ a- F' r, P8 u    if(ch[0] == 'y')
& S7 P+ F- ?! O- T& ^    {5 t# c3 F8 Y! z6 ]8 B
        /*打印全部读到的数据*/% D( P, q  d. D9 u  s0 F* Y
        for(i=0; i<upp_frame_size; )
1 c  F$ k9 y" ~% K        {! W8 \% T( |' z
            for(j=0; j<5; j++)
# j/ u) w  g6 W1 J            {1 j" w( y2 l6 @& d, F+ x. Z
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# }- I0 n) e2 c3 K; J5 l' M# P                i++;2 t5 W  d( ~9 [* b
                //if(i >= 4096)5 X# V0 D: n! u8 x" i
                //    break;$ p* y7 V: w0 f8 K
* x3 N/ E9 w7 f6 l: U2 {
            }
3 v9 ?! W2 w3 c! `7 R( U' R            UARTPuts("\n",-2);
7 Y* i- ^4 D+ l9 C3 t3 A( j. U8 |        }$ D3 v1 Y9 j9 ^3 X' _+ I  C* {* o
    }- }6 |& }. h; q) \* o8 R
. I& X" ^8 T. c+ c: ^
}

  ~; O5 \7 R" S  f5 U6 o  s- Z
3 I) L& T: I: m" s. v& w: v2 F6 M7 J# t
9 R  O3 q) @+ [6 i& f# ?8 ]

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. r2 x& [! j2 X& c$ _

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( i+ {+ s4 V: O5 Y3 o; V0 D# w) [




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