嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- r; l, b+ Z7 Q% m$ q
Void UPP_TASK(Void)
6 b6 t( i8 g4 [, l* q* }9 r! K{
1 z6 i6 x) _2 q% }7 L0 D! v3 ^5 S6 E3 K6 M
    int i,j,k,target_int_count=2;
' s4 Q1 b) g* h3 r, x% O- s6 h4 h    char ch[2];
! H* e4 I6 K' N1 h  F; R$ R2 b+ t" A  I/ f/ |6 I5 J  L

; J# K) b. P+ P- X( B( r% J) w$ p+ `
    upp_interrupt_count  = 0;
% J8 G" U4 a, F! V    upp_error_count = 0;
+ V$ _6 Y1 R0 E0 D" ^- x
7 q8 \8 Y. E/ i    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( a/ z+ ?+ V6 U( S    // Initialize data buffers
: W% R' b% P" `, w    for (i = 0; i < upp_frame_size; i++)
* o# ^' L1 L5 o8 a, R. s& _) A    {; J0 V1 n6 K% K1 {* W% V% ^8 e
       upp_buffer_b =i;" H/ w8 H4 H0 i; D' [1 a  w
       upp_buffer_a = 0xDEAD;! N3 Y: c: X1 Z# T
    }
6 w  T" I4 K. `" N* D. _- o( H
# H. h! t  s6 b6 Z    //for(i=0;i<1024;i++)
( q$ j7 {0 \. b: s; c. v6 q' i8 t    //    temp=0;, y7 w  P' y# _; B
: ~9 @  c, N( v" Z. _9 M5 d
    //UPPReset();! \4 O) ]" |/ I* ]2 v4 n; b
    /*启动UPP DMA传输*/2 t! }0 Y5 j' }4 B6 F
    UARTPuts("upp_prog_dma_i\n",-2);
. I$ K4 @6 l( N* P& @    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 V! p7 u( H' c$ Y* X- E    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 J; {5 L: ~3 A" H    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' Y5 Y) C+ T2 B

9 G" l0 n& D7 p1 ~    UARTPuts("upp_prog_dma_i\n",-2);
* H/ `9 B3 i& l1 x: C    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% m; y' Z) U6 b6 i" _3 R
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ z% \4 d* z+ F3 D! L- p6 i4 E    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! J" E" p+ w5 K- V+ y# Q% D) K8 V6 o# T- }' d0 ?
    /*等待UPP传输完毕*/# y, P5 _/ s# y$ c2 M" B* M# g0 f5 n# Z
    //i=0;7 T$ ~( Z. |  ?# G. O  w
    //j=0;
3 r( ?9 ]/ w9 N: }& |. y    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ E& m5 ?. [$ E
    {
. O7 s8 O( b7 P        /*  测试UPP传输的同时操作普通DDR数据
) Y4 m" Q3 T6 g1 V) B8 R$ y5 A        temp=i;# x9 C( U' r7 v2 Z0 `/ o+ k
        i++;9 g: n/ }3 X( Q+ Y
        if(i==1024)! @. B3 d1 V- b" Y- \2 [, L7 U( R
        {
7 [' V% ^1 ~  X# @  C4 N1 R            i=0;7 Q% |+ |) E9 V0 L6 P1 v$ k
            j++;
) M5 c% ~. ]) P$ m  i+ }- ^        }8 {) z( Z  `9 @! B, x  V
        */1 C, s% B" i% V4 B/ n- E, W) U4 \9 X

6 x4 e# t* I$ E' U$ O       asm(" nop");% O7 b$ P' }* k1 @; c

( O0 g+ L2 k: X       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) ^, b# t8 W. K& f+ H9 e    }
1 c7 I: M  k  y8 N4 L+ {4 f( q0 p8 k( j: \# s$ w1 g
    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 \, X7 d- U: J* V; q) z
    //UARTprintf( "i=%d\n",i);
0 \2 m; l  d' E- i    //UARTprintf( "j=%d\n",j);
  ?2 u' r7 d$ H% H. \    UARTPuts("Data mismatch in buffers.\n",-2);
: `9 Y+ _. T1 G9 T    if (upp_interrupt_count == 2 && upp_error_count == 0)  t5 B" o* H9 N4 q# {9 Q" h5 ?0 g
    {- v9 \7 j3 M: C' w& J. J
        for (i = 0; i<upp_frame_size; i++)
2 I1 G, g/ m& r$ h3 U$ J        {( V. q0 K' i! _8 C
            if (upp_buffer_a != upp_buffer_b)
3 b" t/ J- ]( Y5 Q            {# j6 k0 H$ ~6 y
                upp_error_count++;
& y( |- f& I; Y" D$ B            }- a6 q& s" g$ }7 `2 k' C
        }
3 v9 C" J- R7 \1 X: d& m' y4 B    }
$ A$ W3 w0 `9 N3 o* m2 e2 |( @: u5 ~
    /* 报告通信结果*/
% D$ X( Z) s8 z. |) v; Y9 U0 i# F    if(upp_error_count != 0)
( p) q% y5 `: O; i  X( k        UARTprintf( "upp_error_count=%d\n",upp_error_count);
- a  Y9 a* g3 w1 n! i7 Q. _    else
& t4 q+ _0 F9 y+ W# ~' l2 A        UARTPuts("uPP transfers complete!\n",-2);7 B/ Q# L2 L2 y! o+ b+ `+ X! B

$ ?* f5 l3 f: m3 O3 c( c7 q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) [7 |# `/ G% T
    UARTGets(ch,2);- m' z; k) B; w2 E' B& }5 {4 Q
    UARTPuts("\n", -2);3 O6 |: j$ z; w8 b- `! P3 [# `$ V
* O8 ~0 G' _0 Y2 j
    if(ch[0] == 'y')
8 ^7 M( w6 j+ d; [4 z9 ]! q: h$ e    {
7 F- @; ^" P9 `9 L5 y        /*打印全部读到的数据*/1 W" I. x/ {8 `* E
        for(i=0; i<upp_frame_size; )
2 G- @. @2 m3 h0 C0 I* \3 p9 g        {
" G4 R' B( A' \( ]8 e5 t: _            for(j=0; j<5; j++)
. X6 W$ D( Q; w/ k            {4 e/ U1 r/ g# S7 O% {3 W) c7 y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* e& i6 i. F# D0 Q7 M1 A
                i++;2 P7 Z; D- z% ~2 `5 J% T, ]$ h
                //if(i >= 4096)3 a: }( O+ \4 r( z  ?3 t6 f1 l
                //    break;1 i( R4 n: R2 |2 }. R
% A. d) q! }* `$ y
            }
* w9 G: U! l/ ]/ Q            UARTPuts("\n",-2);! |0 H$ l$ ~' ?) w& Y( S
        }6 z. T/ G. U* y
    }
+ |9 N; j6 a7 O9 C0 `/ z( F/ `; O" s2 `5 q. Z
}
& `' E) S! L* `* Z
% @" G( E5 B; {1 J) i1 W
8 m5 ^  ]4 y$ U" p' d, h

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ t, f& F" P; V* |% f3 @
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 T% @2 a. Y6 T* u) g, }




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