嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' P, u2 n3 Q! }& k1 Z
Void UPP_TASK(Void)
$ s& D! m' u1 T1 f2 G0 q4 U$ j{
- @$ I& C, G) z' ]6 I/ n/ R# b6 Y" ~8 z3 ]
    int i,j,k,target_int_count=2;
! E1 t& J  w" K  H# @    char ch[2];
6 C, B% G# o. b3 q2 r- k
" |' q3 a6 A. K8 P( M
% q+ r, e( \  V  R) C7 Q8 J) T' m6 j' H# t  E8 e! S
    upp_interrupt_count  = 0;
) B* ?5 G! f6 v) @, o! V8 p    upp_error_count = 0;- I3 I8 [$ i4 S2 X+ e, c

. k( V) a2 {+ T9 E1 f    UARTPuts("\tResetting uPP buffers...\r\n",-2);
- Y9 Z9 y: P# V    // Initialize data buffers
/ K. V+ m* A: r    for (i = 0; i < upp_frame_size; i++)
- c  p% Z4 v8 J; O1 ^8 j% P    {
4 ^2 t6 a) s* V       upp_buffer_b =i;
, x( {% n6 @6 o) k  o2 E       upp_buffer_a = 0xDEAD;' F% k! h) s: y+ j) f
    }
7 c. G# O" ?) [0 S; |5 l; x+ z" N" y0 G- f7 r+ l
    //for(i=0;i<1024;i++): g0 Y% U3 U/ g: a! o# V+ G5 F% V
    //    temp=0;! V  r/ ~* x2 C  {: P1 D
0 D* D$ a! S1 T. f4 B) ^
    //UPPReset();
  ?+ G' ^1 q9 ~    /*启动UPP DMA传输*/
- w/ \: T/ y5 K4 l+ d    UARTPuts("upp_prog_dma_i\n",-2);
( s! T7 l! I. s) W* K; F    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 g. K8 M7 g: \& S) e$ A    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( N- p- _( b$ T0 |' `! F/ X
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: \( K. W3 }0 g: {' C( Y
! E( k3 ^9 G2 n7 x
    UARTPuts("upp_prog_dma_i\n",-2);
2 R- Y' N+ ~9 V7 B: d" P    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- [# G5 x; W3 `+ E7 K
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ V7 s2 i  g+ R. f5 R6 d. K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);& l0 ^2 ~9 n5 F. ~  `4 ?& Y

0 t3 w, _# ?6 |7 D( p9 i; B5 U    /*等待UPP传输完毕*/
& F/ [; \" Y1 t8 u    //i=0;
* e) z  C. E: g* v; _    //j=0;
) b1 K! B1 g' {, o: d1 O: H    while (upp_interrupt_count < target_int_count && upp_error_count == 0): ?8 z2 \# t7 f* M
    {
% o" M+ r$ Q- f! ~& x9 l  l        /*  测试UPP传输的同时操作普通DDR数据
% [5 m( H& L" J6 U) L( @: C- m* g        temp=i;" ?" `* w9 @$ `# L: x
        i++;2 \; f7 K) F9 n
        if(i==1024)
$ A/ R% v! `/ o# P0 K+ {        {# G2 _# O, i8 A) A& H) D/ `5 |
            i=0;& B. P8 }3 B% b
            j++;
, R7 V5 [! A4 c- X, n: W        }. K" A# Z' e. ]9 S. p7 l
        */
4 i% ]" s, O+ K, Q! ~+ ?: N0 G: t) b. C
       asm(" nop");( n& Q) k9 t1 i3 k/ K% E* X

( p* O! w, C, d. g       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);$ q4 r6 Q' _" F5 ]2 J! u
    }; H. a( W4 c- F: U: s

5 _7 ], q0 B6 I6 c( P& E    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 Z/ w6 Q, v. y" s. C3 f3 W  e! x
    //UARTprintf( "i=%d\n",i);
) ~  O; a. T3 N, z0 f* C    //UARTprintf( "j=%d\n",j);4 `0 e8 f5 a) Y7 z& k6 Z" ^" n
    UARTPuts("Data mismatch in buffers.\n",-2);
0 q  O8 D' H7 w$ n; N! ^, t    if (upp_interrupt_count == 2 && upp_error_count == 0)  A( ^; J$ U6 ^, S) v$ ?0 J! ~# D
    {
% V' x6 m! }( A  T/ B* W) s        for (i = 0; i<upp_frame_size; i++)( V& d& x3 u2 T0 \& H
        {; L7 E5 s$ E, [( N2 {& }3 S
            if (upp_buffer_a != upp_buffer_b)9 E1 K/ J3 l+ B1 p& o& Q
            {+ [. M1 Y; F' E7 K: N! u5 R5 g
                upp_error_count++;
$ D; D2 Q4 [  Q# `/ o) v& j- a            }
  E! ^, o' Z, \: M5 Y5 U        }
( g+ m8 N- G5 _3 |6 b2 M- o    }8 W* s8 V- E0 G  G' N! U1 ?3 G  v- C
# c& Q' f3 [2 ]' f/ D/ _8 P
    /* 报告通信结果*/
# l4 M% J" M1 M7 \    if(upp_error_count != 0)! @( ^/ P4 l1 h
        UARTprintf( "upp_error_count=%d\n",upp_error_count);  a$ Z, R4 h! Y$ D3 C) A2 a7 j
    else
8 d/ r. R7 R( M; a+ n; c        UARTPuts("uPP transfers complete!\n",-2);
6 W7 H) t6 \2 Z4 N! Q% `: o& Z5 A4 d( X
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 i! k* y2 |# ?: X/ M1 s( \
    UARTGets(ch,2);
/ f$ ~9 b* q) E$ n    UARTPuts("\n", -2);
9 i4 {. s) [0 ?  f: y" X; R
8 D  x$ g9 E! E& b& \    if(ch[0] == 'y')
: |" N; g  d+ G( {' W    {
" a# {$ y) _, t6 g. _        /*打印全部读到的数据*/2 \8 N3 y# W; Z* f3 e7 b! B- W
        for(i=0; i<upp_frame_size; )
* c$ ]- @5 g1 J1 C        {7 V) L& N+ w* ^0 J$ d: d  V* g1 _
            for(j=0; j<5; j++): P8 @3 n. l$ E  W1 l2 e$ Q- o
            {
2 F9 w! R$ F- ~% w$ i                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ R! X) t0 Z) G                i++;
; U3 ~; o: O1 ~% h1 t. C0 T                //if(i >= 4096)' q: i5 b% v) g/ {- z
                //    break;
3 T! s, q( E5 x
/ N' C3 [& D, `" p2 r% I            }
; F6 V7 t+ r$ ^. M            UARTPuts("\n",-2);
, B2 A/ V. V& |) _+ A( G        }5 j8 ~% V8 @. w+ g% }
    }
$ O+ Y$ x# b# f; Q- T4 }( V0 q! b! y' P, ?
}
( q+ g6 b& \7 U  x( }
9 r  y) ~& h7 X7 A# P- V1 m; a
+ o4 }" t  S$ W

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ d4 x5 I. t( y3 |+ a- |

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ M( L. S- a- G




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