嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! F7 V; e* g7 A# D
Void UPP_TASK(Void). U* a& v3 N5 C( x$ U" j
{, k1 a5 f' k1 I# O9 x& }

2 g" q5 r- |" o( |+ q. n+ c5 z    int i,j,k,target_int_count=2;8 E, P( N5 t( g% y% q6 J0 |& i6 h! v
    char ch[2];: E/ ^/ R7 ~' P. x+ t

5 |7 T/ `' j+ N% n; A0 P+ S: j# e! K% o

( o3 d* l$ @( C! |5 O    upp_interrupt_count  = 0;
0 ?' i2 E; D1 A, w& F    upp_error_count = 0;4 }# n( x8 F+ e3 r& y; g

9 U, b- Q3 N; I# V    UARTPuts("\tResetting uPP buffers...\r\n",-2);, m$ x4 Q) W" L
    // Initialize data buffers- p9 \- P1 @$ [! \9 x
    for (i = 0; i < upp_frame_size; i++)
- d: o  h" u2 q6 \! J    {1 T' B; v3 r  B. P2 \
       upp_buffer_b =i;
( o. v4 h" ^" U' L7 F       upp_buffer_a = 0xDEAD;
, t. y3 Q" z; O1 f3 Q$ T4 X    }: O5 {8 C" R% |4 C) R( u

7 ]2 k7 N8 F9 i- i' R# k4 a" ]+ \9 Z    //for(i=0;i<1024;i++)+ `5 T* P$ S* ~* L5 F1 H2 J
    //    temp=0;) D. h# `  P+ z

( S7 S. f/ o6 Y, U* v5 u1 k    //UPPReset();
  g  }% w! J( z) t; @    /*启动UPP DMA传输*/6 {9 ^. A3 A! g+ Z! X) f' L& z
    UARTPuts("upp_prog_dma_i\n",-2);5 J9 Z8 k/ C9 ~8 p: I  z
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- M# c* s) E- O; _. F1 ?) S
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; M0 G# Z1 K& j+ J    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" V1 M* Y+ G, A/ t

  R3 P$ j9 w2 C1 I- s3 Z    UARTPuts("upp_prog_dma_i\n",-2);
3 ]1 \3 \% c/ q3 `  [' S! I- q  S    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( \+ A3 A1 u3 q    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" X& N: f. C7 i* U+ {    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* z/ K/ n* c0 \7 e5 U
; F* b( D& t" c: @3 |: N    /*等待UPP传输完毕*/
9 D8 g* S$ V6 K! q3 o0 q; `) k    //i=0;
% @& h( X2 h; w9 Z: A    //j=0;
3 e' z& R) _+ S* y. i/ m0 }& s0 R    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 `2 V, \- |- F, X( g5 c( R    {0 B& F7 X) ~: c# R9 c
        /*  测试UPP传输的同时操作普通DDR数据
* v! \+ B4 d( S        temp=i;) s" P, Y5 w/ S, U
        i++;% Q3 O% N- y+ _8 U% r$ M& K
        if(i==1024); y& U* B( p' \
        {# ]1 {$ E( n! L
            i=0;
7 N; Y( ~: A, l0 R$ i8 Q            j++;
' d" B3 _( d) T* g        }. ~) R& ?2 c8 [7 v: ]! J9 g
        *// ]" N, ~; ^  Y/ V3 ?

6 l: h9 c: A) U- f4 E* e       asm(" nop");
( Q' L4 J$ o0 S) d% f- u8 @/ z0 _, A" ]' t8 @  ~
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# L5 g, i. T6 U2 J! ^
    }8 w% v7 d! D' @3 v; N) D% g. T
2 S2 ]; R, }( a: T5 d
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% W3 g6 k  a; L# b    //UARTprintf( "i=%d\n",i);0 j/ A) _1 B3 [( x1 t
    //UARTprintf( "j=%d\n",j);
2 F6 Z7 |: q# E- l    UARTPuts("Data mismatch in buffers.\n",-2);
- Q1 g/ k; _: |& s( V    if (upp_interrupt_count == 2 && upp_error_count == 0)4 ~* J7 h5 N6 B3 V
    {
$ {; N0 K. R* q0 C' c* J. X        for (i = 0; i<upp_frame_size; i++)) a; q# |4 d& O  B
        {3 b6 {' v9 U$ N  o
            if (upp_buffer_a != upp_buffer_b)
! t9 I5 N+ J1 w8 \' `            {
+ S0 ^5 y+ z& _* [# \                upp_error_count++;
0 O2 e6 y+ M5 V; b0 X            }. C% a7 w# k; ~/ |  U0 ]# D+ k3 Z- B
        }9 O, c! v, {' q, p7 Q
    }
7 t1 {7 N- Z9 Q5 O; X; w9 Y
1 v; [9 n6 s; k    /* 报告通信结果*/* B0 T$ A* e' z' L( ^4 g
    if(upp_error_count != 0)/ M6 V- A# A$ h" k
        UARTprintf( "upp_error_count=%d\n",upp_error_count);7 q- `# a: o( p
    else
; M  L1 h1 W# K7 _# i! Q/ y" T/ `8 c        UARTPuts("uPP transfers complete!\n",-2);
- l6 ^+ Y, s4 ^  d& v& b! E$ b' }" V" d! @' v
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( c+ M* R# i9 ^/ a; z% J) P* T    UARTGets(ch,2);
! |& `2 [7 N4 {- B: e; \    UARTPuts("\n", -2);4 f" f. d% Q3 H$ d* ^. V% s5 r

, ^* Z1 O, D3 ~0 `- _) ]    if(ch[0] == 'y')
3 ^$ w9 ^6 ~& ~) N9 e! X% F    {
2 ]* }( W# ^4 d) w1 n        /*打印全部读到的数据*/' N7 K3 F( @- D5 o8 A
        for(i=0; i<upp_frame_size; )- z) L! o6 Q. m3 t: g, s
        {! S9 c5 V: Q/ H# ^' ~5 F& n
            for(j=0; j<5; j++)
) s( j* i2 [, O; E" z% o( [, W' N; _6 ^            {5 Z3 k$ @! ]: z( L+ _
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! m' l' Z  y" A  h- c- P
                i++;
2 t! f# |- S8 L6 b" O) S                //if(i >= 4096): e* ~  c& F$ r
                //    break;
  l$ e- g5 o2 `7 K! d. k
6 Y8 }: w+ r# o& e4 u4 n: l6 H            }
) _+ S; p" u% ^' v0 H2 c- a1 K3 b% k            UARTPuts("\n",-2);
9 Q9 f4 ^/ P' b# L2 W* p        }
, K3 a6 d3 c$ `& N3 V. ^& J    }
0 F- U& J2 b* f$ H7 u2 w2 J+ A" g( V3 n2 M7 q6 ^: c
}
: ~$ ^5 j! D, E
) u& U$ F% R2 q2 ]8 Q7 k3 |
% v9 N' ~. k% ^3 }6 w6 l* C

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! @. J; j3 y, D( ?! p

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 g! ^3 h  b4 i; x: W+ S




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