嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- z4 r8 W. j$ s0 m4 t
Void UPP_TASK(Void)7 q! ]4 z# q8 G6 s6 |" e: w8 v' J/ n
{' O: I2 y; b( A  p+ V0 a: I$ E
# q* j% }+ r0 G
    int i,j,k,target_int_count=2;" E/ j0 f9 F- g5 x; Y) w
    char ch[2];
% U& B, |' |$ }0 o; }1 |1 s% E
( R: g4 O- E7 R& q2 c- q6 v
( o2 A7 ~* r/ a' j5 h* ^% f5 q  b4 r0 n5 ]  _5 a; {
    upp_interrupt_count  = 0;
! x+ p. J* n& M8 w    upp_error_count = 0;" c" p. F: m, G  N. @
7 p1 b: F1 b# a: E! x6 u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);! D; p8 E' E$ m7 M+ l
    // Initialize data buffers
* B$ M; G$ b' k; j* I    for (i = 0; i < upp_frame_size; i++)1 M% S, r4 m2 b7 K  s3 {
    {
* l$ B! N  [, a$ u7 ^0 L       upp_buffer_b =i;
8 {3 d! m/ V5 M       upp_buffer_a = 0xDEAD;
! @4 E% r* j7 b% x' H$ c$ O% Z# q    }
9 F( |6 [" s% q, h' t
1 h0 K' q( C7 v$ T) f    //for(i=0;i<1024;i++)) B1 J, `  H0 i) y
    //    temp=0;4 x, n, K1 f: U

/ i! {0 W* P6 H% C/ X" h    //UPPReset();
6 \# l' H, K1 v+ C  `8 d    /*启动UPP DMA传输*/% N5 g" ]) P, I4 Q. i6 f
    UARTPuts("upp_prog_dma_i\n",-2);9 s% Z* S' z- a" ]) a/ ?+ ~% K
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" h1 j  w' O8 E5 ~( r( U* G1 v    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. Y; V+ w6 P7 y* w/ E1 r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 n2 L/ `) Z7 l% t: ?7 e

1 g7 L/ T! m& B2 }6 G4 y    UARTPuts("upp_prog_dma_i\n",-2);9 W0 U) |* N$ J1 E% @- U: p/ O2 D2 h
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ E1 p  U" n6 ?  U5 ~
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- z. C/ h! z# G- ]
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( [" I( G! e, |1 g/ K
8 G6 s  I- k0 b2 L6 B% H; |    /*等待UPP传输完毕*// V0 a' P" S) B3 f3 t; d  h
    //i=0;
/ T( E7 x1 H' ]5 O    //j=0;
- V3 l$ }8 d% H    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( y9 G$ u1 C$ F! J! n3 y! u: ]* g% \* E    {9 N/ o+ d: A2 J" H5 R
        /*  测试UPP传输的同时操作普通DDR数据% ?% C0 {) g) r& u) ^$ B  p9 `+ s
        temp=i;
7 w5 X# j& z+ Q        i++;) k1 Z7 d; v9 X' V: X: g
        if(i==1024)
6 v  `  q/ z$ z2 h  l7 M+ l        {1 _  D% e) v: Q! H: R  S9 o; Q" S
            i=0;# g+ ~- B" y# C. a  B% ]8 {+ l
            j++;) X; Z+ Q* w$ x$ Y# j  |0 i
        }
, L% P+ {+ u+ H        */" U( q5 n1 G& o" C8 W" m
% O( I5 r- r7 J+ F" Y
       asm(" nop");
6 b9 e( h4 P/ H9 l; @2 K7 K; W9 P) G9 H- ]6 d6 q2 y, h+ j
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' y% u3 `# F& h
    }
* D' @" w- a5 {3 }4 o9 r& X) _# `# w3 j5 f! T
    /*检查UPP传输的数据是否正确 (loopback modes only)*/) |: S6 T8 H2 ^  y: \
    //UARTprintf( "i=%d\n",i);2 z. e6 c& s7 a4 T
    //UARTprintf( "j=%d\n",j);
  q! V5 t1 {* f+ K# W, }( V0 G. W2 ]    UARTPuts("Data mismatch in buffers.\n",-2);
: e+ ^6 d7 d  u" I# H  G; j9 |0 i    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 s7 \' g. y. ?: ]$ p+ w    {
& ?5 l' S2 C3 O9 q- p        for (i = 0; i<upp_frame_size; i++)
% i7 X) h+ {5 ?5 @        {+ v% t: E! f8 h" ^7 ]+ \/ z* ]
            if (upp_buffer_a != upp_buffer_b)
6 s3 A  \$ M2 U6 g( \8 ^! q            {& y  s( u: x( h" S. l- s# B9 p$ @
                upp_error_count++;
& p" l: Z4 R) k; l9 Y' S            }
& {8 ]# z. X2 k        }( x$ r7 ]+ Y- I& H9 M
    }
0 i- n# ?6 p/ N/ t" _  z7 i' E0 \! U
    /* 报告通信结果*/
$ I" W3 u: p" h( M" C' [) K    if(upp_error_count != 0); G0 X0 j; G: n' l8 }
        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 g/ V, h! c- P  O# L
    else
; q9 `8 b7 t. c* j9 y: l2 V, k; ?: I+ a        UARTPuts("uPP transfers complete!\n",-2);
: c; ]3 l8 Y2 W: ~& E
$ L% i/ P( `- ^) v    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' K4 V, b8 w  _2 f+ A* B5 I, s    UARTGets(ch,2);
( n% c2 C$ u6 ?& |, H  D    UARTPuts("\n", -2);
- r. A% ~, m  t4 _( ?& Q- n* `4 I
    if(ch[0] == 'y')2 K7 J, u  }3 [. k2 o3 M
    {
; o2 b0 H( N- I; _! w        /*打印全部读到的数据*/4 W! L. O) O  O
        for(i=0; i<upp_frame_size; )' o2 H* e1 h9 N$ X. J! l4 [
        {3 l. K4 F% A* o5 ~) y  e
            for(j=0; j<5; j++)
0 i2 d& L5 D8 B! |            {
7 j% B6 {  b* H8 v                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);9 C# h+ Y2 P9 F7 g
                i++;( }  Y6 Z8 \3 G$ [! V
                //if(i >= 4096); B) y$ h' R" Q. X. K  X  `; {; M
                //    break;
( R* A# t9 j, c6 ^* \+ y7 E  L/ Q- w) u
            }/ P6 t: D: a6 X& L7 G$ S
            UARTPuts("\n",-2);
, a# f. r* e* {% v        }
# {' \9 w: H/ W9 F    }
7 C, z0 ~6 b5 e8 x+ M$ |! X# ]# K/ t* f) Y% {: J
}
# I1 I3 J( x9 O$ Q& `. B& B: x# l  X

4 n$ o7 f6 `( `! l. |- Y$ P6 |
# Y" v" H# P9 W: c( F4 `
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 Y) t7 M# {3 U+ h: l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ p; P6 Y6 i; |





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