嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 ]5 o2 K1 G) u# l
Void UPP_TASK(Void)% y4 E5 W$ }. {' `3 ^2 n
{, \" Z- ^1 g% b
; u$ B/ j  }: X! W
    int i,j,k,target_int_count=2;# ]" S2 O" _7 n7 \
    char ch[2];
4 Y3 ?2 u6 P( P; A: K/ ~5 W4 T* G. o* S" G9 b! ^" w/ E, `/ u& a- i9 J7 z
7 Y  d) K5 F0 O
) N7 T8 h* j( G% P% [$ ~2 V( y
    upp_interrupt_count  = 0;
) r, [5 e5 A" E" Y; E& ^. g    upp_error_count = 0;4 F# @" v1 Y. j0 ?0 b- v8 U6 }3 q

0 L& L& T* ^! [+ X$ T9 O5 \7 a( K    UARTPuts("\tResetting uPP buffers...\r\n",-2);
- J( T7 j1 o2 f2 W    // Initialize data buffers
, P3 H* n. A9 C' w2 O    for (i = 0; i < upp_frame_size; i++)
/ o2 I8 l) A  P3 d2 O4 `    {
' \- S% S9 B' C5 z       upp_buffer_b =i;& z( f2 y, t- j& L
       upp_buffer_a = 0xDEAD;& A) k7 }0 c7 y& ?' ?1 i; j' H* w
    }" l; ^: J5 w& ^6 R* V
) r1 L. d% j" J( x4 j3 l6 y4 Y5 o6 j
    //for(i=0;i<1024;i++)
/ l. T4 o1 }$ x0 T    //    temp=0;) @4 k' N9 q% f( p: B

8 k/ x9 [2 K+ g- F    //UPPReset();
3 `) \! J1 \% O! p& y- z# Y  U    /*启动UPP DMA传输*/
+ p* q! b* ~4 r2 z    UARTPuts("upp_prog_dma_i\n",-2);7 Z, g6 @  i# {3 R' ?1 c7 l8 I# V3 Y
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( \. O/ g1 f& l    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 w" r: g, a: ~& I, }    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ d( V" y1 T8 c; j+ V! S% C8 d8 s
( ^/ G8 {/ K+ x  ^+ a( a1 I6 x
    UARTPuts("upp_prog_dma_i\n",-2);$ M! s. Y% ]' ?, d6 v- h. A$ @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- }, U, F7 G- G
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: k; x5 A; |4 t/ [# W$ D4 r6 R
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ K& I5 Q+ w5 b& G$ i
) g2 ^8 R! W7 c& ^    /*等待UPP传输完毕*/
$ j8 ]( {! m/ g# K    //i=0;
$ t% F; \3 Z2 f. A" f3 K# @8 t  m    //j=0;5 x& [2 r1 d% W& \6 ?: C! @
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ b1 ~) P6 O" F# X5 K0 M. P. S    {
2 F9 ^. z1 J" j2 S        /*  测试UPP传输的同时操作普通DDR数据5 K! h' ]; [; F" b6 G: A
        temp=i;
  i) _. T' C# W, C: K9 }        i++;& M+ O9 m# I. A$ {
        if(i==1024)
5 t. |7 T9 W2 b0 h, N        {) u% g1 k3 s+ f+ O" w+ v# v
            i=0;* n3 n0 h' b0 {; q" T& G0 _
            j++;' i0 s) x$ l: B$ V. C' K3 C+ q3 o
        }4 }' c; n, n$ `* J0 r
        */
" L9 d! H- }; x# l3 X# r0 G
' e5 X3 u% }$ i+ E* S( Z: _# r       asm(" nop");7 d$ q; e( g5 x- V

! c# w) Y( a" e! R5 D* R       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- r5 n/ y) R4 J/ k8 W$ Z  s; d1 L: K
    }: s& \+ C+ b) K3 F. R0 J5 x$ v6 v7 g
, F+ F- I; X3 U
    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 x; {% b. O( N, g+ y! ~9 b
    //UARTprintf( "i=%d\n",i);
5 l' Y& W9 N5 E/ p5 ^- X    //UARTprintf( "j=%d\n",j);7 X* J: g  `- l: x+ e# p* |
    UARTPuts("Data mismatch in buffers.\n",-2);
. S3 C' \3 o  t, C    if (upp_interrupt_count == 2 && upp_error_count == 0)0 N# k4 i. Y; ]; O5 Y1 Y6 |4 U& m5 c
    {6 j! @# ^3 Z) r) i# U
        for (i = 0; i<upp_frame_size; i++)+ K& Y5 z* c3 @$ Z+ R
        {
7 d8 ~6 S) i' ~1 O! `            if (upp_buffer_a != upp_buffer_b)
. f" [; b/ L" ^3 p7 B( n0 M            {
& ?- K  p! k( U/ R                upp_error_count++;
/ v! ^' B7 B, s: F( w/ a" {            }. X. ?* E% n# Y  w
        }3 f# ^! d4 ~/ }
    }6 a, Y4 p( t! G) I1 e. L9 X

( L4 ]. W' N: f0 C& [    /* 报告通信结果*/
) a+ z: J8 M- A' ?! C/ j. m# x    if(upp_error_count != 0)% v9 D. f- M2 D$ x8 P  O8 v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ T5 c' l, l( ]) ^  @( }7 d
    else/ U2 g. t1 ^# v
        UARTPuts("uPP transfers complete!\n",-2);7 Y. y1 i1 U3 l+ K
0 F4 \5 D: s) l' M8 G- z% J$ U9 |& d
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
! [" K1 p% j* i& G# Z" Z3 q, J    UARTGets(ch,2);0 ^  T* H/ _; K: v
    UARTPuts("\n", -2);
! S, T* Y1 x1 N/ \& w  F3 @
, F$ |  h2 F% L3 _    if(ch[0] == 'y')1 p# m. K+ U: a2 K/ Y
    {, m' n( m" y, t" \# S& @
        /*打印全部读到的数据*/* H; ]  n( Y, I+ q+ r: J: e) m+ s
        for(i=0; i<upp_frame_size; )
1 P5 r8 ^9 a& `. e+ t7 W  w        {
  E9 h3 X9 x4 p3 L) x1 z8 G7 |8 x            for(j=0; j<5; j++)& w( S2 q' b+ W
            {# T% o* x5 c+ T& n" p. [) S
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 I' E( ^: h5 n, H/ B- k/ [
                i++;# O7 {5 \) u$ r/ m' p
                //if(i >= 4096)
5 ?0 K  g# |3 e) F& W6 ^                //    break;
, ~5 C' G  q. U* i0 R% @' y% h4 S6 l7 h+ C3 P3 B% H- H
            }
. n! X+ {5 |9 m8 t* w5 Z9 ~            UARTPuts("\n",-2);
+ t! u+ ]' ^' e. o/ R+ X        }
0 E8 G; z+ M! W! Q" E    }0 ]5 J2 B3 W( c% x0 y3 Z) v& y
8 {' O  ?5 }% J; T5 C
}

0 U! b2 M, l# M/ x" ?

$ I1 v/ o* I. g2 i9 C5 f, n0 k6 T4 E( ^  q% e- m

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 F/ [. J' \  d2 E* A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 n! @( t2 c& S- o" x. p- Z




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