嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?1 |3 T9 g& J7 N+ v3 h  j( V
Void UPP_TASK(Void)
+ w# j: N/ t0 P2 w) k{
4 `, h, b8 X& n! U
9 X4 e8 y3 P) W" t    int i,j,k,target_int_count=2;2 V: C( R( t; Z6 Q
    char ch[2];( ^3 x2 ^( F& C' m: j7 ?3 d

# Q4 D4 ?) \3 s; n. C" A, n( s3 B. k: J! C0 x/ H2 |

8 ?$ F# O+ ]  F; A    upp_interrupt_count  = 0;
( z( h9 u9 ]: T/ q, Z' ?  X6 z    upp_error_count = 0;4 X; J/ ?! C1 f6 j9 N4 B7 r

, ~' J& I0 y6 u) v9 E5 S# s3 U+ e( C    UARTPuts("\tResetting uPP buffers...\r\n",-2);
' W' I4 K0 x* h! I. k$ s7 p6 D    // Initialize data buffers
, i" w" X! Y- w2 B  u    for (i = 0; i < upp_frame_size; i++)
! }  Q7 Y8 W) J    {
, Q; ]) w5 w8 s% Z, n       upp_buffer_b =i;; W+ Y0 r  E/ z; G! V; @! o
       upp_buffer_a = 0xDEAD;  Z9 C' x7 X8 G4 U, x
    }- o+ N' x- T: d- D! R3 W3 }
* ?7 `+ A/ A! }- a
    //for(i=0;i<1024;i++)7 J; ?/ l% c8 ?- o& a0 O. O6 b" B( t0 D
    //    temp=0;0 c, I7 Z) U/ m
1 y3 u- }3 M! X
    //UPPReset();
$ j0 R+ O9 I# A1 o. @2 |+ Q    /*启动UPP DMA传输*/
. u6 T* r7 T. t! _1 F$ }    UARTPuts("upp_prog_dma_i\n",-2);, g8 Z7 {& [' q+ `$ v
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) E  D- D- Z& X+ q* v( M    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! O4 _  h* b$ X9 X* K% k
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; I  |# a' w& T  D1 s  X) w
3 b0 S7 s( M: {+ _" R    UARTPuts("upp_prog_dma_i\n",-2);3 d; P) H5 Q: H1 \* m
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" \9 n* F! R5 Z, d  w    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 h# J4 D! N- {7 h# d! g
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ Z1 B/ Y" G) V  b  r5 _& g; v  z  q
    /*等待UPP传输完毕*/
9 Y) P3 v7 o) M. R2 `8 q    //i=0;* W5 g& _5 A6 F, b
    //j=0;: y" g1 B% H/ l6 j& J2 K4 g8 A
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% c2 u9 C" m( E+ |
    {
  \6 _% i- t3 V1 Z        /*  测试UPP传输的同时操作普通DDR数据
- p7 d8 u/ t7 f        temp=i;
& g- I; d' e: u5 ^0 m        i++;" ]' e2 H( N. P% Q6 g4 j
        if(i==1024)
$ [) d& f3 W# p3 _        {3 x$ T- W& |! M* F& l* t/ F
            i=0;- N$ |5 G5 L, {8 F& k2 R! r( v; F
            j++;  ^; [* M& i6 a2 i
        }
  x- f# W% x& l, I9 }. O        */$ W) Y9 G9 p9 `+ g$ A! u# _

3 |9 {' I* s) _) l% k' T7 N% V: b       asm(" nop");
+ i7 ~4 a. g; ~- l5 C9 C' w- ^8 A4 Y! Q6 _, U+ g
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, |0 g+ n3 a  n    }
9 q# Q- B0 ]8 R. t: \+ S
: B/ T+ f  W. u7 M) I( t; g    /*检查UPP传输的数据是否正确 (loopback modes only)*/0 x2 C- v  B+ c
    //UARTprintf( "i=%d\n",i);' A' _2 X: b& J$ p
    //UARTprintf( "j=%d\n",j);
2 ]! u: t% y; v    UARTPuts("Data mismatch in buffers.\n",-2);& a  K+ O: Z2 z/ c
    if (upp_interrupt_count == 2 && upp_error_count == 0)
+ @: J/ k6 X0 |; t    {
  J3 ]' K5 \0 h' e, l% w        for (i = 0; i<upp_frame_size; i++)5 w5 A- t# ~+ i+ m' W) {* h
        {. G" g* p" i4 u) W/ X4 }' m( I% n- s9 I
            if (upp_buffer_a != upp_buffer_b)
" _$ d+ i& @: s7 m0 F, {: z$ l            {6 f4 B6 X8 w! Z* z: Q
                upp_error_count++;
, Z" k3 k  G( x            }
# Q, Y- n" {* O        }
' E2 ~+ i2 a/ D    }4 C- t8 M/ D" Q9 H6 ?) ~

) Q9 L) a  J4 f8 x* T/ _# f* i% S    /* 报告通信结果*// h7 A" @! Q+ D
    if(upp_error_count != 0)
6 |: B# r& ~# a, v3 ^2 w; o6 Y        UARTprintf( "upp_error_count=%d\n",upp_error_count);0 T5 S' d- ]3 K, k) m
    else1 M- s+ w, g4 ?, k3 E
        UARTPuts("uPP transfers complete!\n",-2);/ K( ?! \; b2 Y" S9 \

( I$ G3 i) p7 _: f; a" w' B4 T    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 q4 a$ m% V$ u1 s    UARTGets(ch,2);
' m9 p1 [8 C8 S( W3 V    UARTPuts("\n", -2);8 b7 d( N9 w$ r& y. n( `6 Q* r

. a: B* N9 o+ z" s% W    if(ch[0] == 'y')2 D- `9 g% \' ~" b; G0 x( [8 D# r. r
    {
: A/ C3 h! ?0 F5 J        /*打印全部读到的数据*/- v' i2 W/ m, L& |/ i1 ~
        for(i=0; i<upp_frame_size; )
) @' K: U+ H2 b0 H! A1 E7 F0 }4 \        {1 h- Z4 {" v, k0 @& o" a7 V
            for(j=0; j<5; j++)
* @8 x2 J' C% G; Y$ _" o9 L            {( J4 F, R. h! w  }& ^
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* W5 R" C$ [* g                i++;1 c7 k$ p- r) Y9 d8 q0 r
                //if(i >= 4096)
0 f$ N* m! g, E: J+ L; J                //    break;" }: n7 |9 a# ~. c

% B/ M0 Q' o/ d            }* X/ D2 V! A: y! i( O" L1 n
            UARTPuts("\n",-2);
$ [$ m9 _3 I6 f& ~        }
: O& q' J1 f6 q* |* R( b1 x    }
( _  Q: ?/ k8 s  X8 a) K% u+ ]4 W; z. o7 L; F* R- v
}
/ \( z  L; o" B
& o3 Z4 g: c2 F
. d* ]+ \: h" k1 y; N

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* T+ `9 ?" F) H. j( }# m4 D
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ U. _6 X, G  w1 g! t* p




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