嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! m" \. S  i- J: ^2 Z/ Y9 e
Void UPP_TASK(Void): F+ L7 C0 I5 f. \& a' `0 d) d% j
{$ m. y) ]( g8 C& i' D# {: C

  c/ f* c2 E2 J$ p    int i,j,k,target_int_count=2;
" m! M9 _+ |5 U& Z( b    char ch[2];
  |' e) `; [  m: H+ I  g. A
0 l! T( ?$ t6 w& F$ B4 P6 J' x8 w9 c  S1 }& ]* K) ]
7 P) A1 O" a' f
    upp_interrupt_count  = 0;
8 l* b3 f5 t! J6 Z    upp_error_count = 0;5 d) i) S! x# m9 L+ J- Y  _3 ]& [

4 ^( ~& i0 L$ A* o    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 k3 R/ a. b  I4 u( b* k    // Initialize data buffers$ H/ f. l) _& s( q' A9 Z' f  n
    for (i = 0; i < upp_frame_size; i++)
9 v: _! i2 F3 a7 k, ?    {
( W3 N7 F2 p0 E( u5 E0 |       upp_buffer_b =i;
0 A( Z4 d. q" L9 Y# n9 Z3 c       upp_buffer_a = 0xDEAD;1 w3 M) K* x6 L  u
    }
* o6 x( w9 `& b3 I8 s) {% V( f1 z4 G6 r( m8 }9 d# I8 o
    //for(i=0;i<1024;i++)
  R" y) U6 n0 l8 l2 H6 l    //    temp=0;2 M, l- b- z6 M
- u" |# F/ ~6 s3 J( X) s: q% N
    //UPPReset();4 Z3 ]/ e5 t. C' @- {% W) q
    /*启动UPP DMA传输*/: P  G, q$ d# \! r6 B" u; n% t
    UARTPuts("upp_prog_dma_i\n",-2);1 t9 O4 d6 |+ u+ ], x! _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ V4 t$ A) h" Z) @$ R( R+ q1 O. o    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' o! U6 F- |3 T' I- e    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% I: ^  f' t* y1 B+ I

) D( |/ R' y- D3 Q8 y+ u' l    UARTPuts("upp_prog_dma_i\n",-2);2 F% N( K' u1 z( Q4 u0 a
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" m. r+ q$ v7 h! W( X( e  M    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 i6 S( K0 |$ _' x9 f5 r; x    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* R1 Y* r6 n( m% B% L# t8 h. A7 \
/ Q4 `& g* |( c9 ~4 ~9 e    /*等待UPP传输完毕*/
" l3 c7 J+ v9 d% y    //i=0;
1 |& R, ~: _; W* w( c    //j=0;
! w/ U. R( }0 J4 k' G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 h* o; Z! q: }- r" m
    {% p: g/ ?6 }9 r3 J5 m. n
        /*  测试UPP传输的同时操作普通DDR数据
8 v( O, x( h# C/ c        temp=i;
2 B! W3 J, H4 q/ m        i++;, m, J7 v. N; F# I* i7 A3 u# O
        if(i==1024)  V# h3 O$ V- N2 }
        {# L$ s3 c/ i- y+ \
            i=0;9 @' r/ N+ s( u3 `- ]2 V- D
            j++;
& f$ ?/ J) N0 J; N. L        }7 C3 J+ {. A2 U* y* w. C' z
        */; i: {. k3 Z" N7 S% F) E8 F$ a

0 D# K) y  F5 m% C" O; I       asm(" nop");0 I1 `5 p5 }$ F4 Q' G% @) J

9 e5 w; H& \# X+ p" [& E5 e       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" d' B; V/ y  k  `6 y, P    }
: w7 L* x" X" U( {! X
' i/ w  o: r4 z    /*检查UPP传输的数据是否正确 (loopback modes only)*/4 Y  W! V, q7 W2 G# f3 L9 _
    //UARTprintf( "i=%d\n",i);
" ?6 y% v3 |% K& @* U; |, d8 Z    //UARTprintf( "j=%d\n",j);
) m8 T3 E' Q  @, {2 h) J6 |    UARTPuts("Data mismatch in buffers.\n",-2);, q0 d5 T8 d4 [9 h
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 \  I: E, }' Y3 k  |! N$ j    {+ u3 Q1 m( x( i+ O: W5 w4 r
        for (i = 0; i<upp_frame_size; i++)' |% @& S, o" i) y
        {: ^% E+ t, c& q1 L$ m' S1 u$ h
            if (upp_buffer_a != upp_buffer_b)$ C0 ?: h1 W8 H! @$ M
            {
6 b) C0 A& _- p, s* e                upp_error_count++;
- n) E7 d3 F" \* e0 F! W" P" D5 U4 M            }
  _; `7 s$ m! _: V$ f        }
1 s# l  Y1 i$ Z0 R  x    }$ F. o" Z$ @& h. O
/ ]) z# _5 Q! E  V" m  _; d) E" F1 D, y
    /* 报告通信结果*/
9 T4 u# A- Z4 J9 T    if(upp_error_count != 0)% d8 @; F# Z' l5 d
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% D& f% r$ h+ P0 l    else! t* X4 j- k* a2 q7 }4 R: ^/ R
        UARTPuts("uPP transfers complete!\n",-2);- G, O; [- S: r" q% r

% V" @3 B9 ~/ T" g    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ k1 [( s- ~+ B5 A+ w    UARTGets(ch,2);1 l6 i! r- W+ f1 Y% l( E
    UARTPuts("\n", -2);% T% ]# Q, A5 c1 j% S
; j( Q* y: \0 w/ H7 g9 D
    if(ch[0] == 'y')
) b- r/ N1 b3 U. O$ r( y3 T4 k    {5 F/ t# y3 M& k
        /*打印全部读到的数据*/
* Q0 I- x. N% j* d2 D% g8 m        for(i=0; i<upp_frame_size; )
9 \$ K& O  F5 \        {2 a0 s+ K" e4 A2 K
            for(j=0; j<5; j++)
  R  u* f8 m' t  G- m            {* y5 x& W2 Y; p! o
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) X/ n* j8 B3 X, W$ }
                i++;
4 v3 T# f' b0 D* _1 a                //if(i >= 4096)
4 {5 X3 @% ]3 O4 f( [                //    break;
6 l: ]' x: d6 {$ E( U8 V) l- \* {: X8 g' y7 v8 D' X4 Q
            }% Y3 N6 ?$ O, z& g
            UARTPuts("\n",-2);
/ z5 X0 L3 U0 P* L% X; Y, B9 Z        }6 Z. }! F. w2 z- S
    }# R! q( i1 q* e& ~, I
0 a; l' |+ n/ I; }- j3 H7 Y
}

3 O% I' }& {) [( M' a% c) `
6 X, Q* v& l' v4 A8 r; }
9 P9 ^3 M/ ^" y/ y0 N  E

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 ^4 J9 ?5 W( e- `# i* ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* |- e5 ?' ^9 q- C) ]  S; U' D! Y





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