嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?5 }6 Q3 P3 F1 h2 h; |
Void UPP_TASK(Void)
3 ?% `' @1 D  b% C{. T( i( t3 R6 v: L+ y' S4 N

- f( b% j) c( {3 W6 \    int i,j,k,target_int_count=2;: L8 R1 b: ]  m
    char ch[2];2 h. F# b2 g4 Y  l6 m; Q( @
0 S8 W& g1 R8 j/ t3 |' g

. W& y; m# N; C0 m! v) @+ x, L$ @: e; @% y
    upp_interrupt_count  = 0;2 W; i  T1 p; |9 ]
    upp_error_count = 0;; e* V9 J% o4 c& O  Z  M7 v

% ?3 ]9 X7 b: D  p  v, _/ U5 \! b    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 {1 M$ ?) }" g7 u! j! \6 i    // Initialize data buffers+ k, V5 ?6 V! o* l3 p: h/ N3 E
    for (i = 0; i < upp_frame_size; i++)
, S4 U: D3 ]4 X    {
+ C8 w, C) y% d8 m; ?: N. v8 H/ u       upp_buffer_b =i;/ f' X6 N1 }8 f. r
       upp_buffer_a = 0xDEAD;) K- \" I! z+ ~& c7 z& Q
    }
+ N- O5 t) _( |2 c7 ~7 r' l' P$ Z# T; Z% K/ b+ @' V$ F* n* ]
    //for(i=0;i<1024;i++)
/ C% s( b* h! a3 b( l9 L  F    //    temp=0;
& c/ z7 Z2 }+ M1 t6 f# C) B1 w! E, Q* q, D' D& X
    //UPPReset();9 z4 l) j5 [* j+ }( v$ ~! x, O0 ~
    /*启动UPP DMA传输*/
# m  {! a5 _1 N3 }    UARTPuts("upp_prog_dma_i\n",-2);+ }2 W- ~& U0 ^
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 ^1 Z# a% ]3 X* v7 o+ u6 w0 j    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 X, y- ~! [) I1 B% g- H    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 s. L# }, |% p6 B) s5 p5 n. V- ~2 [
3 i8 z( v# b5 r" i+ |0 l. E$ h. m4 U
    UARTPuts("upp_prog_dma_i\n",-2);* X3 \& e& X0 E& K" |+ X0 b6 A& P7 r
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! j# k' ]" |! t8 v7 ]3 Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: u9 |% I' s4 L/ x) x- u    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);+ x& j" |- O) l+ M$ _( D

+ n3 t; |# ?2 q7 v; B+ U- s    /*等待UPP传输完毕*/
; g# s0 S& J* ?' b5 ~. a    //i=0;
0 _- Y; r/ d0 e9 Y. q, n/ _* w    //j=0;
' t- T$ I5 Q1 J/ _) U    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) M% M) E, i' g0 a0 w    {
7 ~5 j& T' G' O        /*  测试UPP传输的同时操作普通DDR数据
; s/ s; X: p9 r3 x4 q  R- _        temp=i;# C# m7 G# j; p* p6 ~, a; h
        i++;& z/ o) ^: }; N; C; z
        if(i==1024)/ R' {% q# J8 @: f0 _/ Y  _
        {
; ~3 m) g0 w5 z  ^            i=0;
4 J% `1 \5 x9 t            j++;
% E" I6 y: h1 b/ a8 [: p$ [        }; d( ]3 n# S7 @. r
        */* S; v  Z( P# ?, T" a
8 n7 }7 W; t4 T5 r3 x
       asm(" nop");
& M# S$ }2 q3 ~  X
/ u, @9 q/ x5 O0 v; I       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 B! R. \5 v5 O6 r1 n! ]" _
    }; \5 Y' x1 I( z% J5 N9 H
* g8 e0 R$ t8 I' T
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& H4 ~9 M: ^/ e: O, N4 [    //UARTprintf( "i=%d\n",i);3 g- S! m, `3 @6 H9 f, t
    //UARTprintf( "j=%d\n",j);* k  e0 n' u, M( m4 _3 c3 [7 T" k
    UARTPuts("Data mismatch in buffers.\n",-2);
5 c& B7 `, p, B# t3 E0 K9 ^    if (upp_interrupt_count == 2 && upp_error_count == 0)
; N2 @5 x# }0 n7 [9 t    {/ w" x" ^" \' b3 c
        for (i = 0; i<upp_frame_size; i++)
1 u/ y- g- h. a7 ^        {
+ v- @1 k* ~" W- o. u4 V5 I            if (upp_buffer_a != upp_buffer_b)3 P& ]+ s# e. e
            {0 J) k. M: K8 Z/ }$ }3 t0 r
                upp_error_count++;
8 ~* S/ e/ h& e" {, Z            }
* F% [  x4 }# X( l( S/ D        }
: T; d" J, h6 H* y/ W2 P& S    }7 u! x! N1 ]! ^' G

# U/ t% _. H0 e+ E    /* 报告通信结果*/
$ I6 A  P0 Z5 \: Z6 j+ B- l    if(upp_error_count != 0)7 v- R8 N4 t8 [* I
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 t7 r7 L9 s! b, `    else3 }" X0 b7 e1 ^* G7 k
        UARTPuts("uPP transfers complete!\n",-2);1 E. A% w2 k/ w& f7 q- o

. B1 q$ N8 P/ {: `+ S7 J    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
4 P6 h, _% j+ ]5 B3 R; G7 }2 W    UARTGets(ch,2);* i9 O6 ^# \) a/ b* N/ x9 P- p
    UARTPuts("\n", -2);1 N! x& {0 `% l4 g
+ b$ C. m& H( j4 t& @, A) j
    if(ch[0] == 'y')
/ s# E* k, p! i2 j7 Q& _/ |: \! E    {
: O% S) `, h' @7 q2 m+ Z        /*打印全部读到的数据*/
5 l+ E6 f7 R; g& @        for(i=0; i<upp_frame_size; )
8 l$ T/ P3 p+ P( c8 ^        {0 g! C0 @8 O, B& L
            for(j=0; j<5; j++)0 E5 I9 l: }- l! q0 O$ j& ^
            {
. Y0 V; a( F1 L                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
8 u8 o- Q0 ?7 ~/ T9 w9 ~( ?- N                i++;
7 o+ I( V% K0 m5 T                //if(i >= 4096)& ]- J. k- K3 @. x: _5 r
                //    break;: B* P6 ^( E) _' p

$ R2 l, I2 @' f/ w$ B* I3 \            }! Y9 Z# s; C: y6 E
            UARTPuts("\n",-2);
; k0 g  {/ q! E* w! L2 {0 `0 T        }
! P8 A" R# u. J: d! l    }  p" s3 N4 T3 K; m7 r! [$ s' p
8 T* A: \% p- |, Z
}

) x2 \5 P0 x  X3 X9 y2 H* F
, e0 r1 t: o  O  B9 }- ?% o

0 `# P0 G  x7 p" g  v% t8 n
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 A/ @! t; h0 a; m' Y4 z" ]: H2 @
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 I. y- b' r2 w




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