嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ Q3 f  ^  B" `: @; [
Void UPP_TASK(Void)
) q, ]0 M  l6 k7 p# ~{5 D$ B7 o# w) L" f, S
1 }2 v$ o9 k* @+ t- P* Z9 `& ~
    int i,j,k,target_int_count=2;" H7 _: Q5 a: A  p- I
    char ch[2];- N) M3 ~" F+ N- {& `3 L

8 t+ V; M: N; H; u- p# ?, ]! y& j, E  o) a: z2 w
! C2 K% j2 Y# z) x6 N. l# k
    upp_interrupt_count  = 0;
( T4 q# a8 g( ^% b4 B% V6 @4 `    upp_error_count = 0;
3 V# K+ a+ X+ C9 ]" k! t1 Q3 ]0 ^4 ]& z( |( Q6 ]& l
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, ?( b. J) c/ d$ N4 E* `( @
    // Initialize data buffers
* F" m: K; D) q    for (i = 0; i < upp_frame_size; i++)) _) ~0 Y$ B& l7 l1 K2 I, \- @* s
    {" e+ H( B% D" h. W$ f
       upp_buffer_b =i;
* C1 ^+ n7 u5 }       upp_buffer_a = 0xDEAD;5 J' C" m: [/ Z1 h$ {
    }" }; @0 f! O' P  a$ q$ r

! N) n/ c" n1 F( y    //for(i=0;i<1024;i++)
1 g2 x* d7 z3 ]) _+ R+ G    //    temp=0;1 g# ?' Y$ V6 V
' J* K" E# E. g/ o, M+ M! N
    //UPPReset();
, F. b5 z$ m8 V1 V2 C    /*启动UPP DMA传输*/
0 U% [5 T7 ]" j( j6 Y9 G. u% p8 y6 j    UARTPuts("upp_prog_dma_i\n",-2);
: O. L2 }: \* l# t& F    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: M3 R" |( {/ x) W8 m' L: i: {
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! B' m! f1 ^+ F% j. {6 u. J
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, P6 N" e9 F3 K% k0 P' {. T4 V+ T7 ~
. m9 F/ U4 O, [# I" I1 Z    UARTPuts("upp_prog_dma_i\n",-2);" h1 W  m8 s5 C: [; t
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 w& S5 v" o3 X0 L9 u
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 Q, u, Z) v# _7 G) D3 A/ p
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);& O3 y, T. B2 s8 x( j

" H0 q2 S: }+ e- V+ G    /*等待UPP传输完毕*/# `2 s. ]) X3 l  d% E6 N
    //i=0;3 |. Z" T% B$ {$ C- S
    //j=0;
& l/ e8 m( k; D% D: m    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 `$ B- k, C1 q  v* S    {4 q, ^! F6 w3 c$ B4 N& z7 P
        /*  测试UPP传输的同时操作普通DDR数据* e  j% x- s# ~- J
        temp=i;
8 M9 _! r  e* w3 q& i& m        i++;
3 ?9 j' \( U- ^2 c' e, L# d4 P- `1 z        if(i==1024)2 O9 h9 ^, B7 M, L9 c  E
        {6 M1 K4 o  J  }
            i=0;/ r8 N: |0 ^: r: M9 b. N: ]3 i
            j++;  V4 s5 D; j  Q. E. Q" e2 F/ M: f" r
        }0 \0 e7 J' Y4 B: I* @: w
        */
% @' E7 k3 N2 T5 H% I& M; G( I
# ~! w; V# F) \  t! y! G1 m       asm(" nop");1 Z  E8 w; s+ l1 U

4 D8 D3 G( C, }5 v8 E  p9 B4 Z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  k! j: n5 d. d8 F    }
+ |' y6 `! O# l+ N
4 u  j+ |! z# U4 C6 E; B    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  ~! m4 B' h- Y7 R    //UARTprintf( "i=%d\n",i);. h9 K- S& D/ `% Y8 H3 i
    //UARTprintf( "j=%d\n",j);; q0 {1 r0 p& [9 h3 Q2 y* @  R
    UARTPuts("Data mismatch in buffers.\n",-2);) ]& [7 j: P6 C3 ?0 L! ~
    if (upp_interrupt_count == 2 && upp_error_count == 0)- b0 V% z5 _- J  n4 I/ J- }) \6 B3 N
    {6 R' T9 B5 f4 `0 j
        for (i = 0; i<upp_frame_size; i++)( i0 A/ O- ]; H. u2 i( g
        {
* Y, L1 X; V* s' h# x+ A( P: B            if (upp_buffer_a != upp_buffer_b)4 X! k9 W0 S  J
            {
  r0 p# V" p1 N5 x) F# o2 Y- v                upp_error_count++;
/ F7 |7 V" {: x            }1 {" _& y8 e& ?
        }
7 Y6 c2 k8 p: d: C6 G2 a    }; M* Z& B0 k- y

7 p& S3 b0 Z# w6 n  n: ]/ p1 }4 J    /* 报告通信结果*/0 C: q/ c/ G& i8 z5 U
    if(upp_error_count != 0)
, B* T* F  ?6 [" m7 N# R0 L5 h        UARTprintf( "upp_error_count=%d\n",upp_error_count);" B( f; S. f& ^5 E4 J
    else
8 P& j% q* X& {# G0 f: X        UARTPuts("uPP transfers complete!\n",-2);
6 d- a- m% R: S2 C- q9 D3 R3 j4 G  j& k% [" d7 `( A6 K
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ w  G$ L9 v8 y3 _    UARTGets(ch,2);
! U* p5 x3 x* d) m  q2 s4 e    UARTPuts("\n", -2);
& L# x/ o2 y/ b$ o! Y
* E% T6 a1 y8 t( w0 A$ S' u    if(ch[0] == 'y'). A% l" _- m4 Z5 c& w7 p6 W' p$ a
    {3 K3 b1 }/ J- l4 f. z( J
        /*打印全部读到的数据*/
. i6 z# a  {: U. F# ?, X. j        for(i=0; i<upp_frame_size; )
7 y" n- I( L6 U+ L; |8 a( I6 _# n: P: s        {
4 v$ O, a1 I! f9 p            for(j=0; j<5; j++)
5 p( e( \' B2 s# _( R            {+ [3 {. u) i2 }6 I" j. L( R2 [8 j
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
6 c9 k9 P# K6 B* i; M                i++;
- W6 p/ @8 D* G# X% N* M* S3 g2 O                //if(i >= 4096)
* ^7 ?+ \. s- ^% T4 E( c& z                //    break;
, E; {4 \4 Z  K) g+ E0 Q0 c0 Y$ X( Z: K2 m
            }
; {* o, [1 D- X/ t            UARTPuts("\n",-2);" b6 z$ }. r5 @- s& T
        }7 B3 P5 P6 v5 Y' E2 K: N. y
    }3 V7 u+ ]( D$ z" }

' g7 u$ G; a2 ~3 ^- k! _( L9 A}

3 F3 {: v/ g7 n
$ _) D" \* L+ o+ v, {$ G
8 {$ K- N& D$ i# t# P- B

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* U8 `7 i: H- f* p6 e+ R. A

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ A2 x6 K" j' Q





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