嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) Q$ n, {* T6 c5 K: F% F7 f
Void UPP_TASK(Void)
. k. l% |" {3 q7 I{  p& w5 b' |1 x8 g- C

( y9 d* u# J8 c( a6 }% F    int i,j,k,target_int_count=2;6 G7 I' z$ Y+ a. k
    char ch[2];4 ~1 M# k2 h, V( \; n

7 [. d# g. K$ \# _8 [% Q: m8 P* G" s$ R1 \# ?1 B

& K4 J# e' |. |+ L/ ~! Z  j    upp_interrupt_count  = 0;
9 @1 b/ b% y0 {: l2 i    upp_error_count = 0;. {! U! q) q  U* ^0 o- n( s
, X" Y* n% C  d
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
! Y" C2 Z/ t7 b% [6 Y, R+ p  U2 d    // Initialize data buffers1 t6 b) B  l% h* y3 `
    for (i = 0; i < upp_frame_size; i++)( D, n+ G6 v0 q9 e: k3 _% ^4 ]
    {: |$ z. ^7 F- n
       upp_buffer_b =i;5 F3 L; z2 u/ \4 N  m  _# {
       upp_buffer_a = 0xDEAD;
7 V0 [1 w2 O/ s" R; {  S8 S    }0 J3 Z/ f8 \, P: p
. }! I! o* O7 {8 Y- e9 L
    //for(i=0;i<1024;i++)
* N1 D' O! k. Z6 o0 g# E    //    temp=0;; z3 D4 p- S6 J# l' X
: }; B! u6 s6 Z; g& o9 o% f
    //UPPReset();
) \, w! \1 F$ ^    /*启动UPP DMA传输*/
- c8 o) l' z" W* z8 d* s; `; ?0 _    UARTPuts("upp_prog_dma_i\n",-2);
' @7 H% @! ^/ c! R4 }* S    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. M  \5 G, {5 V. y    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 x! @9 T! ~2 ^8 ]
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 ~9 s  y# g" X9 l$ ?
0 u# O4 ?/ @6 ^3 F4 c2 v  @$ C
    UARTPuts("upp_prog_dma_i\n",-2);2 i/ E" u  ]# f  x( G% E
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# ~1 i; y9 n: C8 T$ x& q$ i0 M    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% B5 e/ d/ a7 S% o4 O4 b- J1 y+ U8 p    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( u9 M0 ^1 v. a- I/ ]
& Q9 n& [$ u/ z7 m& C% @; d6 w    /*等待UPP传输完毕*/
* c; P0 R- i) j    //i=0;/ j3 k* g) p4 @1 ~, z! A) ~
    //j=0;
# W4 |9 o  b& t" f    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 L. N: m3 J8 @6 R* D- L    {
/ `2 ~* c3 w! D  u, J$ Y        /*  测试UPP传输的同时操作普通DDR数据7 u. K' }" y( e- D
        temp=i;) X% g: {: n0 D
        i++;
- k4 X4 w7 H0 J* {+ C        if(i==1024)
! t# t& T. q1 j) H# G3 v& N        {7 c, K3 h! Z; ^; d. F
            i=0;* B) p2 F8 J( G7 ?9 U
            j++;
0 q$ D' ~4 e( f' g* @" `0 E        }
. B, ]  E) t$ i% `# d        */: p/ I/ e- A$ O4 j

1 b1 A2 \3 p3 i" Y) n3 G       asm(" nop");
- n' O+ n7 y' ~9 W
+ O3 A! S& j+ d6 [' u       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 g" I# I9 E0 e5 e6 j4 S: J    }
- i. ]4 b0 E! E; T, l" I- U, W* q+ b  a3 r! W( J2 K1 B1 Q- y
    /*检查UPP传输的数据是否正确 (loopback modes only)*/% o) x! {" u5 \; P
    //UARTprintf( "i=%d\n",i);
- d# k: K$ A( r" x2 r8 g  r( ~    //UARTprintf( "j=%d\n",j);% H4 T) B( n9 J
    UARTPuts("Data mismatch in buffers.\n",-2);
$ s) J' K6 N1 Q8 d' j    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 u& `) P! P8 t9 [+ x* W" R    {
4 ]' x/ e! e9 b3 t$ J$ T3 |        for (i = 0; i<upp_frame_size; i++)/ s$ |1 |+ J: z+ R
        {7 ~4 H( |, Y  x) n' ~
            if (upp_buffer_a != upp_buffer_b)1 s9 B* @5 n- q
            {
$ \3 t5 P  F+ A                upp_error_count++;3 k# |, h1 s, j) d
            }
" \$ L. s) Y% O3 T" S1 z4 n        }
3 \" J* r; G& _" _5 y    }
2 H- n6 E' u$ z+ |# L7 l) \" z# Q: B' B- P, o3 N5 x
    /* 报告通信结果*/
  T- G; |- W( z" |  N    if(upp_error_count != 0)
" \4 b, P% n+ M) u" ~# [6 E        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 U& Y6 o. _# D3 M! C9 |1 W    else! z& ^* R( c( H5 I
        UARTPuts("uPP transfers complete!\n",-2);" s3 n( X# j1 N; s9 h! |; I

2 a. C4 ?6 ~/ I4 K; `$ X8 m6 X( T    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) N- \9 O# O0 l1 t9 u* Q
    UARTGets(ch,2);  j% k4 a; F0 g) \
    UARTPuts("\n", -2);% g+ D6 P: a' P! N% d3 P0 o

5 c7 }& x7 y$ R& L    if(ch[0] == 'y')  ]. ~! L( V& s4 [- M" n
    {1 X! O( H) z5 ]- ]6 |4 A
        /*打印全部读到的数据*/
, V& k, e' A  ~6 ]2 c) A        for(i=0; i<upp_frame_size; )( ^% j, S6 \3 b
        {
* i/ G; e) w: z            for(j=0; j<5; j++)
" Q6 R+ h  ]+ A+ B& i            {
) k6 H) l8 P- @' g. K$ P8 B                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! [, k/ D' b1 C
                i++;3 o$ ]: z7 V3 A4 u4 q
                //if(i >= 4096)
; u1 D9 Z* n: B/ X8 I8 f# h                //    break;' W: s2 |" a4 [$ C- l: k- K

; Z  t# ?( C) v) k. T8 G; ^, H            }: m/ u: c0 m# t. Z/ b/ E
            UARTPuts("\n",-2);
! i( k- r8 g9 Y6 x6 S        }1 r0 Z/ g# ?- s8 I
    }
: ^6 V& m: m0 k+ q1 j9 w* a
4 `' V6 O. Y( ]4 X  v}

8 Z  s; M& s& l3 a9 X
# Z# t7 V  w( c

2 D: g) e/ J- G: V0 L- u
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 x- {& y$ V8 g; `

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) L) `0 z0 I2 M$ q2 M; U1 V' c





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