嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& o6 W9 D. x; x+ O# K" ]
Void UPP_TASK(Void)8 {8 V2 M3 B* x2 F( C8 [
{( g- I9 d: H& S& {2 f1 E

5 w& D# E$ W, H4 N2 z    int i,j,k,target_int_count=2;' |) u' |& i- R% b9 o  i
    char ch[2];0 ]% E. B8 r1 l( M! D
( u( f9 b0 J! ^2 V( x5 V$ f
& K) {- l/ A+ d0 E
6 @: K2 Z. Z) J& ?2 b2 Q
    upp_interrupt_count  = 0;. ]# q) G* u1 Q. f8 J+ E
    upp_error_count = 0;' a  T# V. D$ J% }" N" B
/ P4 o% G5 }; C7 t
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
  a2 \7 x5 O6 |    // Initialize data buffers0 Z$ P0 W0 k- y( I9 z
    for (i = 0; i < upp_frame_size; i++)0 I9 r$ i9 H  b8 _% \  D
    {8 T7 c' z! N  @4 D# }
       upp_buffer_b =i;
7 b% g% f6 q4 J- u6 m7 I8 m* U       upp_buffer_a = 0xDEAD;( [6 S& F9 F! p' g
    }6 }$ X- D: t$ j. m% i4 V. ^5 d2 G

( p- e( @* k& L# f% ]8 }) Y    //for(i=0;i<1024;i++)
! S9 v2 F, E# _6 o    //    temp=0;
) |  n" g0 l0 A  c9 x& I
8 B9 X( u# a( V0 Z    //UPPReset();9 d8 b7 A% b! a+ D
    /*启动UPP DMA传输*/
: G3 s9 A' L* `% y- H    UARTPuts("upp_prog_dma_i\n",-2);5 a- ^# |/ f4 c* [$ _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 H! @% ?3 N  _
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* z- ^8 s$ Q0 }( u    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ D8 u0 N8 J6 _
3 l6 D5 z0 v% A  a9 e% l* ?  G    UARTPuts("upp_prog_dma_i\n",-2);1 L" t7 D! M  N
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, i" X" E5 h5 l9 l: t    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# g8 U( ~: _! R1 ]8 P1 _2 U7 f    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: c% N+ n( o! i6 q% u
' _* }3 p/ p! _; e: O# s% Q1 ]. V    /*等待UPP传输完毕*/% C3 O& w8 k: x( e& r/ m- G) V
    //i=0;
# Y( E5 h# i& h, ?- n( x0 ^- h    //j=0;
$ }& V  L0 V3 v# U% |+ y/ ^    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, \. b* u2 M2 [5 j7 q    {  z$ _, [9 Q* z. ]$ w
        /*  测试UPP传输的同时操作普通DDR数据
  w8 X& K4 u3 u+ t        temp=i;
6 m4 {7 o. P! P        i++;
% g+ i5 R% D- f# }' z! F( ~! `7 a        if(i==1024)6 J) i- j$ q* B3 h' M. G3 M
        {
1 w3 n8 V6 K, `) Y* T5 Q1 j* A            i=0;8 Z5 g+ Z3 ~% a7 h. [, k$ ^6 N2 N
            j++;
* S+ O3 [, j( S7 k        }
- ?2 g: t4 j) j: \* z        */
- O1 r; J6 \9 w/ I
; n3 @- z5 l1 s3 Q  K       asm(" nop");
( ~6 U$ s0 s: n& o/ Q3 D; J8 m0 X( G6 z0 [1 ~  n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ F  `# P/ M, u' C
    }# x( ]4 ~' y% f

- S6 ?0 s$ `4 ~4 N+ U    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ y5 t( W1 W2 a: C6 S    //UARTprintf( "i=%d\n",i);
; ^* [- g/ p/ p    //UARTprintf( "j=%d\n",j);: S( {& ^/ B# d: c# h+ x" Z1 p
    UARTPuts("Data mismatch in buffers.\n",-2);) o) ]" Z* n+ M/ y+ l+ i- i2 f7 U6 {6 }
    if (upp_interrupt_count == 2 && upp_error_count == 0)
; d' U2 }4 C# F7 |. g( z    {9 x5 f& T- r9 ^5 ]: {8 l
        for (i = 0; i<upp_frame_size; i++), W9 x# H7 h. @) _6 X. b
        {
) `% C3 ^( e5 Z6 g            if (upp_buffer_a != upp_buffer_b)( L& q1 ~: M7 B& q
            {; }7 x  u; i! @7 L7 |! s
                upp_error_count++;3 w: p3 X$ [$ Z' ]3 R
            }
' A- r1 t" W9 B5 w  S- v, `, @        }
' u" w% F3 F- r* E2 t    }8 ]% M# @. O( x  J9 ^8 Q
. I2 Q  h; ?4 z7 Q0 n& f+ u
    /* 报告通信结果*/4 P) P( r  l. D1 A# l, {
    if(upp_error_count != 0)% @( i- @% O( T
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' z6 a% N/ v" j4 R) @    else0 M9 ^% Q+ _  j' X( e/ g! P2 s: D
        UARTPuts("uPP transfers complete!\n",-2);6 H' F# S( u7 {  k9 c. c7 c

5 z2 c& ~: l- _0 w5 e    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  D5 m: h1 A# g" ]4 U: R" Z
    UARTGets(ch,2);1 R  A/ r2 P0 P5 c
    UARTPuts("\n", -2);& Y# ~9 T& z$ t1 N4 D( i6 o

& w: J8 j' K) P    if(ch[0] == 'y'); G; D* b& q9 E3 x6 v
    {
- p& E; N' j) C& R9 k4 z        /*打印全部读到的数据*/
  m5 Q! G5 v1 m3 c. v, R7 b        for(i=0; i<upp_frame_size; )1 n) h! l) ]" G7 g9 o
        {" F- S; L  C/ X
            for(j=0; j<5; j++)" y# m% `2 P: t5 u; x% E
            {
  R8 @; p  f2 p" T4 C$ u3 I; d                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 n; S4 q4 G% n# O* p) D. z- X                i++;/ d9 {% C' c! w3 ]' A: S! n
                //if(i >= 4096)
: l8 _( h  y  `) L. t# N% u                //    break;
' u8 M- t" o" ^7 D) Y+ m* x' B( L, h9 u% q. D- O6 j# H; V4 c
            }/ _! m* t+ F- @7 k
            UARTPuts("\n",-2);
1 V& a& p7 N6 [        }; H1 y1 A) k. A
    }9 ?) c5 `. j- m
% R) ~: j# z" k! K! c! ?8 J' D& O
}

0 Y: v" T2 O4 @; r& l# S; Y

8 T. w3 O* K* D' G, F( J, ~4 W6 a" K  l3 e

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* a: g  Q  K3 i& f6 A! f

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; ]% M" S& v# H5 ~5 W0 g




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