嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 P* V4 ]1 G" S( p$ P2 v6 e9 _
Void UPP_TASK(Void)
; U7 o1 V( y  L6 Y3 g1 D: W{3 Z& O  ]# t- x) [: Q7 [' W- I
' e' Q/ g5 x; s1 `
    int i,j,k,target_int_count=2;: L% r% ~' y; A' S2 `
    char ch[2];% o' D. I/ }" [* \: _4 Z

3 F2 b3 i5 X6 M8 V1 ?+ g, C( v7 L% T
* t/ W; _: Z7 x7 S5 y) u
    upp_interrupt_count  = 0;
# p& u3 L' \9 t( Z$ S8 y  Z    upp_error_count = 0;1 |2 ]9 i; S7 O4 Q, L9 W; l

% B3 x4 f  k2 H$ l+ q- f7 H    UARTPuts("\tResetting uPP buffers...\r\n",-2);% c$ B% l3 w! @# T& x/ V( D
    // Initialize data buffers
1 T, p" g' ]1 H& z/ w    for (i = 0; i < upp_frame_size; i++)& z0 J$ n) g8 O9 D: {& A
    {
" J2 Q5 n: W, D. W       upp_buffer_b =i;
4 K* G. n, r+ D9 D0 _       upp_buffer_a = 0xDEAD;6 [6 x& v6 r4 x3 {+ [0 H8 g
    }; o! v/ C3 n; l) W1 l: A

9 T1 i% J/ L- D( G! q8 R    //for(i=0;i<1024;i++)$ f% s, J$ f( L( B2 t' e* y
    //    temp=0;
+ U2 S( C- S% M6 o5 r9 |
3 c) w3 a1 k$ K! D9 M5 @) p2 \, J* Y# }    //UPPReset();
  g0 Q0 }7 z* p$ ?    /*启动UPP DMA传输*/
; B& S/ ]5 A! ?+ x, V; [    UARTPuts("upp_prog_dma_i\n",-2);
; M3 }" W# e+ m4 d! _1 J    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- I( J' V4 @: B
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) L$ q5 i) k3 w& A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 r8 R, `+ u6 b7 S0 V
7 h9 L9 H3 Q! y5 A  h    UARTPuts("upp_prog_dma_i\n",-2);: q6 u- U3 |; Y- M
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* g9 v: ^+ h  l) C
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 B/ s' |$ \% N. R! l3 v" N% L    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 [8 q9 y' }; U! c  [, G" u% D: }

5 G. b) V: E0 W0 a) u3 H    /*等待UPP传输完毕*/
2 I+ D, z) U8 V$ {0 t. E5 m    //i=0;4 S6 Z1 ^  ?+ V( _  z. b( K# R
    //j=0;
7 f, P3 Q/ ?; C6 B2 J    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- s/ W# Q% F, m* Y
    {/ H3 C: S" b- \% n: z  \$ \0 l
        /*  测试UPP传输的同时操作普通DDR数据
% B: l) Z1 Y3 T" p' ?0 z! D9 |) [        temp=i;
* c; v3 B/ U+ q; Z0 o        i++;0 {* N: x6 X+ n
        if(i==1024)3 B: M5 \+ ]1 G( t
        {8 T' e6 [, P" j; s) f
            i=0;
# P# b6 W( r1 W; B$ z) o4 r            j++;
0 w3 L$ D5 _% t& w% _* J" [        }+ {0 @/ Z  ^5 F) c  Y
        */
. i+ Y. o1 ^- ?- p$ o# q) X9 ^- b2 v
       asm(" nop");
% X' H7 N+ o6 w; A8 S# n& v+ q
# ^/ Q7 o- J  j       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, N* {# n5 S. W! E7 ~( u! R    }% _. R6 U) x# z, ^. a8 {6 O( j5 }
+ }1 U9 J. ~/ Q, d2 g, l" w
    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 L" v' e- |8 S3 r; S
    //UARTprintf( "i=%d\n",i);
, L2 j& R3 h: V$ z    //UARTprintf( "j=%d\n",j);$ S$ t  R: v% m, h( g& o) N
    UARTPuts("Data mismatch in buffers.\n",-2);$ V  e0 _+ g/ \
    if (upp_interrupt_count == 2 && upp_error_count == 0)% c$ B. S) }: }% i, F' U; G
    {
' N6 H! x5 Y# O5 `% Q        for (i = 0; i<upp_frame_size; i++)
/ n4 s1 X3 b2 u1 s% @3 a        {
4 r+ U. ?0 H( P& ]6 i( O% \9 {            if (upp_buffer_a != upp_buffer_b)
; H$ d- ?: T3 y$ g            {
# k* d: Z! F7 W) Z3 ]                upp_error_count++;
5 V3 g6 d  w5 d: k! w' ~            }0 C  N( s: H3 n% o
        }
. D( G+ z$ \5 {% B    }
) g- [7 x$ J, u4 o5 q$ ~6 l$ u2 ~1 K9 c2 s' u' w2 |/ y
    /* 报告通信结果*/- o5 z" t" o0 E9 y5 c2 g5 s1 R
    if(upp_error_count != 0)8 Q' o" ~6 t+ k7 r/ \: a! H7 N1 b
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
  M" L4 X8 i5 o9 H    else
5 S; n7 _" w# i' v& G9 ?( z* `        UARTPuts("uPP transfers complete!\n",-2);
& c% _' n' J2 S& H' j  y+ h" V& _2 F4 h' N
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
$ ]1 h/ A6 S4 P# d    UARTGets(ch,2);
7 v: K! k1 z$ J* `7 o    UARTPuts("\n", -2);
8 i8 ]/ D7 h8 Q4 e% W# p5 [8 g- z
    if(ch[0] == 'y')
, g- ^) B# s$ R    {# l/ }- }; s3 O8 m" G! e$ b2 V
        /*打印全部读到的数据*/
- e8 c. K+ i4 Q* L# I8 p4 G7 ~        for(i=0; i<upp_frame_size; )
& |- }" W2 \4 P5 C        {$ M& K7 e' m4 ]% X: n" L
            for(j=0; j<5; j++)% A+ s: J8 g0 h5 d
            {
8 }; z$ x( I, w                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);1 ]0 [2 c! w5 J7 N
                i++;
* b) V3 A4 G1 N                //if(i >= 4096)+ N4 M/ ~5 c" u0 I8 C0 G2 x
                //    break;
" d' m. P$ b% e+ D4 S* B; D( E
: W5 P( N: {/ M0 M, j/ e            }
6 w& _+ |0 n6 z7 L) ~* Y) v  i, l            UARTPuts("\n",-2);1 e5 E" @' a) d. g* [6 J* S
        }
$ E- c$ M, _  ^    }* y1 `8 \, c. l% Y* Z  [/ I4 z# y7 I
" X$ `. k% n2 i- Q  q& r4 s6 P
}
% ]0 B: r* J3 I! [! ^+ o
7 N# k' t$ [/ u; [, l6 w" j5 s
+ ]9 H, a3 J# V, Q; P- {7 M1 S

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) W1 s) V9 Z) @5 p0 @! B3 R- V

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! S, S" J* |9 @5 u





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