嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 T, V" M: D& u7 Y* x+ }
Void UPP_TASK(Void)8 ~1 A+ R! d0 Q  U/ D7 ]0 I/ J
{
2 q+ W8 U* E3 H4 _7 U7 W
( t/ a7 V. S& R8 a" Q' p1 s    int i,j,k,target_int_count=2;" H% s8 A# }8 u* h7 [3 z
    char ch[2];$ o/ A# D$ M+ F7 a6 `3 _: u
6 V8 u1 n) K. f  Z% x7 k/ }
5 d: X: {1 d, ^. i

5 D6 D9 n  m) [    upp_interrupt_count  = 0;
) |  J: I' ^8 z: h, f8 a; x2 _    upp_error_count = 0;/ x& Y5 I; s5 g( ~5 E
8 H0 z# Q% Y9 f% l4 k
    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ e6 x' S/ N0 `- y
    // Initialize data buffers
+ K3 b2 f8 W5 N9 Q3 _2 [* E3 x    for (i = 0; i < upp_frame_size; i++)1 z0 j7 V, j* u: {. ]. @
    {& A  H/ B. B  t* |3 |+ m
       upp_buffer_b =i;4 X9 C8 l3 y: e2 A4 {4 f% l
       upp_buffer_a = 0xDEAD;( ^4 w6 e$ R5 t  J2 s
    }! K( d3 v3 l+ A. s" Y

; `1 H0 O6 A) ~( s& c) j/ _) o    //for(i=0;i<1024;i++)& C: H" @# ]9 S; Z
    //    temp=0;
; i6 e! n2 ?4 U9 \
( m1 w- p* M# p+ g3 {1 V    //UPPReset();
# s- e& I9 [# e8 ~, @, @    /*启动UPP DMA传输*/
) M5 u: A! I& c' C8 A( C: H/ s$ n$ z    UARTPuts("upp_prog_dma_i\n",-2);
7 C+ d& N# D0 e$ |* c, Q    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( W6 h+ p* N% D+ N4 N% L
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# q: [& d( Z/ A2 r8 x% q6 C
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% e% z8 g3 t" C6 ^( p
2 }% w# q% A3 C7 Q$ Q    UARTPuts("upp_prog_dma_i\n",-2);
6 p6 q% h& k) v/ m. N+ ?: t5 g    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 ?% d+ E0 N- G: m1 x, a    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, t: j% Y7 b8 W" j2 y6 i' W, z    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" y+ n6 z3 Y  S' ^. a
9 a( Z1 ^; p$ _/ }  c" w+ |. t( E
    /*等待UPP传输完毕*/. q' s  O! x* F
    //i=0;
/ N* r5 b/ x( n$ O- O    //j=0;
' F; c- W5 ~1 W! ]: N1 f' ?    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( P) u" Z+ q4 H) H    {
! d" k0 W5 h: K* ?% e, t4 X! |        /*  测试UPP传输的同时操作普通DDR数据$ f; ~$ c- i- Z: ?
        temp=i;6 B2 e  [$ u: m% F3 |9 o) c2 e8 _
        i++;
  f- M& q5 g* ?- S. D        if(i==1024)* u8 O; u& w  I, w
        {  a( _! z- @. {9 w! h
            i=0;; h* p/ j9 c9 R' L3 K
            j++;% E7 P: p; K) F
        }' \: G# h7 r9 O1 ^- B1 D3 j. }
        */
# E! A+ f% p3 U" T5 R& B8 n. Z; m  S' P0 L
       asm(" nop");% ?% f  A$ X/ g+ b! g

  b0 r  k& U3 c6 C& O  s       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& T, v; S8 S: `& e: a8 Q
    }
1 u6 B# J# B* B7 W3 A: \/ I6 B3 a9 K- J* V3 ^" u
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. U2 r+ p9 }* g3 X2 |3 X3 U    //UARTprintf( "i=%d\n",i);
/ W/ c/ q1 k( x6 M6 i& Q: k1 B    //UARTprintf( "j=%d\n",j);
+ F# ]( }6 J3 S. M1 ?- W    UARTPuts("Data mismatch in buffers.\n",-2);" q6 o) p* s5 ~
    if (upp_interrupt_count == 2 && upp_error_count == 0)) ]& H; f* _/ \0 y( E+ o; M
    {8 g. w1 n( k1 w) a% \1 E
        for (i = 0; i<upp_frame_size; i++)
2 S, Y8 O. v% J( U        {
7 H! [8 }& B' g: ?3 M% X4 N, [  [- t            if (upp_buffer_a != upp_buffer_b)
# K$ l. w% T' z" R! t' K9 l            {
' }0 V' C+ D% E+ b/ d/ p                upp_error_count++;
3 S4 R. I, _, B1 s# G  S0 U! H            }
7 s2 z! ]( S# p0 \. S, G% W        }
0 i( e' r6 r9 v- h# a3 j0 }1 U    }: v7 ]: N, F  ]# M4 n7 K! S
5 _3 `' e" m. C7 y  q$ ^
    /* 报告通信结果*/
+ R/ d& D) E1 P. M6 Z    if(upp_error_count != 0)
* s' t3 W7 j: \) {1 l        UARTprintf( "upp_error_count=%d\n",upp_error_count);
- n& M- a& `8 X5 H: }: j1 @    else1 ?# C7 Q2 V! m5 E- _; J9 Y/ m2 Y; B
        UARTPuts("uPP transfers complete!\n",-2);
1 c' c3 F0 O) L3 `# J' R6 f( y) C. G+ K  F6 t
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
7 X$ e1 X( j4 G& X    UARTGets(ch,2);
8 g! F8 Q& E7 f4 ^    UARTPuts("\n", -2);. I: G0 k' [) ^6 s% k1 |# H" P
; N; R7 e' D2 r" y
    if(ch[0] == 'y')2 j1 |! F- C9 T" l0 k
    {
) t, l" t6 J  P+ @$ P; ~        /*打印全部读到的数据*/9 u+ @9 l3 F' ?4 J( m" A
        for(i=0; i<upp_frame_size; ). `2 R# t% u8 a% l5 `' ~8 P
        {  n& w" n/ x( M1 I
            for(j=0; j<5; j++)% c7 r+ o* @3 [
            {  {6 ?( E2 [* R
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% x% q" [7 o/ Q$ |# z; z                i++;
# t$ E0 o  a- G+ b                //if(i >= 4096)) V: X8 c4 h8 k. n* C# z3 J  G
                //    break;1 @' N: F" t# Q  E9 ~
# l6 m3 ~$ @! S- z4 t7 t( F
            }
" T5 z: Q1 \& u. ?8 j# G            UARTPuts("\n",-2);6 t) ]; F& J/ |
        }- S( L& g6 u3 ^5 r( Z- j
    }7 a, Z8 W# Y* _$ O1 W4 y
( @2 ~, j8 `3 L
}
  R9 R* `. ^# x9 g3 j
' c9 j* x2 J3 h" H
' m) j/ k8 f7 u) a1 ~% S* p

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 b; {# [% A3 G7 U' L- Y
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- m. `  u' n  M5 P7 Z  n7 N




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