嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 h/ c8 O2 X, t$ R# b+ x5 U8 w
Void UPP_TASK(Void); V+ G; v7 K; g+ ~
{
; o- @5 ^) T4 W5 i' J# j6 [  Q# H( p; T* e! Z( E9 W4 X4 r' C
    int i,j,k,target_int_count=2;
6 ]' S& l: n* f. E0 W    char ch[2];+ }' m$ i1 K( q4 B# k
8 u% @; O- Q7 X7 q* Q
# h9 }# b, w! {* {! r6 E. x3 r- z
3 d0 ~! R# D) S2 U! Z4 `! C. t
    upp_interrupt_count  = 0;
: A; `; n% i( n: H2 S6 Z5 v    upp_error_count = 0;/ r1 Y2 |" q3 l7 i  _' W
% u0 i" z+ ~" ~1 N/ q0 g) u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);& N$ X# h! h+ M" x* J  r; K) |
    // Initialize data buffers
: W( Q- w! s  T( O: o, m5 f    for (i = 0; i < upp_frame_size; i++)! @8 Z4 U7 d6 ^% W: E5 g% w7 d, N
    {0 ]' U5 T6 k: N. a3 v0 X! ]% [
       upp_buffer_b =i;9 z5 u) ?) Q6 s, q' ^4 q
       upp_buffer_a = 0xDEAD;
9 n$ T; q8 s$ V* D5 Z    }
* I0 Y' |9 ]7 E3 o6 J! c  d& @8 q( Y, l( J; _+ W
    //for(i=0;i<1024;i++)& n) F+ U5 d7 o5 g7 q: J
    //    temp=0;
! a# c! P- y$ e% Z9 m) x
, N9 N" {/ M7 g    //UPPReset();
4 q1 }, r5 E5 |* }" p7 _- O    /*启动UPP DMA传输*/! g% ~/ L: t& E/ m# `0 I+ u
    UARTPuts("upp_prog_dma_i\n",-2);
3 o0 p& o0 D! K6 z8 M    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" ^$ K# X7 c$ x- i1 C3 H
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# R+ u/ d' v7 z, f4 Q" d, @2 n
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);( h. |/ X, a. h

7 ]$ P4 w/ l! ~/ s( T2 Y    UARTPuts("upp_prog_dma_i\n",-2);
" V4 R, \" t+ ]5 G2 K, B' p  v    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( T) r1 d9 ~* G. C- x  g' K: g    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; E' ^: w+ a: s
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 j, U/ d) I+ v1 ~! K' L
, J1 [( v' N; m. \
    /*等待UPP传输完毕*/
! m1 U) J0 L, Q  ~5 `! _6 h: z    //i=0;
  O8 t$ p  j7 Z1 t! g) y" {    //j=0;: C, w2 z- Z$ p1 q! Q  i1 k- O
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( R0 d1 x  O) H2 V. d    {
2 C9 \' B+ i# ?# k" c        /*  测试UPP传输的同时操作普通DDR数据1 k3 d0 d- E! Q4 s' R* ^0 O0 ^3 s% ]
        temp=i;
( I( F" C8 o& v+ }        i++;
; b3 p' G- }8 ^* P: _3 A, b& i2 s        if(i==1024)9 @, ?5 w! H7 y- }  p
        {/ _1 `# ^# h5 t* c
            i=0;
1 \, f! d: z( k  I0 i( }            j++;
# D: r  E1 S) }- A        }
) c+ u( S' }, v8 n+ c; Q& @        */
4 w0 ~, M+ [( ~5 N2 ?% l: t
$ p9 T4 p( f' U1 `7 b0 y( ~# \% ]       asm(" nop");
: c9 f9 I1 _( F4 f! P/ h3 |: L& i6 ^! k5 h
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 R2 n$ N! j% c* A4 ]1 v
    }5 c# d  U9 ?+ i% h; Q& ~5 l

, s8 B/ A2 N, Z  d" S" D    /*检查UPP传输的数据是否正确 (loopback modes only)*/$ ]8 _5 ~; t- v( L% F/ e! H2 i
    //UARTprintf( "i=%d\n",i);
( R4 I, o7 C8 ]5 _- R5 S  m: A    //UARTprintf( "j=%d\n",j);  G, `, V" m$ E. t
    UARTPuts("Data mismatch in buffers.\n",-2);9 D- q, ^2 j( s$ ^3 L( l: h7 |
    if (upp_interrupt_count == 2 && upp_error_count == 0)5 o- |" X7 D3 G! M  b. P" F2 m
    {
6 S2 V, u& i) F* K  @6 ~: p" q        for (i = 0; i<upp_frame_size; i++)
4 ]4 P5 ^# [. v+ ~        {2 w% E) x- x5 `1 J1 M6 z
            if (upp_buffer_a != upp_buffer_b)& J7 a8 j6 l( w  |  j# H
            {) y$ `/ J9 }; U5 y1 |+ F" j! E
                upp_error_count++;0 C% w3 Y/ I( V: i, r
            }  X  L+ I1 `4 I
        }4 K/ R2 ]; e1 A( o, ?7 \) X; u
    }- L/ H5 _6 B5 n+ |' l$ E1 c* d

- H1 ]8 ]$ @8 y: j% T    /* 报告通信结果*/0 U1 K# |2 v; A8 |7 [' y) O9 n
    if(upp_error_count != 0)+ I; s3 u# Y/ u7 D
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* C1 J' I/ ?; F5 Y- d) D, L! U. F    else
: o7 Q! p( ?* A1 K        UARTPuts("uPP transfers complete!\n",-2);
# I' ?" P9 @) X: V9 S
/ `6 P# q4 T! L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# u% N, G- t3 T5 D    UARTGets(ch,2);% ]' w( V9 r* q
    UARTPuts("\n", -2);
+ Q4 n8 Y3 f% t2 C4 [% K$ X% c( x) a8 x4 ^2 t: z
    if(ch[0] == 'y')
, j1 Y0 O4 l- D( {& F    {
9 X$ R& G' |1 c0 p0 s; p        /*打印全部读到的数据*/$ H9 f6 y; g; ^) O" W1 ^
        for(i=0; i<upp_frame_size; )! U: \- O; e8 f$ \+ ?
        {
  O! h$ i* A. h$ Z7 f            for(j=0; j<5; j++)) u" L4 n& \  a$ m5 ]; D1 ?
            {" j1 {" |, ~; |0 L6 b
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  T+ `& C4 [/ @3 ^+ p
                i++;
4 ^2 T# f' d& D  r; h9 u                //if(i >= 4096)
' |# m# B/ D" Q                //    break;
5 o$ u% {6 i% a& \2 l
4 `" ?; Y8 Y" _$ O* l" Y" T+ a7 ]6 s            }
/ k5 M" Y/ V4 q+ ]8 N" i# \            UARTPuts("\n",-2);
4 |: v# _8 L# B. G: J. d8 u        }
5 z) W+ j! b: h4 j" x( m    }: l5 _) Q3 x6 B" K& F
* [$ l/ L! q: b$ A) q
}
4 @1 R$ {- d0 z, a) y
9 o; m- @7 E5 H* d, g* x/ Y
. W  E! ]! ?. w0 L! r/ m/ a" i

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" n' p. l/ E0 B- C! C/ W0 A3 W( c
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, Y2 v( Y7 _9 O. h. e/ d8 N





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