嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ {4 R2 X# x5 r9 J$ Z+ j; c
Void UPP_TASK(Void)
7 c0 S: R& m, K+ @/ n$ q{# p6 J4 s5 p% }% m4 n4 T
" C+ e) j; `: A5 C: H8 \
    int i,j,k,target_int_count=2;( D4 O  A" o3 c
    char ch[2];  v7 A, R( n& B& M' X* [

+ P+ s; `+ E: }' [! [
% N$ \3 o) c6 L3 Q7 [! d* }# I5 J. [9 g4 A
    upp_interrupt_count  = 0;. u0 I% R+ Q' H/ y3 r
    upp_error_count = 0;
* f( J0 J8 T9 i) U* K5 i1 L& e4 p6 m7 f( _# ~
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 o+ O) f& [! M# l& Y+ E    // Initialize data buffers
% _$ H+ z( a, g* K    for (i = 0; i < upp_frame_size; i++)$ N( X1 X3 T, e) j
    {% ]* U% R2 d- Z. |7 }" g
       upp_buffer_b =i;5 u0 X1 {( t$ A
       upp_buffer_a = 0xDEAD;
8 H  g4 K" Y# [3 ^2 b' s4 D    }' o, A0 Z$ z- V: U1 Q3 k

1 _  m5 m# ?2 T* L2 x& c! u* R! G- v    //for(i=0;i<1024;i++). H. p2 O3 l6 y* C
    //    temp=0;2 k: }" q5 {* ?! m; {0 y8 e3 S; S
4 ?: e) F8 P6 ^5 \
    //UPPReset();% |& E! B! t) b! w' S) [
    /*启动UPP DMA传输*/8 c* M' U7 Z0 _9 {/ Z+ J+ L
    UARTPuts("upp_prog_dma_i\n",-2);
; _8 _( t5 u0 G1 t& U    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' t; G. `+ m; y$ |& p% W    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, \2 l1 ]" c! V5 }, }    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 T1 t; D" G% h# h- o) Q% V" M0 A. W& ~  K
    UARTPuts("upp_prog_dma_i\n",-2);
3 V, N+ W3 W$ F3 j: h: t    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. Z8 y) n- e( i. C. G1 p' i- B) @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 }0 P( k1 q- n9 b. G- W' v  z, t
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: b) X+ y1 x. j5 Q! B! }; W5 y0 ]
! y$ g; g- C& L7 J& k7 Z$ Q1 g    /*等待UPP传输完毕*/; ?. o, J# v, o9 e5 k' C) Z
    //i=0;
7 e1 y6 C0 P% s8 b% s9 L, L# ]8 H    //j=0;
) ]# K  V1 H& p# {    while (upp_interrupt_count < target_int_count && upp_error_count == 0)& N  Z( D4 H- d, d$ J$ y
    {& b5 g0 t$ `8 j5 t* f
        /*  测试UPP传输的同时操作普通DDR数据6 ]! x" b# t% `9 O2 i; A6 h* O' h
        temp=i;0 b: h) ?" i* J/ n- q
        i++;
% H& _  x! V% _        if(i==1024)
# k" n% F" o% J        {
* G% |: a$ e/ z( ~            i=0;
$ I$ o( a" w5 N' N+ t' c+ i            j++;
) Q! u# n$ N( q# W# j! e4 O        }
1 X# _& u3 O' S  U$ G        */4 ?. g. d. @) ?

/ S# w1 l9 ?/ k1 f; K$ H8 g' H       asm(" nop");8 j0 y3 C  P& ~0 o& A

( M. S& W0 w1 N/ M* Y& |8 m* w       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* t9 K; C/ H1 G9 ]    }7 D5 e$ I8 [* e% M7 j* T
& T! N0 N) ~6 Z
    /*检查UPP传输的数据是否正确 (loopback modes only)*/' |$ c3 ^# Z; Y1 v
    //UARTprintf( "i=%d\n",i);
, _3 Y, x2 [: s+ z, E6 d    //UARTprintf( "j=%d\n",j);5 U' t! Z  w$ i0 N) V9 o
    UARTPuts("Data mismatch in buffers.\n",-2);$ @; K6 V$ n' A+ j- q
    if (upp_interrupt_count == 2 && upp_error_count == 0)7 d( C8 `1 L& I
    {
) Q. J$ U& B4 r8 k/ p! j) S        for (i = 0; i<upp_frame_size; i++)- M8 J! n& I8 \: q1 _
        {
# Q5 M$ A4 A6 V" Q9 Q            if (upp_buffer_a != upp_buffer_b)
' g) K0 ^3 q6 v0 Y# C3 h            {
1 n. G. o* |4 c9 o6 E/ x                upp_error_count++;/ R( u$ E- ?: ?. a- F4 T0 U
            }) E* R* b2 c) f- l% E9 }
        }# U, @& q$ a9 }9 A! R5 Y4 G
    }
7 e8 W3 f* Q# f6 H' D% ~0 l# O4 j+ A. i7 x  h. v
    /* 报告通信结果*/: c; ~! l! K* N" G0 A2 u
    if(upp_error_count != 0)
9 ~4 m2 P  o5 n7 V6 ^        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 M$ w( Q3 O0 ^$ W/ Z' w
    else
7 l2 L3 T" q+ _8 V6 c' ]6 d) }3 e$ J        UARTPuts("uPP transfers complete!\n",-2);7 t% F, X8 \5 i: f
) e, V# g: O1 x7 r) I
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);3 `- u3 t+ y  b- L: V' j
    UARTGets(ch,2);
) |  i( u  }4 s6 d4 C  n0 H    UARTPuts("\n", -2);
( M1 m/ Z/ G. v" k7 P. ?1 D' r. [7 W7 f
    if(ch[0] == 'y')
) {+ [- A6 L- w: G! e' ]0 f    {4 o0 m9 I: o3 ?6 v$ Q
        /*打印全部读到的数据*/! Y! b& }5 m5 }+ J
        for(i=0; i<upp_frame_size; )2 H" y2 Y3 B* }2 A# }
        {
  R' i7 p! C8 F' o            for(j=0; j<5; j++), h7 D. b% W% J: d6 _& O
            {8 A0 k$ r! x& k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ Y) g" K/ M6 v. s6 h                i++;, y; U5 Z% H/ G4 q5 r( y5 q6 B4 |3 ~5 j
                //if(i >= 4096)/ h" K. Q* }6 q  E9 {
                //    break;
" O6 N1 B2 w6 \+ Z; U3 I. G& w* m
            }7 @  k1 a* l5 R4 ~/ |" Q" n8 J3 E
            UARTPuts("\n",-2);) Y/ H: a8 n+ ]7 y; ^, {8 Y
        }2 b, ?* l  Q( a& _& r/ I2 x7 _
    }
2 q& ]! S/ G) d$ O- q/ O$ }1 w  v# _7 f6 C" b& E7 j% w! r
}

# [; y* |8 U& b/ t$ E8 P. [

6 U, X: \* E' b/ I; z* u* I4 q

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* O1 @0 g: B# u9 ]* `

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 R1 m  N) v$ s9 Z- [6 l3 R/ W# @: O* R





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