嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# K: z0 ?( Q! [  A0 i0 M
Void UPP_TASK(Void)
$ _  J& s- H2 L  d/ b. Z{0 V% e. @0 I$ ^

% k* W) \& a3 _1 Y7 g" t    int i,j,k,target_int_count=2;& _% E1 n) ]6 w# j6 t" @
    char ch[2];
+ G* ?3 z5 J2 L+ h4 O( I4 o( n# N# O

. t" c7 Z4 u4 o
* |% L$ g7 H0 o$ N: G6 W    upp_interrupt_count  = 0;
2 O& N- H/ `( h$ K    upp_error_count = 0;
. ^. b0 ?. C- R- ?' g
7 f: I' u1 c3 ^! ^) y; Z$ b    UARTPuts("\tResetting uPP buffers...\r\n",-2);( L! ^+ z1 D  R8 D* N% ]
    // Initialize data buffers3 d% P# d+ T" ~. U/ X# F
    for (i = 0; i < upp_frame_size; i++)9 w; o0 I( k; ?0 U+ R4 k7 t
    {2 d0 |' [/ @  }3 F. P
       upp_buffer_b =i;
* ~# C" J) G$ T+ F1 J  z1 h7 A       upp_buffer_a = 0xDEAD;
! i% }; Y, j: z. ~    }
+ }2 x2 C2 Z: h$ w( ?
& `, N6 D. q5 Q% A    //for(i=0;i<1024;i++)
* p3 U" o1 S5 |1 u    //    temp=0;) ?! b8 I- g4 D; o. ]' \
5 o& [  ]- U- n1 C$ }8 A
    //UPPReset();2 e/ ], [; R1 E& j# e! V) q& G
    /*启动UPP DMA传输*/3 v. m7 k) w4 x' v  l: H7 ]
    UARTPuts("upp_prog_dma_i\n",-2);
- b: P! h  a( V/ ^: N" J    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& e4 C  s! S8 W: h* Y" l4 S' v, }    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# e; v* z# k! R5 i7 n! O% O( G7 Q$ H
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 p& y: d6 [/ P

9 A7 d6 Z: i6 l+ @+ c- a1 K    UARTPuts("upp_prog_dma_i\n",-2);
8 V# q. F0 T3 ?9 U( s    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! I' T* H; t8 z5 E8 {) A
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 Z; ~/ @( h; n1 N' {1 j. ~4 Z
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  p  B- x  \5 j7 r
% A* N1 r% D8 E8 {' U    /*等待UPP传输完毕*/6 @0 c( q& T/ j9 a+ Z& g5 l8 |: T
    //i=0;! [) p; _( @% {* u& a
    //j=0;$ i7 W( R0 I. _: E) `9 l
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. w0 ?' i" z' B$ ]& j! X    {3 o! K) \5 Q' n5 {( i
        /*  测试UPP传输的同时操作普通DDR数据8 _7 S+ Q4 ?. l9 ^5 ^7 `2 w6 x
        temp=i;  q3 [0 \& V. B% E
        i++;9 ^( |, y5 ]/ d3 }8 s2 m% B
        if(i==1024): ?% S! I9 _$ R; I1 v
        {4 H' k; R7 G: B5 ^/ [( g: [/ r/ E
            i=0;
) Z, w# x, Y6 o" M            j++;
$ M7 d8 u+ k# i7 g8 u5 S# B        }
/ H( N$ L( `  g" |. y        */
( r* F+ R$ r8 I# r' v* x* S" J& l8 t+ N  k/ @0 Z+ L
       asm(" nop");4 {2 v2 f% s5 o; Y+ K2 x8 y$ `- E
. I9 q5 Z: P" @  M
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 s8 M# z9 I8 i7 |8 a! W
    }
$ o' ]' p! `. I2 {
4 Q. M( U4 M, I9 |& _+ ~5 u    /*检查UPP传输的数据是否正确 (loopback modes only)*/" m* V$ Y& I0 }$ }+ q* b7 C& ~
    //UARTprintf( "i=%d\n",i);2 b( E' K( l3 S! |' F
    //UARTprintf( "j=%d\n",j);3 g, w4 A0 ~$ @7 [2 P2 ^- I( F9 g
    UARTPuts("Data mismatch in buffers.\n",-2);" A" n& {) T/ P- ]( ~( R
    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ v/ R0 ?; ?: b0 ^    {* ~$ J( E( x# C. }. A
        for (i = 0; i<upp_frame_size; i++)# Q( o( z% N. k0 u$ [1 E! @3 h+ a
        {6 a, Z; l- P( I7 |/ k
            if (upp_buffer_a != upp_buffer_b)0 @4 I: z. K3 M% a* O. U+ e
            {7 A6 H1 Q! ~4 t* b6 h" e, b
                upp_error_count++;4 q, ]3 m" f2 u; C/ y
            }; z' G. k# F" l* T, e8 s
        }
( f7 W! ]9 ~: C( Z: T) G) v    }' Y$ h' n1 |; l

% r: ]2 L6 B3 H, r. z" f6 Y3 E2 M    /* 报告通信结果*/
/ w# \* o  ]9 y( `$ J    if(upp_error_count != 0)# K( g: X4 d% e0 {* H
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 b" I0 J, W7 k: a- l6 y    else
! p" y$ X0 I& i: g+ j: c        UARTPuts("uPP transfers complete!\n",-2);: _8 f5 u+ l$ ^
2 c* W: g7 x0 F3 O9 T, h
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);, o7 l2 O4 _& E/ Z! z
    UARTGets(ch,2);
" y+ K/ x: L/ L- b" F6 A" `( A    UARTPuts("\n", -2);- v$ E5 m/ l5 H9 ^1 `
) U/ s8 [' }/ K2 ?0 C% ~+ I
    if(ch[0] == 'y')
% F; n) R, B3 ^) h8 k) y* Z    {2 w/ J) {1 h2 U, x. N
        /*打印全部读到的数据*/
; x' g( u$ }7 f% R        for(i=0; i<upp_frame_size; )
) C3 C9 x9 V0 h+ {) ?        {- m; _: \' b  d+ U
            for(j=0; j<5; j++)
: N" |- h8 P' C+ O7 I            {
% f8 R5 x: D6 _5 v8 U5 K* n                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 P& C/ b* A% d
                i++;
8 D: Z% V2 f( p/ V( z                //if(i >= 4096)6 R7 [. J' v9 C% X) t
                //    break;
+ ?' o* t3 D8 q3 t5 B( u1 M; X% A/ m& v; q  n* {3 n
            }
( g8 Z" a% a# l) w& ^' T            UARTPuts("\n",-2);0 G( y& f# i5 N( z
        }
# K1 D9 C% [+ v, J: f+ S    }1 T: k0 k4 P0 H( R4 O7 }

4 V# s( u- R- @( O% ], q}

* {6 r" m( M' D0 R% x9 T
2 [  \$ S$ h2 J7 X

5 t5 c  |' C! n* s
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。: g8 d5 A1 b8 R: j& R

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; d2 _% K* L3 p* c9 }





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