嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; Y4 ^9 D; c2 P
Void UPP_TASK(Void)0 c- K+ Z( e2 [1 t! @
{
! P! m0 \7 g; k# t$ g$ }' F
/ i' F" _$ p0 ?" _    int i,j,k,target_int_count=2;
6 i! i4 e" a" [    char ch[2];" q' [7 J' s7 j& ?. K+ X

* Z, H0 i! f: c1 X
  H# M3 z# |  P! {
. X0 \( h5 N6 Y+ e8 A    upp_interrupt_count  = 0;) z6 }" e7 I, P9 v& [- e, H8 L0 R) D" H
    upp_error_count = 0;8 W& D. D$ I: g) `

/ P1 D6 H+ t7 w7 K0 q+ c1 [    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 A2 [3 ~  _  r    // Initialize data buffers6 ]8 n" l) [3 w  g* i" {- Q2 p
    for (i = 0; i < upp_frame_size; i++)- m# }; r1 I# C) i
    {. W7 F4 o8 f9 V% K9 P9 u
       upp_buffer_b =i;
; m8 V% r7 ]" u; [5 D  S6 ~       upp_buffer_a = 0xDEAD;) K: i. |2 W" F$ K, ~
    }
  L. ?5 z7 y8 c- ~7 O( C0 H  h& }6 n8 X
    //for(i=0;i<1024;i++)8 A0 [. o' i7 I0 w
    //    temp=0;
" U) C: c$ H1 o! i3 M- k( k1 I6 s) _( Y
    //UPPReset();
! ^- D1 E: C4 x    /*启动UPP DMA传输*/
+ s) _+ w( {$ V2 n) P: ]    UARTPuts("upp_prog_dma_i\n",-2);: i: J8 c7 f0 @1 ?  \9 S  R/ a
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 J4 {+ i1 w& |9 L
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! l6 Q0 p0 g4 l6 x+ R1 S
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% i3 d  u" N0 _: @; M/ t9 C% U2 n1 O( C

8 P& _% v( H- ^- W    UARTPuts("upp_prog_dma_i\n",-2);5 K8 ?4 {- L+ c( @) I
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& m! K7 N& R6 U7 G8 ^" {    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 F7 @2 K! [# i- B# @2 B$ g4 C
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 W8 O, |6 o( N

3 x& {( E1 t" X. r7 F0 z    /*等待UPP传输完毕*/; ?0 T% L  t0 g/ N# Y) y2 _
    //i=0;) W& e' C  w# U& A' @& |. V/ m
    //j=0;2 [1 K7 r! o/ y3 @* o
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" }( c0 H& D. e* J2 T! z) \# j
    {
' i6 f, j+ V0 e        /*  测试UPP传输的同时操作普通DDR数据
0 a3 r. {$ \3 a1 t8 e8 X( s        temp=i;4 @7 E4 v  ?- b8 @: i+ ?% t2 ?' B
        i++;
0 e, }* l, ^: {2 n9 [" s        if(i==1024)4 ~5 t- j4 M7 B% m2 w
        {
) H2 d8 ^# [, |# t) J            i=0;
# j3 N1 ~1 d& r1 g            j++;8 V2 {& ?8 ~$ [
        }2 ], V9 G. f- x+ v+ c7 t8 s
        */
% {  Y% L# j% h* G0 g/ c- D# ~! O, l3 E5 K3 W% e" d8 J
       asm(" nop");
& Q$ d5 d2 F1 _& f: N
2 q* Z5 ?& A) Y2 ~0 q% G       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 v/ }/ t8 Q4 s/ I  [: M. N
    }4 ?0 k- z4 ^6 X/ R( G
  g. T- K# d9 B! ?' O8 U( T
    /*检查UPP传输的数据是否正确 (loopback modes only)*/% c& ^& ]7 E" E- z" I; w
    //UARTprintf( "i=%d\n",i);# R) \( _6 U# G# h; W
    //UARTprintf( "j=%d\n",j);
! }* b- y) e) n& C    UARTPuts("Data mismatch in buffers.\n",-2);
$ p, J- J2 W5 W6 _    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 D0 d: m" l. d/ u: z    {0 ^" s7 Z7 |8 [
        for (i = 0; i<upp_frame_size; i++)) _" Y/ u* `/ Q/ x# j" i& B" r: N; \
        {3 B0 l" H2 S" U) s" U0 ?; w
            if (upp_buffer_a != upp_buffer_b)
+ G% S* G4 k4 e7 e$ Q+ s            {
# F- {+ _& k  {. I* ]                upp_error_count++;
& z9 \$ i8 m9 Z2 B/ N; Z            }
5 ~* C8 u' `6 `' u. i- U        }( o9 C+ j9 e+ N+ g: b/ s1 k) u
    }4 y5 C; {. S2 f0 J( m# M5 R

" s, L5 ~. O3 v( X    /* 报告通信结果*/" s6 `. ?  _2 H
    if(upp_error_count != 0)
+ J$ E/ g' u* A+ l        UARTprintf( "upp_error_count=%d\n",upp_error_count);) T& L) L% b2 X4 K# O3 i4 A' A* O
    else/ i% }2 N7 G8 m/ q. _3 e* Y
        UARTPuts("uPP transfers complete!\n",-2);) L% a  Z: |9 X- H/ b0 H
4 t. x5 [4 O0 v; Z: a& i. @8 l4 L
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);9 j9 I# F2 ~* Y% z3 j9 w3 B3 g8 d
    UARTGets(ch,2);
. r9 Z* r) d. W( m$ J( E6 [    UARTPuts("\n", -2);
/ z; a- U0 J& e( d$ ^" P$ R6 x
" D; _- A0 g7 m% A' o  E    if(ch[0] == 'y')" i2 g+ r/ A& _- V: G3 F
    {0 E. |& U# i& ?/ ]0 O* V4 c
        /*打印全部读到的数据*/) b& c) A' F! w! z- K' n' r
        for(i=0; i<upp_frame_size; )- j# i5 r$ b7 R
        {
7 J$ ?( n" }, D1 J" g            for(j=0; j<5; j++)0 g8 r* v: N' a$ J: z/ T' @
            {. y: H$ H! K- ^  Z; m, s" K! {
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
' ]" J) n( s' @# J! @7 X6 d                i++;
3 a. N6 [! s. y+ f5 P  R                //if(i >= 4096)
/ b% C. P! c3 t" z                //    break;, s9 p1 s: U. J& x4 n

, Q8 V+ f! H$ v) }; _( n            }
) P' O- c3 `, F            UARTPuts("\n",-2);
  d' B( D$ a/ n        }
& s1 e$ M8 Y! `0 P3 t7 D! }    }/ p+ E% z) L# R) J" ]
! Q' ]5 `% N- X- C8 A+ V' m5 Q' c, v
}
$ z- N, I1 B) ]# R- d+ f

+ |8 H# @/ z  U3 ]1 K
* A- m+ j2 j, `+ T' G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% l# Q" U2 g4 U4 Y1 e
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 `. l( r* a0 A* P: K% ~4 p5 d0 n+ J





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