嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. @9 B; s  y& _  R. ]. f: u
Void UPP_TASK(Void)) r. d+ Y. Y6 r) U; |2 j
{
% D/ y% _/ ^& J$ T& i- W
# b6 `) T1 h# F6 ~7 c# f! h  X( n: d    int i,j,k,target_int_count=2;
. h) a2 Q  v$ S  [    char ch[2];3 ~# t. [1 e( a
0 N9 |! ?. n7 O
- U+ W9 ?# ^3 q0 g6 E

4 Z6 D* _1 ^+ j9 r6 |7 Q$ Q    upp_interrupt_count  = 0;5 {9 A; Q9 P' h+ b
    upp_error_count = 0;/ s3 Z) P  q8 p% l4 o# p* h; Y4 h
" i' Z/ {. g2 o
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( s: Z2 ?, c2 ?/ }    // Initialize data buffers
2 q7 j' H( H3 _' V    for (i = 0; i < upp_frame_size; i++)+ T% z1 p; o% |6 t, r
    {- b9 j  ]8 L1 c* |7 u5 t
       upp_buffer_b =i;! j9 W1 ~4 N" I0 b- W5 X1 [
       upp_buffer_a = 0xDEAD;
. N' p* \- `& m6 [. ~& A: D    }
. F: u# i- q2 P" A- B! r" H' `: U1 O0 O6 Z- I
    //for(i=0;i<1024;i++)
/ _/ Q  u; e* \2 D3 o; P' Y; Z+ u% ~    //    temp=0;
" h5 @6 b' E: Z/ ?$ ]2 S" ?  T+ p2 p" M& Z2 M1 s5 ^
    //UPPReset();
3 Q0 V9 V& z' S+ ~    /*启动UPP DMA传输*/
7 h* m2 U$ ?; U3 k4 ]    UARTPuts("upp_prog_dma_i\n",-2);; L- b  D& C: J
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 o7 ?" J* b" e2 O8 ~4 I    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, \/ r) N5 G6 v' ~- v    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 z2 e& S& c8 R/ A8 Q' V/ D
+ G7 D+ T; n6 x+ I; e    UARTPuts("upp_prog_dma_i\n",-2);  l/ `1 s8 R8 u; E( N1 w
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, w$ T; }6 W: v4 k  ^( D" m; K3 G. j4 S    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ u: \5 \2 }7 h    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 L- o! @/ Q( j8 d4 F. w. U2 |
3 l9 Z' p, W* \/ K( s1 h' O    /*等待UPP传输完毕*/+ K! Y0 F4 Z9 L
    //i=0;1 f: v2 _2 G$ B5 X" E9 i/ M; c
    //j=0;
' e7 l, P+ f  S( `# L" B    while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 {9 S6 L- R! g" `' O$ [1 \
    {
3 ^0 e7 j9 i( p* X8 Q2 _$ M        /*  测试UPP传输的同时操作普通DDR数据1 s4 q2 g/ L( _. T5 o; r
        temp=i;4 l* x. k+ `9 _6 {9 K
        i++;0 w  @( M# ?1 b
        if(i==1024)
, L8 k& C2 \# M2 F        {
/ O3 {6 }) ^9 Z. ^+ G            i=0;
6 m9 D3 j! Z: N) y, S% Z            j++;0 G, E- n4 u+ p. v2 n* X7 t
        }
) g6 J" V/ K0 ~" }" z1 j4 f) N! g        */2 V- v7 U8 ]: `' Y

1 R( b) u" w, b7 q9 m$ n# @& T       asm(" nop");
" y6 \% c+ G7 g# @+ q+ \0 L2 T- g  p
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% T6 u1 y, D& i7 O
    }
& P% S$ h7 D- J+ @* H& a, Z* ~) j6 g1 ]5 _: I" k& ~
    /*检查UPP传输的数据是否正确 (loopback modes only)*/, ]* ^/ [, D3 f0 e& R
    //UARTprintf( "i=%d\n",i);3 G0 A/ I: I; E
    //UARTprintf( "j=%d\n",j);
4 D- d5 d* W0 H+ o$ n, N    UARTPuts("Data mismatch in buffers.\n",-2);( M8 x) A4 |' e$ A
    if (upp_interrupt_count == 2 && upp_error_count == 0)9 H) u9 V# N& ?/ w! v( f
    {4 F/ S/ v* p  t
        for (i = 0; i<upp_frame_size; i++)4 o) V# s3 j+ f: _# S
        {
1 K* ?, v0 }3 `+ q# V" |# N. ]' M            if (upp_buffer_a != upp_buffer_b)# Z7 x/ w; l/ c# A2 D. d
            {
& ~' ]' Y$ p' C. B* A                upp_error_count++;" T! D' P! d. s. ^7 x
            }
% F/ U. t% N' Z1 B+ x# p8 A3 d        }
9 p1 _; k+ S6 ?0 B    }* F' Z3 n, p5 U

) g  i( z8 L( D9 C/ |& X; s    /* 报告通信结果*/; I' ^: h  S( b& y7 W2 ~9 ^/ {) O
    if(upp_error_count != 0). d5 F4 ?& g8 x+ P% {+ Q3 m& ~7 z
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 ]- V" [) P: q  u( y3 r" S    else
" U% ~; A: f# W. P! C3 c& t1 x        UARTPuts("uPP transfers complete!\n",-2);
: W4 o+ g* g6 a" g0 ?
2 F% N7 {$ i4 [; L, e5 n7 n2 u, V    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  r  t8 |! N, k$ p8 m& @
    UARTGets(ch,2);  A9 `8 c* y5 E3 q  o& H' `
    UARTPuts("\n", -2);
% [: ]( c( ]! ~! L$ l0 }( p: w) f% w+ i3 M0 H2 ^" \
    if(ch[0] == 'y')
9 U" P- c( P& z9 G    {
% C9 Y% {( A( m. G4 O        /*打印全部读到的数据*/
$ c7 P# c1 o$ B; h        for(i=0; i<upp_frame_size; )
' P9 [3 F- d* U: @4 y        {
, c) Q3 f( O& [7 Q2 b: `            for(j=0; j<5; j++)
- n" v: j/ p9 I+ l; v: Q. C            {
# s" L! s- k: g. O7 k                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* N( U5 _: V3 ~4 a0 y' c5 s- ^& W
                i++;4 k  Z3 f, D' j; E" x( ?4 k* S+ L
                //if(i >= 4096)
" Q8 {2 c! k; B; L                //    break;$ Q& Y2 V9 p) `2 u7 o( ?6 U

) @. @, e3 s: ?( @* y            }% x6 d$ Q; a9 r( x! D+ ~
            UARTPuts("\n",-2);
4 p$ }! H) v- B- ?% E0 r: w        }
( m( h# i! ?* U5 Y+ I  r8 ~' X    }
' U) B  s4 S6 {& b$ A, w- \; E+ r# q2 g' }. ]
}

( A1 L. q- u, c1 I: {$ F
6 F3 Q& u% |- Y2 w: _. m
  E& }5 D, p3 G8 |* B  z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; S5 q4 ~0 b2 T$ q1 s' i/ n' B5 B
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; r. k0 ?3 s4 S9 W





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