嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
  p" ~5 G- o7 u2 N
Void UPP_TASK(Void)+ m7 O  C! z5 S
{
- g) g2 P9 k$ _; U* [: W6 T: s6 T( U6 e6 j$ x
    int i,j,k,target_int_count=2;
" A% S9 D" S; b) w' \    char ch[2];
% y$ ~2 t# @/ X2 e6 h4 v6 n9 S3 _, I# p

8 N& t! g6 K# s3 Q2 J( K( r
0 I4 v2 r: ^, V# L( j- C( B6 ~    upp_interrupt_count  = 0;/ Z' Z! v1 t2 M. o% m
    upp_error_count = 0;
0 a# [  S5 c$ M" O+ S. W5 ^$ _! p5 t8 [! [+ p0 F+ e  u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" U& g+ H' ^6 Q, ?9 W0 C! ~    // Initialize data buffers
7 v' N6 J0 g" S6 A4 E" }8 k    for (i = 0; i < upp_frame_size; i++). e0 _* x' ?  s
    {$ H1 A- |: e& Z) r: \6 D: X; }- {* b  F
       upp_buffer_b =i;
8 x" u$ r$ |9 M       upp_buffer_a = 0xDEAD;7 Q8 P+ J3 ?: [% f" t3 M) j8 N
    }5 j- l1 ?+ W8 F% H
  Y5 X. K1 Q7 b4 a
    //for(i=0;i<1024;i++)
5 p+ N* V- g' U0 x( |" m    //    temp=0;$ X% d/ i! A, N1 X

; j! l5 o- Q$ H0 e# R* R9 G    //UPPReset();( y/ i; B5 F7 s% k- m& t/ ]( B
    /*启动UPP DMA传输*/! F; q/ z5 U/ b9 v- g# i8 t4 l# Z; i
    UARTPuts("upp_prog_dma_i\n",-2);8 U/ K* ?; ~% C' m  o" g* a
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
  y( B1 Q$ a- d/ |, |& |) N+ h    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 |: ^: f3 J' L* Q
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" E% }8 k: @3 E, x1 E& ?

' P  n( s# ~5 u+ S; N    UARTPuts("upp_prog_dma_i\n",-2);
5 U* |8 Z% C3 N    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 V4 x- ~" z  V    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 W3 h. k! g; O3 _- O
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 A2 S! b8 O6 v, q% A, n3 q
1 ^( \  h0 d0 v0 A  C    /*等待UPP传输完毕*/1 k/ g. a$ i; [. z
    //i=0;
+ o& d  g" [/ o/ N6 l7 P7 N    //j=0;
$ S7 B5 V$ K3 B1 M    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! T; Q* ^) g( l, P$ q& N
    {
5 c6 V) [# ?( E# Q        /*  测试UPP传输的同时操作普通DDR数据
. [: p* z6 E, E        temp=i;
- c* d! {; R: H. N% o        i++;
2 @0 j/ D% q  y- ^8 e        if(i==1024). R7 j9 ]5 Y" I: K: H2 E
        {
9 t  p( \7 [+ M0 R2 K            i=0;
8 a  y+ ^4 z  ~3 Z5 l; D* ~. a9 Z6 q            j++;
% O: o- q" H4 E+ ]( l) p- H6 u; Z, g        }$ O- j4 H' S- q, ^* `
        */" l8 ]3 V* ~+ p0 D" Z* F* U9 I
4 M( I4 t  O5 K" p( m% j  v" K8 K
       asm(" nop");
) r! j( k" G$ F- @9 }: I( L7 C; {7 d
( T" x, w9 ^) |       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% C! P, e0 |0 n# }7 D. m    }
7 Y6 Q. b/ f4 U# i
3 m8 Y+ |" C1 L. N, s7 j- m    /*检查UPP传输的数据是否正确 (loopback modes only)*/* j' M5 H7 P0 N: \: ~
    //UARTprintf( "i=%d\n",i);
8 _* L3 R' l( F+ i' }' ]    //UARTprintf( "j=%d\n",j);3 e( m# p$ M& S3 s, w9 ^
    UARTPuts("Data mismatch in buffers.\n",-2);
: Z0 X! l$ \) l% B5 h/ K% Q& c    if (upp_interrupt_count == 2 && upp_error_count == 0)6 Z) l  n7 u) R% E9 @
    {
8 t" V6 ]* f  t, F. _7 y        for (i = 0; i<upp_frame_size; i++)- W) O  k) j- I% L5 n0 t! u
        {$ z% s- G9 n2 {- ~3 V) _  u: n
            if (upp_buffer_a != upp_buffer_b)5 t. s( G7 a. H4 R- X6 v
            {: G5 {2 K1 Y9 h! y% y
                upp_error_count++;
- V2 \0 Y5 R/ M1 T            }
6 i) O2 G: m6 e        }4 {3 e" e6 {- `0 Y
    }6 m1 y( [( c8 ?1 i

& `* W& A7 r( R# \5 M/ G3 M; m    /* 报告通信结果*/
5 M* W6 R/ |# E7 {' E# m    if(upp_error_count != 0)) z: h* V7 C9 |
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 S6 j0 I' |, O+ S( u; p# k/ T: U    else& Q# A$ {/ Q) n5 i( k2 b
        UARTPuts("uPP transfers complete!\n",-2);
# H- h. {/ F& e! r% ^
; y2 S) c" x* O( e+ k- H    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 r7 ?; i- q4 M- ~
    UARTGets(ch,2);9 @' b- Z8 u9 r! b
    UARTPuts("\n", -2);
: I; `" j. k0 i' _3 s4 z; c2 x$ S8 b" h7 N& W$ h" i
    if(ch[0] == 'y')
. a: @& x0 _7 Y    {
5 H+ g% I/ C4 K6 Q5 L        /*打印全部读到的数据*/7 ]8 C0 G! M9 U+ k# W0 r
        for(i=0; i<upp_frame_size; )
' G9 g0 m/ `$ A0 W. G+ Z( w        {) e/ u' X7 U) W7 y& J. D( W" |
            for(j=0; j<5; j++)
) ^6 B; v; j  F& X; U9 [+ q* ^            {
- U) J. V$ Z3 {  g1 v                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
3 E# I  Q" e- A6 M                i++;
- P7 T6 \$ ?- B( T$ y- x% p7 Y                //if(i >= 4096)
' z5 \: y& D4 x. E( C7 `                //    break;
" u2 w% k/ U+ q3 A6 g! f2 z. s) w- Z6 D% A* j  I+ ~' a2 u
            }5 D0 Y; A) O9 h8 |1 k+ y2 U& J  t
            UARTPuts("\n",-2);0 O% x" r: O  H; @% ]1 g' K
        }' y8 w& W; R2 f. x
    }
$ M! `/ |! N- U- q( Q- {' {& S
& n  k+ I+ {1 l5 Z}

$ ]1 r! e: n2 L$ @. X' P

  P) i% B: T" q0 h$ S, l* j
: x, f0 K6 F( k/ h) [1 Y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ S0 O' e% P) }: x5 b4 U0 \/ h

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  ^1 o- L% Q9 H' w- Z/ |7 X7 M




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