嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 O6 n  g9 K6 I; i
Void UPP_TASK(Void)
0 k* e3 N' y. T{9 W, z  \  N3 M8 F2 E. N

2 \" k" e5 ?3 x  v9 c    int i,j,k,target_int_count=2;
/ O4 D* b& I  W9 h1 D( G' r0 R    char ch[2];1 Y. p( C, D3 `( n. m. V

/ A1 b0 J+ K( y$ b! ~' Z3 J
6 }: Q/ i! G; r# t7 R" C
* Q7 \7 i3 ^% g( v+ P& B    upp_interrupt_count  = 0;  k7 w0 u2 P+ O. \( W5 d3 I; L
    upp_error_count = 0;* `+ |7 m% b( X+ P

. r( u* y) n" k1 I1 d    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( D' i2 _0 m' y    // Initialize data buffers# S' Q. k0 R- e8 B" h( U" `6 y* P; @
    for (i = 0; i < upp_frame_size; i++)' j. S, E/ V0 G" F* X
    {
' {+ @* G, p0 w" P- g5 z1 h       upp_buffer_b =i;
5 E7 [! L3 ?+ F. ?% m  H1 {/ `/ U       upp_buffer_a = 0xDEAD;
6 c+ o6 O8 I" r) k7 v    }
2 f. l+ V3 T7 t. O# p+ Q' q
. N& B* I0 T3 C% U' p9 R    //for(i=0;i<1024;i++)5 |% j* V3 ~+ [9 h; m! j+ M
    //    temp=0;
8 D; k- ^- }- c4 _7 f" V8 o  p0 o2 L
    //UPPReset();
7 U9 k& \! `5 v8 d# ~+ v    /*启动UPP DMA传输*/) S" G  K; ^. m( z
    UARTPuts("upp_prog_dma_i\n",-2);
/ L! w* ?: M8 J3 S  |6 c2 ?1 U4 x4 l    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" B  o* E7 \& u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% i1 u, }" z8 h, A6 g
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* ?! M4 d  A; n. b* }9 _& d* K5 O
    UARTPuts("upp_prog_dma_i\n",-2);
3 G; l& d/ e* B7 G    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;6 X8 G" {3 x0 ~# V
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 H2 K6 f0 c! v  y, ~+ X4 g9 y3 m
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 O) @& i7 ~5 @5 T$ X9 ^# H+ \+ O: q/ w7 |
    /*等待UPP传输完毕*/6 M5 P+ ?" T/ u. q& {
    //i=0;* k" ~! ?8 m3 V( @2 u; L. {
    //j=0;
0 p+ b+ Z- {* L1 J+ k* [    while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 _# \5 B4 m2 v
    {
) m2 f2 R- |/ n/ H        /*  测试UPP传输的同时操作普通DDR数据
, K2 G" q4 x6 w/ V        temp=i;
( y8 H. L. U7 h5 ~        i++;, f4 l3 w0 i/ z6 M
        if(i==1024)
, B1 u1 v) x* h: G3 d3 l* L- Q% b        {
" H3 n) p& O2 W* J/ l1 h            i=0;+ |7 g1 v* n& |2 a: I
            j++;
2 P3 r+ P. T" Q% c4 y" }% E        }& b/ r1 T$ U& [, V6 G
        */9 g: I7 O$ X6 d; u) h

# z8 ?- Q; i  G; T       asm(" nop");! K; l+ c0 F0 G/ K3 r5 y! M

1 X. H; B0 N7 H) }. e3 L       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  k1 W$ K7 c5 z$ \+ m% j    }
; z' K  I! z# O& Q
& c; G2 |/ h0 N4 G+ B    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 w; @* ^/ t3 \/ H& Y+ |    //UARTprintf( "i=%d\n",i);3 E3 m- g% G/ e& X5 @( u7 o1 r% _/ R( J2 M
    //UARTprintf( "j=%d\n",j);
0 @5 ?. w0 i3 R1 b% M/ B' L    UARTPuts("Data mismatch in buffers.\n",-2);- k+ n8 c9 u$ A, F
    if (upp_interrupt_count == 2 && upp_error_count == 0)
( T* Q0 K; o( U4 c7 V5 U: z4 m4 d    {, d. T% _( T1 W
        for (i = 0; i<upp_frame_size; i++)
/ ~! D# n. c+ d3 F1 G  \        {3 l- e4 x. f8 a4 {% s
            if (upp_buffer_a != upp_buffer_b)
% O( C, O+ @/ V5 e            {
3 i4 @( f. [/ H: q5 y; q$ h7 P0 S: L                upp_error_count++;
+ u3 H$ z3 o+ V; M( p. b! Q, ~            }. m; g' ^4 L. ~: `; A( w& o
        }6 M* G$ W- Z' i, q. _
    }6 h  W& @. q* x  t
% A  `; b" ]6 e# L0 \/ `
    /* 报告通信结果*/
4 s4 G) ~" [% R    if(upp_error_count != 0)
7 a: y' r! {5 S5 y& o7 ~( P        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# ^. \9 u8 j5 z" ]  ?+ n: }5 O; b/ u    else; w9 M8 i# R" j. P$ u
        UARTPuts("uPP transfers complete!\n",-2);- X4 e) `! H1 j3 `
- {" Y# T8 l, d% X
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# s& h% A4 R7 T& ]8 J1 E2 `) |8 N    UARTGets(ch,2);/ s3 V1 E. q$ s% U. y
    UARTPuts("\n", -2);7 x2 z  Q: z" u! C. y5 _0 ]

9 ~) {) H; _; e/ h- C    if(ch[0] == 'y')
5 k7 A* L" {) u$ o    {  r% y- R0 D( _
        /*打印全部读到的数据*/0 U' r: N4 k$ e# _3 g
        for(i=0; i<upp_frame_size; )5 R. F9 q2 N. J, \( R! h
        {
1 b1 s4 M: Z5 ]' G            for(j=0; j<5; j++)
; f# v. d7 V/ O* o( e            {
' w% v/ f* P2 e; U$ s0 C4 F% J                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 m5 S% M$ {: l7 N8 T                i++;
# x# y# `; s, n- j, F7 E                //if(i >= 4096)- q; p& ?/ Q9 g# j. \
                //    break;8 `$ x& |' K/ \  t$ G' o- |
5 J2 D6 [" n  n
            }0 B0 W& P% h0 ~  w/ a* y8 r
            UARTPuts("\n",-2);
4 F0 q0 j) S  P0 v! l, ~; q3 v: W        }% n% M* D- r% T6 c! o
    }
0 l6 U, v% B9 }7 L1 `3 j# _$ p5 _) o5 F* E; H; E
}
/ o; Y& ]3 @3 v' l

+ b/ J( a: k! ?: E- Q" D% @
9 j9 T% ?$ h8 _
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* Q' M9 l+ r: P9 L( t7 L

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ q' h1 {/ ^; p# D& a  V0 Q+ [





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