嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 ~3 `7 Q9 F# j# f6 G3 c  Y
Void UPP_TASK(Void)
& L  l8 _: Z2 B{& q2 g+ K& ^. i- Q

, D  B% Y; ~& N    int i,j,k,target_int_count=2;, O5 U+ j3 \0 Y7 C# v3 \
    char ch[2];
2 Q8 l$ l* ^# N8 ?3 Q
2 D$ R  ]; W& }8 E, k
4 B& R) c: \; c' [
" b  A4 R/ w4 o2 x/ C/ t    upp_interrupt_count  = 0;, z9 ^$ ]- M- A; N
    upp_error_count = 0;
$ O6 {& A9 T( H2 \8 p3 R7 s6 G2 B/ ?$ \
    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 Z" H! h$ @" g6 r2 T% A& f
    // Initialize data buffers
, o! p  y! B& K    for (i = 0; i < upp_frame_size; i++)
7 u+ o, @; b; P    {
" N& n, w: Q- N+ t3 r7 l2 ~       upp_buffer_b =i;  E5 G7 F* X' s1 v3 w
       upp_buffer_a = 0xDEAD;
5 T, G6 i! t' \) B/ C; \    }
6 k  q+ B: p2 T7 e7 ?) E) X0 K
2 l$ d7 \/ g" m9 P: b    //for(i=0;i<1024;i++)  Y) C0 P% R; Z7 ?
    //    temp=0;" W$ J' N, M8 L4 [0 ~1 i: {
! s5 z& S! [' C
    //UPPReset();+ x: }; E4 V" i& u% E4 p* M
    /*启动UPP DMA传输*/
- n2 t2 k/ q% o3 l" ~8 M6 t    UARTPuts("upp_prog_dma_i\n",-2);
& y0 g+ q. N  ^    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- C2 j2 j) [8 o, U0 j    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( U7 m$ N7 |' j2 i. K# ^) q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" z1 B5 W  a' R. p* C) J
" c7 Q, `$ x' U5 q7 J& A$ p5 e
    UARTPuts("upp_prog_dma_i\n",-2);1 k) [- @! U0 x9 _  B" s
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; b) f0 S. S" e$ G
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' B' ^2 n# G' j$ }2 @" l6 Q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 ~. a( D' r* r) c- D0 x% P7 i! x. [4 |2 @; b  f
    /*等待UPP传输完毕*/
4 h3 G* f" Y5 M. h    //i=0;
2 W; A& f: v3 w+ n5 q' R) X7 ]4 l    //j=0;
% @  q9 g8 h5 s% H- P: h- U    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* R& E! |" R$ L: J* z
    {
" s$ {" v& ^; C# L# A        /*  测试UPP传输的同时操作普通DDR数据
& w* `& b: \4 ~! a  o' t0 U) d6 K! _" E        temp=i;0 U; {+ M7 ~* n' b% `; s1 p
        i++;
0 v  O. a7 J8 q* J0 q! u        if(i==1024). C9 ?/ i5 c/ V  _5 ~6 B1 Z  E
        {
' w# Y8 Y! Y5 [            i=0;! n& N* `6 G; T. K
            j++;
% a6 ~, r6 K- P* X+ _        }4 k, m' d; W+ P  y6 v; `' u
        */' e0 N% B) \/ C: c- c2 S) L

$ B9 J6 S( E. p# z3 K       asm(" nop");
, v$ C# Z& P: v! e7 ?/ s' D
: o2 K& S: g) [, j       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);5 `$ b: y. g+ p  z. w5 g8 O" u
    }: E$ d+ o1 X. ^- s" J
  t) W! t) l% O0 W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ Y8 {# N/ M- d2 Y" T: U$ Y/ g6 K
    //UARTprintf( "i=%d\n",i);
7 E6 ]4 W$ n' F7 \4 Z) J1 [    //UARTprintf( "j=%d\n",j);$ n) O6 u3 Q1 h. {! b
    UARTPuts("Data mismatch in buffers.\n",-2);8 |  T% k% x) P  E& f
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 A. t# s6 G- a0 ~- i5 p    {
5 {* w$ `3 m) s) U2 `        for (i = 0; i<upp_frame_size; i++)
  z8 B; n1 @  L0 K$ }( ^" i: H! ^        {
3 i: L& `& ?6 E: ?( Y& E0 Y            if (upp_buffer_a != upp_buffer_b)$ t# b% ?( [/ \# x' q  Q% N. U
            {
) C' {; R, Y  P$ z7 b/ U4 G                upp_error_count++;6 a* B; a- _8 `" w+ x
            }# K; c0 t) s. {9 Y8 }" i
        }) A) D, \3 k( o  ?
    }
% Z; J) j6 X9 _
( y6 k, \# P8 U/ I# i4 F3 w    /* 报告通信结果*/. {% ]/ q4 a- J- y! s, D
    if(upp_error_count != 0)1 A  Y3 w; I: Q: Q: h& S- S
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ @' W# U: w. B$ P8 R
    else# }& C* z" Z) F) `) Y2 v$ F
        UARTPuts("uPP transfers complete!\n",-2);
7 ~9 {8 ^: c. i% c) a+ M+ d, P2 ~( \# g* h1 R1 l; o* x7 i
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. r" M' `  j3 M% g' `- |; M
    UARTGets(ch,2);
# r; W; f' b. F2 \( s( e    UARTPuts("\n", -2);7 q9 D# p. ]# B8 Z
( N, _9 y; \7 l* @: E
    if(ch[0] == 'y')
' G0 b8 A- [/ e% {' h    {
/ f2 e. R2 a) @5 ~( o2 c' c        /*打印全部读到的数据*/5 A6 [! o( v( Z) d; Y
        for(i=0; i<upp_frame_size; )
7 H* ]0 ?2 G' h+ q# h( \        {
. x2 z8 p/ x3 [, G$ L            for(j=0; j<5; j++)& K5 k: e% u) K% B, d$ I
            {
5 f, k9 h: ]' D7 i7 l) y" {$ B                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 @  v$ ]3 l  ^5 s  x, @                i++;+ j( ?$ m( @( i# X+ }
                //if(i >= 4096)& n( V- N' k7 @; r( l+ a
                //    break;: z  q, v; V. c: V* u

, ]9 ?6 e% ?5 T5 a9 k            }- N& {" Y* x$ A( M) O( J$ E$ F
            UARTPuts("\n",-2);* O- L# l" t% {
        }, U& f- ~5 q5 N+ Q! A7 F
    }, g/ }2 N; D: A4 Q
  V5 B- l& ^) i0 n6 ~
}
! ^) n8 r+ U: Y# U. s

. n; \  q# v, s0 L( ^) i& P0 t
! f6 l4 e( Y7 r4 _
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 n, h' @3 N5 i5 u* p$ ?, n
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 G( e( ]$ W  w$ Z. I# F: A) O




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