嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?" @! Z7 t$ e1 k: \0 v
Void UPP_TASK(Void)+ B' x! J& ^8 r+ |$ \4 I4 b
{& j4 H! R- n- L6 J+ q8 K+ H; U

$ p; T% q2 p2 ?- X  ~6 [    int i,j,k,target_int_count=2;
+ }. P& ?8 O5 G  _0 j1 {    char ch[2];  M8 {7 `' y' v% T, x" B* H, c

# E8 V& l& f4 B  Q4 W8 c8 O! g/ Z6 H& F7 U5 h# f, S

) f9 N- h. T; K3 N) C& C    upp_interrupt_count  = 0;
7 J( o( e3 l+ W; k6 [# p. \, b% Q    upp_error_count = 0;
% Q" X, s2 c5 m1 f5 R; [) C; M, h
    UARTPuts("\tResetting uPP buffers...\r\n",-2);) r$ k4 n8 t* R
    // Initialize data buffers+ a2 |3 |4 N1 X" t8 ]
    for (i = 0; i < upp_frame_size; i++)3 c9 d. S$ J0 }; o
    {
6 `1 i6 ]- Y+ m2 `) x, j, |" K9 h! a       upp_buffer_b =i;0 x% N  C9 I7 y
       upp_buffer_a = 0xDEAD;" j, o$ w+ ~* X: P( n
    }
5 J' b3 u8 x+ {3 D8 ^$ g% c' N- b' C9 ]- ^# ~9 V3 j0 ?; }- v/ y" ~; ?
    //for(i=0;i<1024;i++)
* ~9 b. i* a& k1 G+ E- J3 |0 Q1 ]0 w9 ~* u2 W    //    temp=0;3 c  m5 h  _4 b+ B) C$ g% \

/ g+ y/ ]0 @- x) v% K' x    //UPPReset();
# s# ~, L# L3 _7 R3 h    /*启动UPP DMA传输*/
  m3 j0 ]% ?: j' c9 m6 E: k    UARTPuts("upp_prog_dma_i\n",-2);
  M4 {( u4 `3 R) w8 Y* b" ~    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. y' O  K% S4 P' J    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- p/ D( G. R$ h: g    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' K2 M0 e+ x- [6 _, b- z0 f
" B/ w7 L9 {: b2 Y  i; I
    UARTPuts("upp_prog_dma_i\n",-2);. D: K; V' l. E( F% H$ J
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 y& |; p8 a! \4 q5 @0 C    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! p: ^# ^, v/ S  G, Z" w3 S& O
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  b5 X7 L, R9 q$ J

, E1 f2 C2 O" c" h7 K* @; b$ K: N    /*等待UPP传输完毕*/
' g9 Z5 o& L2 j: @9 c! Z    //i=0;# W% y: b) W, Z/ ~- ?3 e8 Y+ x6 i4 S8 v
    //j=0;: P2 H) ]! B3 C
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" X( _) k7 ]" F! y8 s    {9 e; r0 d+ k/ z5 O5 ?/ O
        /*  测试UPP传输的同时操作普通DDR数据1 b1 N  n: L- E; Y% }* f5 v
        temp=i;
6 Q# d2 h* L9 c" z4 `5 P        i++;
& Q& F$ ~& V6 c1 j- R        if(i==1024)
, K  S# i/ L. r  ^        {! r) A9 G' ]# s+ c5 N4 g- v% E4 V
            i=0;
- |: X$ E+ v& A- H7 i6 ?  I4 e. C            j++;! P$ u) }7 C; k6 W
        }3 z7 T3 L3 I3 ?5 d6 \
        */
' N; H, J/ [+ P: e4 Y' B5 i) j# E+ x+ Q7 K0 D
       asm(" nop");: L8 D! R6 `/ o; M, R& ~
" y0 n. L; \  v% p
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 t/ a0 @4 L3 o$ e/ g4 d9 e6 T; ^
    }" l) Q; V) _9 s9 E

1 I+ V- ?5 U) E/ V1 G    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 a' R; _* R3 v- E
    //UARTprintf( "i=%d\n",i);" e! w8 Q1 x! {5 O
    //UARTprintf( "j=%d\n",j);7 N0 Z  f& u/ f) a8 V6 u3 t9 g
    UARTPuts("Data mismatch in buffers.\n",-2);
5 f; d% ?; \1 Z- \5 ~0 C6 x    if (upp_interrupt_count == 2 && upp_error_count == 0)! R4 K0 M2 ?5 Y9 \0 h
    {3 s; p2 h* ~- ?6 e( Q' f6 \
        for (i = 0; i<upp_frame_size; i++)
# `+ C$ V1 k% N- h7 P        {* c) a' o$ P5 B6 |3 B- M( C
            if (upp_buffer_a != upp_buffer_b)/ d+ @2 p/ Y  _! B
            {
0 j- _9 Y3 ?* ?/ n( M2 J                upp_error_count++;
: W8 D; G( f+ n) A            }
/ K5 ^) C  L3 R& H8 s. Z, m1 A        }
) I/ n6 k- o& i. k; Y& W    }8 C2 C, z# J, y; j6 o

4 r7 j7 N9 @! X, Z7 a    /* 报告通信结果*/; ]$ ?- U+ Z, S4 J4 R# x5 o! s% O
    if(upp_error_count != 0)
7 q; E& r% Z! k& h- I1 B: {  O        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 W) [' M& A/ L, L% K) M$ V% |    else
" B0 i& G% ?& J) x        UARTPuts("uPP transfers complete!\n",-2);
* \  N+ G+ @# s( J1 {+ [  H5 \& w/ S; @3 ]( u- I* @
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* J2 T" w5 [( z! ?! s    UARTGets(ch,2);
& H% g! b% E# ]. J/ Y* F    UARTPuts("\n", -2);, I1 K% r3 L+ c& w
/ W5 W% S& E! c' Q* I, v  H* k. `) Z0 R
    if(ch[0] == 'y')5 i$ @1 n# w$ X& }* b, B5 t
    {
7 @2 O) Q2 u8 l; @2 m( I  Y        /*打印全部读到的数据*/. T3 a( t% b5 V5 e( t7 W4 I  M
        for(i=0; i<upp_frame_size; )# F0 f9 W, ?4 p8 K6 d
        {
$ m9 K( a$ c! H  h" W+ S: o7 b            for(j=0; j<5; j++)7 ~. L8 F" j6 \$ G. R/ a) F
            {: {9 y: d' C' C. A+ h3 I
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);; ~  ]+ K4 w  ]8 e: t0 D  X
                i++;
/ p/ c6 S$ @  r! ~                //if(i >= 4096)
, w6 n7 L4 j6 d( S0 R, m                //    break;' u! C/ s* i, n/ \8 c* o: B) [

7 _$ ]% x0 U4 A/ Z, h            }
3 K# C" o  n3 @! f9 w. X9 s: b5 K            UARTPuts("\n",-2);7 Z0 j4 ~: V  M3 Y1 h9 C4 O# c2 n
        }
: Q! L  H4 P) [- G7 F    }
4 Z, T* X) w& U
3 s' D. R3 }! p  \5 s% Z! J}

+ t' }/ a* h" Z' x, N- |  x

2 p1 `6 Z' Q+ h3 X  i6 e/ ^" @' q5 m% {

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- ?8 t; p/ X* Z2 |
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。  o; q( u% k7 Z) N$ _( J* N





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