嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! `9 n: n: \2 g( O( f& J
Void UPP_TASK(Void)
: N& J# v5 M* @& P' x* N{
4 R9 h9 ~, R7 x8 R0 X' m4 [" H! M% w  S* u# B
    int i,j,k,target_int_count=2;/ l( S+ X7 k! ?, g0 d7 O; }
    char ch[2];3 a& ~1 D+ s3 @! w7 X. f
% V4 S$ R& Y* l
9 d3 i4 z" M0 y7 n
6 }$ H" m2 t! ?5 q& U
    upp_interrupt_count  = 0;
( h* ]  M0 a) R; @0 e1 q# J% G    upp_error_count = 0;7 l6 `: W) ?+ |
! C/ @- V# q9 h2 `" Z2 \
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( o& }! \5 t- I: M+ e( k3 Q    // Initialize data buffers4 g* w2 s+ v9 X8 n1 g& ]1 z1 B
    for (i = 0; i < upp_frame_size; i++)
; R3 A, C3 x4 {+ ~' D    {
3 c4 s9 H+ V2 c/ X       upp_buffer_b =i;
' d, |: G; i9 x       upp_buffer_a = 0xDEAD;
9 c3 Y8 K, ]( T" O) E    }7 K$ O  |( L( b1 A( x, ~/ U; e5 H
- S9 F* r5 _% \, _0 I0 V
    //for(i=0;i<1024;i++)
: H9 m  t  k$ e    //    temp=0;
) M9 M$ d! v8 ^& A; J* X$ j
! ^" T- P$ M- B% q" F$ U$ A% ^    //UPPReset();
; U6 B# {  O3 a4 _0 t    /*启动UPP DMA传输*/7 Z) a3 E! u( |
    UARTPuts("upp_prog_dma_i\n",-2);
7 c5 L) R% n% s" s' v, b/ }    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. w3 L4 J, K: N
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- I; Y" }, ?9 j8 m% `7 `, Q5 l
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 j  t4 G) g) i' ]: b$ Z0 Y

8 {6 t+ b( B9 T! W& `5 M    UARTPuts("upp_prog_dma_i\n",-2);& ^. K2 a9 H2 f( v
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, |( I. ?* y- l0 n" c    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 C' m( m4 O, q* @6 |! P
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 c* _6 `  C" R

" N+ w# D! c7 c  ~    /*等待UPP传输完毕*/. M  o, a6 P/ o% G
    //i=0;
. y% `" Q2 j0 @6 S& u    //j=0;- a$ \# p8 q2 W& A6 q0 p
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. m2 a( s3 O/ K. r  M. s4 }    {
2 q6 m- F" b  p7 F        /*  测试UPP传输的同时操作普通DDR数据
  Q0 o2 V) j/ p        temp=i;% V8 [) e" E$ B- z) M' z! S4 a; g0 n
        i++;
% ?% B8 J% P) a- V, Q; Z+ @        if(i==1024)
+ V, a5 T. ?/ l- E0 K& Y        {
; w- Q; A/ I5 Q8 K8 V8 X            i=0;
5 B8 \+ V2 g  f. e( s            j++;+ }: ~& q, B) Z" A  e
        }; R' X$ F2 Q' J; R8 L
        */
( z5 v# S+ g  E4 x. U, d4 w; c& L1 d
       asm(" nop");# W# x: V) Y  h' N# e
1 o" j) f& y) p9 {
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 A# O: W- J( j4 L9 l2 K' L$ d% ^
    }
- Q* t. Y3 Z8 [* P6 y* j* J+ M' b4 b7 P( ^. K
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  k3 R3 S( T' O" o; x    //UARTprintf( "i=%d\n",i);
. r' j/ s+ j+ K, u, r3 q1 d    //UARTprintf( "j=%d\n",j);# S6 r( `  K# w2 u2 d2 G4 u3 n
    UARTPuts("Data mismatch in buffers.\n",-2);6 k5 m# M: B* t# T- I
    if (upp_interrupt_count == 2 && upp_error_count == 0)6 D6 m) s: u. B1 {# [9 m$ w# m. G1 r
    {
$ C$ e# N' r/ Z- e8 [1 n        for (i = 0; i<upp_frame_size; i++)
# a3 G( o" V3 U        {: Z* \5 s7 M& ~6 g7 Z0 x+ z
            if (upp_buffer_a != upp_buffer_b)
) ^0 M* M; d. d/ J0 L; g& y            {
" j; N4 Z* v- L1 f4 g) I                upp_error_count++;
; B6 E* _! O$ D2 C            }
  K& ~: `! d/ E        }/ B' r8 l& q1 `! e( C& f) I# Z
    }
2 |8 |/ ]4 J& F0 l- u/ ^$ M* D) B. g$ |
    /* 报告通信结果*/7 H6 H2 M3 y0 Z
    if(upp_error_count != 0)  \6 v1 R8 r& w' y
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 }, U- n$ q6 r
    else
7 j" k0 T' ]$ R6 b( d3 i        UARTPuts("uPP transfers complete!\n",-2);$ U% s7 M7 e% L' q' I! T
2 w% E+ e9 E8 o6 O
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 I4 B. ^' a* ^+ D1 a# V" m  _
    UARTGets(ch,2);
* w  H: q$ I; ]# z    UARTPuts("\n", -2);
6 N3 W) t2 Q- {! _
+ d# T: X+ b) i1 N    if(ch[0] == 'y')- ?/ k$ N# U+ ^* S# b
    {
" K; Y9 Q& f# Y  H8 L3 `$ O        /*打印全部读到的数据*/% D- r5 _! B' n1 g
        for(i=0; i<upp_frame_size; )
! r/ g5 F+ E  K) |/ q        {5 J9 W8 I7 L6 Z3 v: O3 U
            for(j=0; j<5; j++)
( K% a# v) r; }* o            {
$ Q4 M: Z' o# x' I5 h  V& p                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);; ?! Q* s) _7 _7 ^/ R- c, o
                i++;- Y+ ^1 ?# m! |
                //if(i >= 4096)9 r8 L( F) p- |. k/ y& c
                //    break;
; }$ ?1 V, w' c3 _% P  _; ^+ y2 d9 F
            }
8 q$ s! M: P: O( B0 q- v            UARTPuts("\n",-2);
  r0 s* q# w* g( o8 Q        }; L, _0 L7 w1 I+ b; i. g1 K- X
    }% J& @0 e, V" x1 B' K  X8 L; T

! ?& Q" V" e5 [}

7 K& R' W7 h) _4 Z* |+ X
6 Y5 b& H* o( M, z2 T9 `
9 {3 y+ g2 _8 z, J% s6 h

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% S3 O3 w0 G' K5 X' c% D* ~$ W
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  X7 c) _  K1 A  A% |7 ?1 H! {




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