嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ f9 I; S. _0 i8 h
Void UPP_TASK(Void)
) @  c6 I- t% L9 E; u$ q{
% |+ w( x$ o# V* s) l6 a! E3 r# z! x- G  @* p% [7 d6 v; J
    int i,j,k,target_int_count=2;- ?0 b* i/ S- I' o  |: x% h0 M* \6 k
    char ch[2];
4 ^% v, ]6 u! Q8 a
: Z1 P5 q5 l- \% B% u
% d9 c" _; {; m. {8 n5 l, U& v: f  q2 }
    upp_interrupt_count  = 0;
- t% m6 n; v" P3 K/ C) `5 R" l    upp_error_count = 0;6 b( x$ ~; h0 L* u, @0 q: R- [; F
6 _* o( w, Q! w3 Y7 N
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# f$ l4 @( q) C4 E    // Initialize data buffers
8 X5 ]. g; g, S8 c/ p2 V, Q& o    for (i = 0; i < upp_frame_size; i++)
; _5 S" l5 N9 d4 o. _9 X9 i    {. w4 _& ^, `3 p; l2 K2 R! {8 G
       upp_buffer_b =i;  b; {" a' m' D' k: w
       upp_buffer_a = 0xDEAD;
( m0 D! F# }# Y1 J    }7 k9 E" M( u0 }9 U$ K5 P6 p

3 y7 k) W- f/ l. ~+ S    //for(i=0;i<1024;i++)( \: o) m; r4 v5 g6 n; H2 i0 r3 J
    //    temp=0;
" Z+ y4 S, _1 i! y: @
* \) }' ]' y9 o# g0 R    //UPPReset();
2 E; w9 D5 X0 G7 Y* x7 k& n    /*启动UPP DMA传输*/
" X4 p4 r, M: x  U  W4 I- y% r    UARTPuts("upp_prog_dma_i\n",-2);% @$ z. S. t. U: F5 q6 b9 W, i9 i
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* A2 D' Y6 `. u% E8 S* @    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: R3 r! m# r! K6 Y6 Z5 t    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);2 m, n( i  Y$ [0 U4 F& {

  b3 z7 C" B9 Q& I5 m8 c8 C    UARTPuts("upp_prog_dma_i\n",-2);
  A, ?4 Z! x; W, m    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 k$ Q; [6 }9 t, g
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% h& i( {+ c$ S- s$ @
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);1 ^, \' a! H9 ~! G; x, w: f. w* ?
. ?, B9 m2 n: _% v+ S  O* x& e
    /*等待UPP传输完毕*/
, U9 x. b# _6 Z8 `& L% ^5 Z    //i=0;
1 P, J) [; g* p9 g, m    //j=0;
- @6 l6 J. y) c) f    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ t0 U/ L1 i4 W& R5 o
    {9 s+ {( s  S" G9 v
        /*  测试UPP传输的同时操作普通DDR数据! I+ J" n+ {% @. ~6 J, t
        temp=i;% Y) B  `0 L0 x( z
        i++;* ^8 C. u! x7 Z3 T: e! q) l
        if(i==1024)9 N7 X3 |. m  g7 o, \" X" s
        {
5 \1 }: q) }$ D$ c- q1 W# R5 K            i=0;2 g! c, I9 C$ F7 d# N- O
            j++;$ h  N( Z: N: S/ x# z
        }
8 j- d$ K! J# ^# @        */
' a+ o9 L" d4 f( @" h  ~& n& T( S( [( K+ n
       asm(" nop");# Y' \9 n( v# z. ]8 S
3 R9 O/ X0 f: k$ p' J+ m% A+ k8 X
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, P, j" a/ b+ w# U
    }
: z( h* u* ]) i+ s0 F) i+ D, B7 x+ N5 I  {5 i7 n
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ V( z5 w* P! E% h) Z. y    //UARTprintf( "i=%d\n",i);1 C# l1 q7 E( H: X, ]  |- @
    //UARTprintf( "j=%d\n",j);& U1 A' `! w7 I9 y
    UARTPuts("Data mismatch in buffers.\n",-2);. V! E8 {- C  V3 [  }7 M6 v
    if (upp_interrupt_count == 2 && upp_error_count == 0)+ T- h0 z: Z0 u; C4 \
    {( G/ j% T" m5 y* y
        for (i = 0; i<upp_frame_size; i++)
' ?+ b- g, {( S# a; ~        {
4 l% s$ H+ X* Y+ o4 I  W            if (upp_buffer_a != upp_buffer_b)3 Q. d4 G) }( w0 N+ T
            {
! Z+ F; M+ `; p7 w: k# V                upp_error_count++;
( [* |% x. O9 [3 \            }
! l0 X) a( N) c/ j1 |' [) X        }  Y4 j: y) w& g0 {* l3 p$ _/ P4 y
    }9 T8 H. u, s- l& L

) K) @! x8 s- m% |3 G; Q8 p( F$ k    /* 报告通信结果*/! L! z8 @* p' k; |" z
    if(upp_error_count != 0), M# }& m( @7 {
        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 J" H9 v; x3 d# Z$ q3 U
    else
) c6 o3 x; p$ K+ i        UARTPuts("uPP transfers complete!\n",-2);  d9 D: B0 }8 ]$ ]; W7 g
( u5 c" O$ x8 ]2 W0 ]# O. ?; |+ ^' S
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: u. D+ C1 j4 k
    UARTGets(ch,2);; j% b7 G  g$ t2 K! e) R9 A" z
    UARTPuts("\n", -2);7 g# O3 W" H; _; Z" p& f
! c: J+ T8 [! g+ l' Q: m+ b5 I
    if(ch[0] == 'y')
; P& d/ p( Z) r9 @, g" S    {
4 ]7 ]% i) D, a' A$ X  z$ w        /*打印全部读到的数据*/
) J9 }8 ?* j1 L4 r        for(i=0; i<upp_frame_size; )
) I8 I2 _$ Q! h: o: U/ j% V        {
" C* v; h1 u5 X- w            for(j=0; j<5; j++)2 b6 a2 }, L; w) i% T
            {
9 ~% Z' q0 H& r                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
" ^! x' S/ B( B1 Y( i                i++;" K5 V' E5 d  K3 ~, ?% z" T
                //if(i >= 4096)" c" U2 c( l2 Z) A5 {7 O6 S7 x6 W
                //    break;* @5 e9 N) d8 z2 V- I6 W  E
, a- t3 r( g. s) k9 r2 ~% z( I- s6 b
            }
0 u1 J$ T; N1 W* o" I; l  g: n. c# i            UARTPuts("\n",-2);- y8 {9 U7 N0 M5 n6 s' B7 `
        }# E3 F+ L6 k- d7 p0 H8 Q, P
    }
6 i5 d# w6 @' E& ^; L0 P: R1 X0 F+ `& r8 s
}

, k4 X' _( P. x' A

; Z& z8 f( t* w) K/ q. {' d
" V; t* A& h! J
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。' \5 R0 |0 }9 T- b

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 @7 I! t+ a  T. p




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