嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# Y# {6 N8 z) w& j" q
Void UPP_TASK(Void)0 t# X2 L5 y0 a7 I; B- I3 ]
{
8 f2 R! o# M7 D
$ u7 c$ b* T  w' b6 r+ @6 w' A    int i,j,k,target_int_count=2;  K/ O" e4 g; x, }6 t
    char ch[2];8 b3 I" D: e, H1 P+ X. Y% Z  I: ^& m
1 M6 G( A& t* j7 r6 R! F2 N4 F

2 L) B9 K. w0 K. C6 X
4 M  b+ X9 j0 Q    upp_interrupt_count  = 0;4 ?- h, @# K3 `& U! w
    upp_error_count = 0;- C7 A- r- ^; y" w! S0 y, l

! }. k4 f- V" q9 _' y    UARTPuts("\tResetting uPP buffers...\r\n",-2);
& m' h5 L) C8 E& a    // Initialize data buffers' x5 z/ I. w" p% j+ ~
    for (i = 0; i < upp_frame_size; i++)
+ I" q6 d/ ^9 d2 Z8 Q. p! A    {
5 j: R3 O) h9 @& e3 J       upp_buffer_b =i;
  u% b& e* p- Y" ^% W% c+ H9 R       upp_buffer_a = 0xDEAD;% {% U2 p) i- i+ p, M
    }( V3 w& |/ I7 Q" a* f+ Z4 G
9 o4 H1 q: j3 d0 }9 m0 G& K# M
    //for(i=0;i<1024;i++)
. ?, h/ d5 E/ r9 p    //    temp=0;
. T! J0 e( u+ _! Z. u$ s- o# u6 t8 O+ c5 T1 r
    //UPPReset();
! z% s& e3 V' s! X: |    /*启动UPP DMA传输*/4 o% Y  S) y# p4 Q4 ]7 I: @9 h2 ~8 S
    UARTPuts("upp_prog_dma_i\n",-2);
; @: J+ w3 E5 D6 z) h) F; y/ h1 ]5 U    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& q* |4 t7 y( U' Y; K1 M
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# f1 S' I! I$ A8 U; J3 l9 T
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: @- ~0 P# _) ^  t$ Q3 N
& t6 w) g/ ^! P0 Y; C6 e' C! z0 G$ e
    UARTPuts("upp_prog_dma_i\n",-2);- \3 q) u( X0 n" ?$ f4 k& M# I
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 j  _! u$ |1 ]+ d; G3 l
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 S1 E# p2 c/ e6 }2 K$ }    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; ~/ F- ^9 F7 I$ x! q) t

# d/ O+ l0 b: X9 {7 h! U) B, _6 T    /*等待UPP传输完毕*/$ @0 L6 k* ?% o5 X5 k4 E* Q
    //i=0;
8 q: {) Z( U, V) i$ f7 ]5 O# J    //j=0;
9 |+ }: c0 Y) z7 w4 B4 Y6 Y2 n; B    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( j6 D* _5 e3 s0 ^
    {
; I' \: t4 D9 @) ?  ?/ M4 S        /*  测试UPP传输的同时操作普通DDR数据' s$ J* {3 V. l
        temp=i;
# X3 S8 _5 n8 L! h" Y        i++;- y' r- C4 t' {/ `' Q
        if(i==1024)1 [8 I5 `) I4 @9 i
        {
7 Y& J9 w% O8 O1 M) J            i=0;" B: z" f' ]) h% B0 r
            j++;1 @. x+ \9 i1 s7 B
        }
/ ^2 n0 ^" p# F5 e        */& l2 t! ?$ h3 z/ e$ [

! }/ [' \% V4 s7 a       asm(" nop");; p4 N& ]: n2 V
- ?9 I0 l9 w6 O6 P6 Z3 J
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 h4 A" c4 O4 h; N* ^# t$ _
    }9 Q1 `1 L. |3 a' o
7 J2 x% ?% c% D
    /*检查UPP传输的数据是否正确 (loopback modes only)*/, _" G, h/ t$ R' F* ~
    //UARTprintf( "i=%d\n",i);4 P, J4 s7 E$ Y! H" Q2 t
    //UARTprintf( "j=%d\n",j);
5 Q# g' P% T' U0 V: _* s9 I    UARTPuts("Data mismatch in buffers.\n",-2);+ a4 L9 G) e: ^% Y6 G
    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 ]# S- l, M) T$ i: G    {
5 k* r6 D8 s& Z/ U; v6 T        for (i = 0; i<upp_frame_size; i++)
$ E6 N* |/ Q" n7 S3 ?        {& a# {0 v+ w5 q; s' t: U6 m' \
            if (upp_buffer_a != upp_buffer_b)% I+ |  t& A/ B$ l3 v
            {
! I5 g* H  j, ]4 r3 z" k4 Q2 `                upp_error_count++;; l& p# c2 ~' A3 Q1 b( q' }
            }+ N6 M1 V# u. R1 k+ ~6 ]
        }
) H9 x! Q) s; M* F0 d6 ?    }9 b$ q3 _" N. _- X0 Q9 i; ?
* e5 `& m- {- J3 [( q, V
    /* 报告通信结果*/3 t9 k- }7 f% R5 t
    if(upp_error_count != 0)8 P3 Q/ w3 {$ Y( y8 S# }- J) I
        UARTprintf( "upp_error_count=%d\n",upp_error_count);* M" U# T% g# X2 M% c% |/ E  F
    else
8 v' S4 V- F3 b- v/ H7 E$ J        UARTPuts("uPP transfers complete!\n",-2);
: c- ~1 h( H3 ^1 y8 f7 k! C
5 u, P9 n+ C) q# p    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 C& O! D- g( t4 Z5 P( k
    UARTGets(ch,2);
2 b; n9 _$ u2 z) @) u% W) i    UARTPuts("\n", -2);- i: F  S9 r% A( u# f6 ^
3 ]- p" w. F8 I( S
    if(ch[0] == 'y')8 P" A4 C6 W# a8 F3 R
    {% v4 s( r4 c6 H' i) j
        /*打印全部读到的数据*/
8 J8 @2 r/ Y: F4 \% ~% r        for(i=0; i<upp_frame_size; )/ ]5 Q9 @9 z7 k6 X
        {7 U% W* I  c1 [: D) C# D
            for(j=0; j<5; j++)
! ?' J) {% K! R1 X& y: U            {; X2 o0 u. ]) M) @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 O* \& G9 h1 w2 r2 K                i++;
% L8 y/ A+ N4 \& s: a) P# b; W                //if(i >= 4096)
( h7 B; {* q0 k$ |( _/ x                //    break;
/ \4 z8 \4 q! L; v1 M
0 N" L5 r; L3 _" G1 n" T6 Q            }- ~% {+ n2 G0 S- P# e3 G7 l2 G# i7 o
            UARTPuts("\n",-2);
7 R0 W1 y; {# }8 a# k        }" z, V' [  M( ]( Z- G5 \6 k
    }
  ]+ o! w% D0 h- N8 d
- t) I3 t2 w3 A& ^% s}
8 D$ `  y8 I3 }/ z" Q" M+ G5 p) B
4 p0 Q, Z  M* |2 G
: v( ?" D/ d+ q5 Q! C: w

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# s1 V3 ]( a9 L( Q$ ^
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& x% G( G& {& E5 U1 {




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