嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# n' n# W; C' f  u2 v
Void UPP_TASK(Void)
2 P) V# ^, E: B% O{$ J* W3 e& b' q% d- X, d& z0 f/ Z

* J" y4 s3 n$ R: Z- _    int i,j,k,target_int_count=2;5 d, c* u3 Q' S1 g( G' L
    char ch[2];
+ Q6 \8 a2 e6 u, L8 h& j; _+ X4 W& a3 x+ V; u
, Z! o; H1 n5 N  W9 M2 z

5 _3 l$ Y- T1 l    upp_interrupt_count  = 0;
7 l$ L) y, E  M) X0 N: C6 @    upp_error_count = 0;& M' `5 t! F& d% M

! ~& R3 l5 h- L) }: m) Y% q    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 E2 P" M/ e$ f
    // Initialize data buffers4 M9 K" O. F7 U+ ^3 f
    for (i = 0; i < upp_frame_size; i++)3 R$ |3 m) e( L; k$ W
    {
- T* Q3 S+ {2 v9 ?9 f% I1 H       upp_buffer_b =i;
0 d' W% K/ p" {6 o. ?8 P  t; r       upp_buffer_a = 0xDEAD;* q; A0 C; q0 c. O2 `
    }8 r& `& @- N: u" ~1 U3 u* [# U8 n/ ^

: i* v. {" l$ R) b    //for(i=0;i<1024;i++)
& O5 x( \8 m  Y2 Z( X" ^4 `! W    //    temp=0;/ ]0 f, ^" h- o* [# F' w1 j0 ]  O/ G
7 x0 h9 l7 I. E: f2 i6 f* f
    //UPPReset();  G4 A. f3 o3 e  L( r5 x
    /*启动UPP DMA传输*/! O4 i" N  h) X1 ?9 O5 L1 D' v
    UARTPuts("upp_prog_dma_i\n",-2);0 B4 x2 \; [9 V# n- ~; ]
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 F9 ~5 t6 `; ^2 [, s    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& f% K5 d3 Q0 ?3 W    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 }7 v2 B/ b% d1 U' g$ D3 _
& u$ t9 V" t+ ~1 S    UARTPuts("upp_prog_dma_i\n",-2);9 U3 F- H% F. A; C" K& x$ m2 |
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ R( J6 e, v- w6 l
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: x- s$ P3 i- `) ?- l4 _    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; _7 n, o- r2 ]2 r( E
" q  D) H2 ^  @( |3 M# P4 l    /*等待UPP传输完毕*/
% r  u9 ~: u3 ~# c4 D& a* a    //i=0;! ?  N6 _" k& ]: c/ G
    //j=0;
! j4 U. L0 I% {) H) P0 r' f; \& Z    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! [  F' A  M+ R- D1 }- o# R    {
( A& o0 h* F$ ]# }  O' a( }        /*  测试UPP传输的同时操作普通DDR数据
5 ~) x. V( v! r. A$ q$ ]2 B' D        temp=i;
# }1 B- c- [: k. p        i++;
! n4 y. R) u4 M( H$ }" d; t" g        if(i==1024)
2 `# P- D  d; a        {4 z+ S! J1 r. ^' X
            i=0;( F  u. F/ F! |8 w
            j++;
& o- w, k/ f4 w* ]3 C8 x        }( O. k# v1 M9 Y8 ^4 w- j
        */
# [5 d% R& j- ?& }; y% ]7 c5 e, t7 U2 E$ Q' P; H
       asm(" nop");, n3 R" e! F$ d* ?- q2 ?
9 r% B  i  J7 U( Y4 Q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: x/ [; {/ C- g! F  F
    }
( w5 ]! |$ X" `
3 |( t- T2 N: P$ w1 g6 y/ `- P    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 `% S+ x4 f" O+ i7 n* }0 O    //UARTprintf( "i=%d\n",i);9 |* q$ l6 g% q! G1 t
    //UARTprintf( "j=%d\n",j);
( R8 V# z8 }. }9 t    UARTPuts("Data mismatch in buffers.\n",-2);+ Y; M( V; e. m( r7 l7 M
    if (upp_interrupt_count == 2 && upp_error_count == 0)
% C, S- r- P/ p3 w- I& t    {7 d$ H, ~" ], G% v9 {* R; u  @) e
        for (i = 0; i<upp_frame_size; i++)' O: l, d* n. v3 i" S
        {5 R  y0 K( j$ ^  c( T
            if (upp_buffer_a != upp_buffer_b)
' q! ]! Q( D6 y- h) V. w1 {            {" ^; d% H" f0 z5 J) Q0 q0 C
                upp_error_count++;
# f, F3 U9 C6 a6 y4 B# k& X5 f            }
. x+ \' f/ z1 j$ ^0 V        }. r; p( a% [( @. O& }
    }! j( K0 J& J/ n. J2 U/ e

. O" U! s* m0 C0 F    /* 报告通信结果*/
" H( n8 @3 I2 f) b( M$ F4 j    if(upp_error_count != 0)6 C& K' i4 ~% c
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; F8 s( J. n+ R$ k. W' O9 k    else
1 G* o# l, c$ F4 M( a: v6 E        UARTPuts("uPP transfers complete!\n",-2);( w$ C; \* z9 o
' i# Y& `! x. n+ i3 P! v, D) o4 C
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 ~' z/ Y/ ]* k4 c( R$ y  I    UARTGets(ch,2);
' b7 M/ B4 @6 y, r- `# [    UARTPuts("\n", -2);
- M7 F! X: `0 x. g4 ]$ L0 o  q* U3 Z; E3 I% C1 J+ \& |
    if(ch[0] == 'y')
+ g% d/ P) r2 l. X. E    {
( X& x# w  G0 u# x$ z        /*打印全部读到的数据*/# G; h3 B& D( C' F) e8 _" J
        for(i=0; i<upp_frame_size; ); X& f( t9 W" ?2 T( y* y. W
        {
. S( Y7 }* D8 F% t& @+ n$ X! N            for(j=0; j<5; j++)
  x/ G. g7 ]  a1 t& L            {% w8 n" L( B4 B  W0 H- Y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
8 \- q9 `  M4 X8 r                i++;3 e6 Z$ L9 o5 m. `5 u& [: L1 J. t
                //if(i >= 4096)
) W0 T8 A* `7 N* E                //    break;8 l+ |8 e- D# C1 o! G5 u

6 o& ]2 `; P4 j: F- e9 T+ f" d            }/ m- |- W' m8 v2 n; \
            UARTPuts("\n",-2);
: u$ E( |: Z! L4 v6 L        }
+ @" T1 }3 ~/ q    }
/ R  `4 D) [0 A, F
# f( R8 o7 r0 B: P+ f9 N  ]" r3 ?  c}

" L* S5 b/ t/ b: D$ v

# I! L2 j6 ?0 ]: O$ c" d# j- z% t

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 j1 u$ x% F3 J" ?
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ d! }( E2 [5 n8 o




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