嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?, d: D, U: E0 P6 X& k! C
Void UPP_TASK(Void); [& z( z. q& B0 r* Y# E
{
% R  ?4 [# i0 L1 c% P
& R2 g5 n0 M, M* J5 O' F    int i,j,k,target_int_count=2;+ x- a1 X3 N) h5 r
    char ch[2];
& }& b4 A. i+ d! a9 k
  h0 w& L# v* f4 @( C/ d  |+ J  j& v
  U3 ~0 M( |% Y4 x0 q. D- ?
    upp_interrupt_count  = 0;
% c' i: j0 D. H8 n! i1 p: @    upp_error_count = 0;
8 W0 B: K- Q. R0 l7 T- _3 J1 t: [1 b% T# e0 L4 o5 w% u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 U& X1 ~( Q. r
    // Initialize data buffers# C- K% b0 H+ [1 e
    for (i = 0; i < upp_frame_size; i++)
! v& R, P0 @5 m( t9 ]- p# n' s' ^    {
5 a' c( e% m: C% k       upp_buffer_b =i;9 A7 f* ^+ y3 F% d( W* O; T! `
       upp_buffer_a = 0xDEAD;
/ A, [2 _, }# F6 R; ]& k    }' R8 Y* X4 A: i( O' d

. u( Z8 ^" c$ W1 i7 O; o    //for(i=0;i<1024;i++)
2 W( o# d" {1 c8 t$ n    //    temp=0;& T; \- q/ d  K

# M1 A! ]5 E: D5 }) ?5 ?% I& T    //UPPReset();
5 H/ V5 J" O; `3 C    /*启动UPP DMA传输*/4 V+ D' ^" g; n+ I* S, U
    UARTPuts("upp_prog_dma_i\n",-2);5 ?/ T& y$ Z! j: |
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& D/ {7 M9 z5 ]0 I1 `! ?! k9 Z& M    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 ], x5 c% J9 w6 G( a    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);7 n: Z$ I% L, K; V3 v  O

: w. z. |) g9 ~- {2 V    UARTPuts("upp_prog_dma_i\n",-2);
$ B' \! |/ b* `4 h    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: v- I" k' I" p: X0 ~/ H2 `  _    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: w/ g) r# ^: F7 O3 G1 ~$ ~    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 b3 I# J7 I8 c9 s7 E5 C
# ]0 f5 c3 G5 u- x0 \; g/ C) P    /*等待UPP传输完毕*/) }5 r3 w3 C4 A. f; v7 o  @
    //i=0;9 o2 Q0 m9 J0 |& g- N
    //j=0;
$ }- i! y+ L9 x" A: x+ Y    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* \1 a  b/ Q* j* U- y/ p" y+ P* E5 }
    {
" C% M. R4 I2 T! f        /*  测试UPP传输的同时操作普通DDR数据
+ |. N+ Y% q0 U2 J; Y' @- a        temp=i;0 X, E& C2 {9 c8 g9 u9 Q4 b6 ~4 v0 U
        i++;
  G. f4 a4 R3 @        if(i==1024)5 r8 _. L! X5 @1 g5 ?' A9 f
        {
/ L) P' h* W* R$ ]+ L6 M            i=0;% h; f4 h& j1 ^* D; n/ k
            j++;
' V  s- h; G2 `9 V        }
: ]' T% ^  z2 Y) n% x3 R# W) ~        */
6 _6 t: E  n+ p1 p3 m1 C9 }* u. ?1 K+ k7 |7 D
       asm(" nop");( p) s7 N4 u+ U3 u- l+ Y3 F  h& z8 U9 P
+ P$ ~% Q2 z4 s/ |9 ?
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% m3 j! C, c5 C3 B& l3 l8 {1 k    }
$ G) T& G7 Q! E% X* }8 d8 b2 |5 Q  t+ a6 [4 @9 L! ]
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
" r  s1 o6 M8 i, z    //UARTprintf( "i=%d\n",i);- s/ G7 j! e" v' S1 ?5 t0 Z
    //UARTprintf( "j=%d\n",j);
- i& |5 j7 _* m. n9 Y& M8 U2 W: V    UARTPuts("Data mismatch in buffers.\n",-2);: P9 N5 g0 m( R0 W
    if (upp_interrupt_count == 2 && upp_error_count == 0)' u7 u, T5 K$ F9 ?/ r/ n
    {4 @; j1 X2 A5 B
        for (i = 0; i<upp_frame_size; i++)& O1 `! k; ~, h5 i1 X7 d
        {
8 a) N$ W7 ^3 |3 A* W$ ?% [            if (upp_buffer_a != upp_buffer_b)7 B0 U* E6 S% h) ^1 |. X5 G+ s
            {
9 c3 r0 E& ], u( v                upp_error_count++;: L0 B1 \$ e6 s4 |! j
            }5 C9 |! d6 e  X6 b% _1 U
        }- `6 z, v, m$ z4 Y7 q. i
    }. ?$ T0 _, f+ A# v: e
, _& V* n+ u& M! B
    /* 报告通信结果*/
9 S% a7 b$ A4 q( l. C: n    if(upp_error_count != 0)- i6 F; M' h3 C' u
        UARTprintf( "upp_error_count=%d\n",upp_error_count);( ~/ a  K. @* u& g9 K; p4 U( {4 Q: ]
    else) b7 b3 w: L+ O+ D3 m* W- _
        UARTPuts("uPP transfers complete!\n",-2);
) m" w# ]& N/ l) J0 w5 D
6 U) M( r& m7 e% }    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
3 B9 B% p$ |* P6 Q1 u/ `4 D: o* f    UARTGets(ch,2);
. t2 x) }1 ?8 p5 p" R    UARTPuts("\n", -2);
2 _, F/ S/ D7 l  s  ~) G4 Y6 R5 ]
( m# c8 t% [' c8 T    if(ch[0] == 'y')& ]3 k% E6 N0 P$ v7 k
    {
: G, ^5 F+ ]4 ~, F! J        /*打印全部读到的数据*/' m4 ~. A. e8 _5 e
        for(i=0; i<upp_frame_size; )
, ~0 o8 }4 y% o- N" U0 O7 e        {8 v# q; A1 z6 b8 u) W. e
            for(j=0; j<5; j++)( d# i. B7 w/ ]0 ^0 d  G
            {3 }0 h0 K/ A1 b2 ?9 a; G( O# R
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, W3 v" t: h0 [. D6 O                i++;% _6 ?; p3 ~+ h/ u9 j! j
                //if(i >= 4096)
# X  o6 _. f) f% q% `                //    break;
/ w* v: H" Z9 D1 j7 w2 U, S6 {# _8 a" i
            }% w  l! ~) J) a. s& N
            UARTPuts("\n",-2);2 P0 `5 V+ t6 P4 `
        }  b8 z: j" W, B1 k3 O) k
    }' ~& M$ E3 ?' U- Q" h% ~
$ u$ J) ^5 e3 @) A& z
}

5 w! H9 I$ Q5 V
! R' l% ?5 a0 }1 @8 }" G
+ N$ l, F/ f/ x: L8 v

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# c+ [2 j0 R3 H* Q6 [# Q
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( U1 d) `7 h  u; R- A! ?





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