嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ Y0 S" M. q" @3 ^7 U0 _/ j: S
Void UPP_TASK(Void)
% G% u% t+ e% `, [( M7 Z* l{: d1 z3 |! d8 q# b
! z  p* w5 m, `% V7 ?, Q
    int i,j,k,target_int_count=2;; M  `3 c, n* b# O+ q/ j9 s9 T
    char ch[2];
3 G( B) g4 k% b# h' U
- h8 I0 ~4 x" e# \9 G
$ p/ l( x8 _% ~' Z7 d. Z. G  L# e, V  G( c7 M! n% Z
    upp_interrupt_count  = 0;
! h- o1 j* a% U, B! [    upp_error_count = 0;
4 F% @& N9 o" P, B$ X, K' S+ }: I2 ~3 @/ W, _9 n
    UARTPuts("\tResetting uPP buffers...\r\n",-2);. U3 r" j& a8 l4 l" u0 U* Z( j3 q
    // Initialize data buffers) P& W6 B" \& b" D
    for (i = 0; i < upp_frame_size; i++)) ~+ ]- V  l4 Z
    {2 T2 s6 `. W/ K+ k2 F
       upp_buffer_b =i;' C8 m: p# X8 V# j
       upp_buffer_a = 0xDEAD;/ T4 c# i. [0 R. y7 o# x2 ~
    }4 r. V5 R& W" _( U9 A

' o5 ~9 x$ R" b5 U- N' Q    //for(i=0;i<1024;i++)" S8 M  e6 W/ f2 Z' ]
    //    temp=0;4 o6 ]( U. Z. G# ^

2 C0 d( `3 l* u: L% R    //UPPReset();
$ k+ ^: ^- L3 v! _$ A- v* f0 T% g    /*启动UPP DMA传输*/
) s8 I# [' `, |7 _7 s    UARTPuts("upp_prog_dma_i\n",-2);
# }/ @- r; y' l. g8 t    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 F# W! }! O0 J8 ^6 c9 {! L    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 `* n2 A+ d/ u( {
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 C5 b! V9 _9 C4 c& y# H# S. X* E4 ~% ^7 [: o) I
    UARTPuts("upp_prog_dma_i\n",-2);
8 L  f7 }6 s# b  I7 e) P! I5 f8 @7 m    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; U/ P) f( y$ S- h! H    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! A+ w$ u( A, \4 z    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ z& }8 `" j  r1 [! o  v
* P1 I, Q6 b0 y' ~( V9 p$ X% S
    /*等待UPP传输完毕*/5 c8 A( m, a7 _- a8 c; P+ _
    //i=0;" ^2 E  W  {5 ?1 y& D+ f
    //j=0;
8 R$ V+ M2 h9 @3 F2 p9 Z) I    while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 n0 y6 p/ R1 b6 ^
    {$ q& {% \' m3 {! D/ U* s, C
        /*  测试UPP传输的同时操作普通DDR数据; Y, {# R, N5 ~+ K9 V- d& \
        temp=i;
! T6 b- F0 _( h' n! i6 Z        i++;
* \# N  c! o# e/ W+ R        if(i==1024)
/ d# {+ U9 k1 O/ f/ a0 i1 e+ x! z        {
+ b. v. _: U, D- a) n: b            i=0;& k8 [) }3 u; |
            j++;. j, S( S& @4 C
        }  p: l8 W$ p$ L9 T" G6 K( N. h7 `# e
        */
) n$ {, K/ e$ P2 y
( N7 E& }! s$ x) E       asm(" nop");$ I3 j  x8 _" ?8 E! ^7 U2 Z
) }- |/ e+ F& J9 A
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: C4 Q/ I4 {6 K, a8 L, r8 g' x, O/ V
    }0 q1 V3 s/ ?+ \# v+ ~# ^5 o+ _& g
7 U" V5 o0 j  k- V
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 q6 c( F6 ^. _    //UARTprintf( "i=%d\n",i);: X7 Y0 \# z/ H& o  s5 ?- R* m0 g
    //UARTprintf( "j=%d\n",j);& g# d% S7 h  c7 t- p  s
    UARTPuts("Data mismatch in buffers.\n",-2);4 m: z: `/ ^4 j6 a7 R5 C
    if (upp_interrupt_count == 2 && upp_error_count == 0), |9 e. P/ b) t6 Q1 W5 X1 D
    {
$ C5 r3 z% j8 X        for (i = 0; i<upp_frame_size; i++)
$ O- A2 S' g. Y0 Q! U5 i# \        {5 r1 o# N+ n* r  m4 u+ ~/ F5 T3 M- x
            if (upp_buffer_a != upp_buffer_b): I6 d5 d5 Y$ P, I) h) `3 T; K
            {
. H7 H+ {6 N! j: q                upp_error_count++;
% F% O) E: O8 V- W( \/ I            }
( N: g+ |4 ^$ X1 X5 I) ]        }
7 [4 e" N3 Y4 E; I* E) ~6 c3 H' L    }0 P  s" s$ |: b4 |( U; ]1 ?
7 j- P4 x7 _) l* p8 I) g
    /* 报告通信结果*/5 }" o$ L5 g% i' G1 s
    if(upp_error_count != 0)
% l- a! G1 t; z8 T, }* i        UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 G: {- w: v% I- b+ u5 [    else% p. N; z* D# L
        UARTPuts("uPP transfers complete!\n",-2);) G# O4 s2 C. Q* v4 f: q( T) ~) ^
" F, n, H' b" i1 B- _
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
, G- X, r3 _, w" z( [' C    UARTGets(ch,2);+ J+ Q4 D1 G8 C" p
    UARTPuts("\n", -2);  r2 [/ m9 G3 b/ E6 q' ^, Z
  d/ ^& x" ^6 L3 E+ O( L; {& `* s
    if(ch[0] == 'y')+ b4 G+ R& i$ M( |3 g0 k
    {
) z( X+ j; D* D7 E' i6 a7 B2 q        /*打印全部读到的数据*/
( n$ X- H+ l1 q: o        for(i=0; i<upp_frame_size; )
! J% t  m8 Z* |( U4 x        {
, o6 M3 d3 ], L" I            for(j=0; j<5; j++)# O6 u# E0 j3 s+ O
            {8 W3 v* d* ?( t+ H8 T, \) L
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
8 }, L( X: u' r0 i( z# E" M$ D                i++;. a5 Z/ Y& c3 g. U2 ~& y
                //if(i >= 4096)
  O5 z4 Q# }, ^* D" I; p                //    break;
# P- S# l$ x1 n( ]
: f  `( X. B2 X8 x8 c            }* l0 G# J# W$ q2 F0 G
            UARTPuts("\n",-2);( C" r+ u2 I6 n2 p
        }
8 j# \* i) N6 `2 j( Q$ H    }$ M  b$ U& ?+ A* @/ O  }6 M

5 Q* ^. K. `" k}

% u1 O; a/ Q# [

$ Z# c7 H, I# x$ y) F7 g  G1 U- r' n7 w2 x9 E! c& L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" N1 f5 u# J0 Y" O4 _) L8 W1 ?

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# Y: d0 _$ u+ _- x% q# U% g





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