嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 I3 c5 O" T" L' ?# E# Z
Void UPP_TASK(Void)
+ [( B9 ~( A' I7 }7 m{
! p! f6 w6 f  h+ `, l! k; E! s; M# |; P
    int i,j,k,target_int_count=2;
+ s4 y- f/ W8 i- T( U    char ch[2];
( |5 F; j- `& N" h
" k- i$ A- w6 t, O3 ~8 C
( `2 [" a' {, O+ @! i: Y; X" w! N( ?+ o0 i' m5 D
    upp_interrupt_count  = 0;
- A( D+ t: y# O- u+ G( q    upp_error_count = 0;! F, q* i, m9 H* [+ O) ]) W' o
1 c! @, O% c0 w" ~& ^
    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 U; r. K  \& Z: d. e. n' w% L" I
    // Initialize data buffers/ ]7 S4 g, ?/ \) @: u8 N- A8 W3 R
    for (i = 0; i < upp_frame_size; i++)
! B3 O  d, K% J2 ^" j% G' v' ^    {: p! r! m1 {+ |  }# \# H
       upp_buffer_b =i;
1 A# }' k; i1 R% e3 M7 j       upp_buffer_a = 0xDEAD;
( T" i; Y$ n8 C6 W+ M6 Y    }* t( u' ?  C/ X+ E* `8 S# h
3 b8 {2 l- k2 }/ g
    //for(i=0;i<1024;i++)
, g) l& ]/ S! N    //    temp=0;
7 n1 {# m2 \+ e- n" u8 o2 L5 h3 l. Z7 X$ x
    //UPPReset();/ T) _* d9 u8 m. i( Y; V
    /*启动UPP DMA传输*/- S4 E) n# ^2 l* H: R: r9 ?5 S
    UARTPuts("upp_prog_dma_i\n",-2);1 `4 A' A& a1 w! G
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 h" Q4 W( v# H# ?
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 r% y9 T3 |, x# L
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ `% I2 ]/ E. G8 R
3 G/ B$ i; R  O, z7 O) w! g5 [    UARTPuts("upp_prog_dma_i\n",-2);
( k0 @# y) G4 T. g0 {; @3 {    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 ?/ _8 L7 [1 x
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  k/ s2 ?- d3 J4 v8 n# b5 _$ ~( c
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# v; X# O4 Y+ Q- F. z% _* p( d9 |  {: _( X4 M5 k
    /*等待UPP传输完毕*/
" q; b3 N# R- y6 p5 I; Y% A    //i=0;
1 Y5 G' `: a3 f7 |    //j=0;
9 D$ N/ k' g8 }    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* o- `' a+ x6 Y* V9 W    {
# ]1 C! r" i) w- ^8 S6 ^9 M# X6 [        /*  测试UPP传输的同时操作普通DDR数据4 ~6 S" j# |* D: D/ Z. Z& e
        temp=i;
+ h7 t: }, y. S  k. K        i++;
2 N" P6 U7 T- \1 U( I% E) A7 G        if(i==1024)
" O6 A, Z$ E5 F        {6 ~9 x( i3 S5 b5 H( r
            i=0;
; R: X/ j5 b4 K% U% C            j++;7 R7 |) u; l% {/ u0 S( x
        }
$ |( [7 l# t8 @8 u* X& K8 ~        */, h* {" e0 p' W  {7 r, l; J7 Y
) y  l9 M: P) y6 n$ y5 ]
       asm(" nop");
! [% r5 d/ S3 K: O8 D
3 A+ [9 g0 J- D9 d6 Q8 s       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! u  I4 V3 ^& a$ ~7 l    }
7 |0 k9 k- D% O3 q3 f! \/ i3 |% a7 |
    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 C0 ?( I6 S0 z! F1 j5 ]# C
    //UARTprintf( "i=%d\n",i);
# v4 A" H) ^: d" `' l( z5 P    //UARTprintf( "j=%d\n",j);
- |; ?* m3 b7 Y7 Y9 ?    UARTPuts("Data mismatch in buffers.\n",-2);
) ^/ L2 J1 V% |" h- L0 p! i5 K    if (upp_interrupt_count == 2 && upp_error_count == 0)
! ~% A" e2 H% ?1 S" ~8 Y    {
8 x' C. V  i- q' F' |: _        for (i = 0; i<upp_frame_size; i++)
. O& D8 g. @! Z        {7 P7 a# [$ w& Y0 N0 g
            if (upp_buffer_a != upp_buffer_b)5 Y( N$ o" _0 Q9 k/ c
            {
" _% U# ], q9 {  c                upp_error_count++;/ T1 S1 P& U( _" I/ p! t
            }3 i6 L: V- s: a* {; F$ o& }
        }1 b+ ^4 q* x. V+ c
    }
& I4 e: V; E0 l% A8 }9 c; f2 [( S7 j+ \4 V+ E/ E- `
    /* 报告通信结果*/) A4 Z+ }& p8 J" B; @) `
    if(upp_error_count != 0)/ V6 \0 W) k! H9 c; X" ^% k' o
        UARTprintf( "upp_error_count=%d\n",upp_error_count);% x/ K; C' g9 h6 w1 t
    else+ }6 ]  m6 c; ~6 u* k3 J6 Q
        UARTPuts("uPP transfers complete!\n",-2);( ^9 X8 d+ ?( g  P) e
# H9 N6 G7 V0 {5 a$ M% ?: w! j
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  _' v; F6 b6 p" h
    UARTGets(ch,2);
+ i( ~0 U* e( C  {8 Q1 t    UARTPuts("\n", -2);
8 B: z- ]. Z" F  g+ G, g6 R( U& O
    if(ch[0] == 'y')4 B# I: K9 c( u) e0 F
    {1 _# E# k8 y' |3 o6 R
        /*打印全部读到的数据*/
7 T, ^% j; ~: Q$ a9 o) \" G2 Y        for(i=0; i<upp_frame_size; )
8 W, y. a; n6 ?$ x: p0 Y- P        {
, o' N" _0 N2 J6 D9 h) u            for(j=0; j<5; j++)
. W+ G" g8 V$ ~6 i7 B0 |            {
3 s3 _/ ?( W5 h* P+ c                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
3 e9 f# a. E$ Q% s                i++;1 X8 W- r8 E) u. {9 t' H: Z
                //if(i >= 4096)' f7 i0 [/ ?4 b) H
                //    break;
$ c0 ]* f) o0 g- K# L; d" J: A5 [. F! o5 L8 X# i% f7 L! J% [
            }$ R  W1 u3 E* R2 S% F
            UARTPuts("\n",-2);
8 J7 U6 _4 e' F- ]        }$ e3 n, l# g" j, C- U
    }
4 }% S# w( R  o( m  x
1 q& Y+ D" s  x3 s* u7 n}

) M' Z( t, D; O! i

0 D' ~3 B8 G6 B0 G; x$ C+ r  v  t
' u: v. f# U% F( A/ M: o
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% B) l& I  T3 F: A5 A( u1 E

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- v. V4 F4 \% q) h8 _5 L





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