嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- D" d* L5 C! @7 v) [2 K1 j' c& V$ S3 C
Void UPP_TASK(Void)
6 D! |! G. K( t8 `) e{3 ~& X* V6 o7 G2 q  k2 j

) n1 t- g5 v9 V+ x: T0 Y. f9 O6 w    int i,j,k,target_int_count=2;
( t$ w  Q' t2 b; e  X    char ch[2];
8 U- A: N+ l( W6 Q1 R3 Y3 c' u2 o) h6 i0 e/ e  N

4 `+ p" H# a5 U7 k5 r5 b8 Z0 v! T+ Y; @! I6 Z
    upp_interrupt_count  = 0;
& F  E" Y- ~4 W! J    upp_error_count = 0;
0 f3 W# S& q5 L* w
. R. f6 z0 `" L    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# e$ W, @, ?2 f* L    // Initialize data buffers2 y1 H6 @5 C- P* C) j
    for (i = 0; i < upp_frame_size; i++)/ _/ c+ V; q" y/ ]) x0 [
    {& ]7 c" F+ j+ d5 v7 k. U
       upp_buffer_b =i;
5 J' ^: Z4 ^' K. }8 g: @# f       upp_buffer_a = 0xDEAD;
4 Y% o% D' n8 S3 y    }& e' `' g9 A, D2 G7 [* h4 G' O

# M1 F% g6 x, w2 F# F) i/ o    //for(i=0;i<1024;i++)
. [6 s* w. T! M, A! E' Y* J    //    temp=0;
7 E+ u) G& n6 q$ H1 P0 U* `4 B7 G  [6 v1 f4 S% {
    //UPPReset();0 C' A# R% n& T' r4 k! E2 I
    /*启动UPP DMA传输*/1 r! c4 i8 \: \4 _( V
    UARTPuts("upp_prog_dma_i\n",-2);
5 I" E% x9 H8 x. O, r    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; A- o  ]0 D. a9 z# X( |, P    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% [. U3 a. o8 }, o
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 e" i. C* C3 H4 r# j+ Y- X

9 X+ Z' o( k4 e1 ~' G8 u# \- b: n    UARTPuts("upp_prog_dma_i\n",-2);$ A) X6 D" |* a; a
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* A5 H& w2 C( j. X. a
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; n5 _! X0 z9 b+ `" v) r    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: I+ a! Z2 T9 a) d1 N4 }$ _/ @) m9 D
    /*等待UPP传输完毕*/1 a* F' [9 E  R5 ^5 R2 f
    //i=0;9 f: {$ s8 U- }7 |( }! y
    //j=0;
& n6 N+ X8 B6 j. \8 X    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" n! \( F5 U+ w4 Q" ~
    {+ U6 F! J  U2 ^3 }& X
        /*  测试UPP传输的同时操作普通DDR数据/ J5 h/ w5 I5 x: o
        temp=i;! [, S) F/ n0 l% j$ N  N
        i++;! d7 k1 i4 x1 i. k8 T; S1 Z
        if(i==1024)
  @' y! n# f- w9 c. V        {3 A/ u( _' A5 F: J+ U/ V
            i=0;$ J! o8 {" n# x8 X" I  u0 i
            j++;' y% `6 l1 t* W- ]
        }
. A/ Y, e2 l! O- `! \% x( Y% a9 n        */
+ I8 ?2 w: l6 x
% f/ L7 q7 w' @  N       asm(" nop");
, ]7 b8 L9 K  T, p8 C) s, m' U7 Z0 a# ?4 a7 d3 b7 E: j
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. s7 x% E; z" P- W) `$ P  Z" T    }
& _( w  X: R7 T" z4 E- x) A# _: i7 r- D# m# J
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
! S. X! R8 C' u" o' T/ [7 ~) b    //UARTprintf( "i=%d\n",i);
% s* v8 t5 D; K) W    //UARTprintf( "j=%d\n",j);
( }9 x, g1 \2 Y: K; o1 y    UARTPuts("Data mismatch in buffers.\n",-2);
. K! v" l3 U4 C8 u$ P    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 v& O* G! E- k' M    {5 Y4 O" r  o7 `7 H( ?
        for (i = 0; i<upp_frame_size; i++)
4 |, \! |  ]: F$ D9 z! q2 T. L        {
" V+ r0 Z. J& x7 F/ F            if (upp_buffer_a != upp_buffer_b)" Q3 v4 q! s' d
            {
: n3 P3 ]; P* p. T: r' L  Z; n                upp_error_count++;
2 e) k6 Y8 q7 I9 v4 S( {            }: w& V4 H# W/ U0 T; M" Z  F
        }
, ?  D( ~  f# ^    }, v" |9 J4 Y6 r  C. x
+ E5 S' s3 l& a7 l* ^& D# D
    /* 报告通信结果*/
# D) F/ S2 I- G    if(upp_error_count != 0)5 F( k: S5 Y: a
        UARTprintf( "upp_error_count=%d\n",upp_error_count);8 Q; k/ t: A) j" M5 t
    else7 O) g8 G% c) v
        UARTPuts("uPP transfers complete!\n",-2);
/ R* l% V) ~0 T; g6 E  I2 x
5 D' j* K- i2 H' w  ^) F" B    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' u& x2 Y! d% Z! O5 p! f6 V! a
    UARTGets(ch,2);
) ^, O5 t( D" t* r    UARTPuts("\n", -2);; k( M8 J9 D# G; B2 }

6 p. D; O; a: m9 b    if(ch[0] == 'y')
9 ^# \/ O, I% H8 H+ w$ ~; q. K    {
- Y8 F5 j4 G0 V( W2 h) ^5 }        /*打印全部读到的数据*/3 ^! l/ Y5 @3 y: A$ B3 I
        for(i=0; i<upp_frame_size; )6 S7 i% ]. m* y8 B- N- a
        {
0 D7 ^; B9 H! H( [$ b$ J- Z            for(j=0; j<5; j++)
( Z6 g9 L% A( P; G0 |. z% i9 b8 m+ i8 u            {
8 A$ m: p7 Q# n! s. [2 ?                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) I1 m6 f+ s5 V# T* z5 O1 `* X                i++;
- a8 O/ c5 X' W4 h  N" k/ ~8 q# K                //if(i >= 4096)
  N1 I* p* Q* H+ q2 X$ P( ]/ u                //    break;) b$ ]+ `9 X6 h+ a

$ y* F& w, `) d  g1 K% i3 t            }' H3 n5 ?5 }* o; v" n2 h
            UARTPuts("\n",-2);
! f, M% Y" l/ r0 E; S        }
+ W" m1 n) v* h    }$ z3 Y' C& c7 u" J5 s' ]

* f- V- @- R- |- c# f  @1 O0 o}

3 }2 f1 e) F# ?" H) @

0 s3 @, M# T. G* U# j( s+ u2 i
+ S4 s/ q+ H6 J, e
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; Z) ^* k' R4 \, S
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 [" X& ]& b: e" ~+ a5 ]




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