嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( R/ E( h& r; E, G1 ~# A: s
Void UPP_TASK(Void)
8 K. @+ F& @/ \" L6 r: N{
9 ?5 S) \( ~$ [: N% v5 L
  k: I/ y6 ~, K2 f  z: B    int i,j,k,target_int_count=2;
. H, y9 \6 f) w4 F    char ch[2];
5 G# T/ S$ J3 i4 J* a( D0 O) x6 r" Y/ C; U- I9 C! `" J  p! w+ O# t/ m1 q
7 _7 x6 ~( d, E2 `- `

; c; P8 {' L# {6 u5 N    upp_interrupt_count  = 0;
, y: Y  i, C, [) p    upp_error_count = 0;
: M+ [. }/ p/ e# h: z
' K3 }- f! O, _1 |/ |    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 o" O, O6 E  l, x* T- B1 ]    // Initialize data buffers7 }: H' l* t6 N. O1 O
    for (i = 0; i < upp_frame_size; i++)
% {. |6 D1 `: d% M7 b& N, q    {  Q7 |7 C* M6 `
       upp_buffer_b =i;) J9 h3 g* s. t
       upp_buffer_a = 0xDEAD;
# z2 v. o, b& W3 J5 H& T4 c# v- v    }
- \0 ]" W" S* g% g7 m2 \/ x. G4 [: N% ?9 W! C% ]
    //for(i=0;i<1024;i++)
% f& M0 W3 a! U2 a' J    //    temp=0;7 H5 v4 g8 d$ j* f& B5 m8 r7 w  U
' ?5 O7 m( j! I8 G  p1 k
    //UPPReset();
9 P8 m2 s+ |; P6 c4 V) o# \    /*启动UPP DMA传输*/
/ M1 v  @: n' g6 G. W: a, a    UARTPuts("upp_prog_dma_i\n",-2);
- ^7 i' l6 P! c0 w/ w; y$ L: s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: C: s2 J- z9 ]( a" d0 i6 g
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' A* H# ^7 [5 |; l    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 R! J9 U, ^# F
9 i* w6 Q  ~  [, J5 V5 u
    UARTPuts("upp_prog_dma_i\n",-2);
  X8 y6 i3 e* z" Z, v! X    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 F2 N# _. \; E; d5 e    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 U' x! B& x+ x0 Z/ n2 T
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 a" \9 j3 b1 V1 L( a
6 H6 t+ Q. _5 j/ ~: w% h
    /*等待UPP传输完毕*/; k! {* K1 I4 `; W, g1 T- e
    //i=0;' L9 J5 |9 O' U6 K
    //j=0;8 N# N. _& Z2 T3 c: y' r$ t
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 Q" l" T) K2 G/ j4 L7 J
    {
- n; [0 j4 X2 G8 |9 o/ b0 d7 T        /*  测试UPP传输的同时操作普通DDR数据7 r+ k! X7 \- [" l# s4 ~4 Z
        temp=i;
7 j3 J# H' Z. s) _; j        i++;4 ~. t- `  r1 \5 d- [9 g% Q% \* G
        if(i==1024)
/ H+ x! c2 S) x) K        {
) I6 x0 |* M* Q: N3 p( j* v            i=0;
  M! F, _. B, \0 c            j++;
( ]5 D2 ~  X5 I7 N1 H) ?5 g        }
3 G& m3 s* Z3 ]        */
/ C$ C) U3 B* C: u2 u2 \2 u2 s  P# w5 Z( M5 t9 U. v
       asm(" nop");
9 W/ g2 u0 _) |
5 `& @! f/ \; U8 g1 Y1 ?/ ~% w       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: e0 {5 R& m! V2 {0 t! a' O: |3 Y    }
/ P$ H& C8 G0 q$ l
1 }- @4 n8 w8 \5 j' v    /*检查UPP传输的数据是否正确 (loopback modes only)*/. [  X- P3 ?6 ?3 S  s! ]) U
    //UARTprintf( "i=%d\n",i);
5 L6 u& d- d8 E6 ?! h$ t) l    //UARTprintf( "j=%d\n",j);4 d2 z' I( i. E$ t
    UARTPuts("Data mismatch in buffers.\n",-2);
% r3 C4 z( M2 E9 n0 a, _) U    if (upp_interrupt_count == 2 && upp_error_count == 0): {4 M* M4 ?% r& r4 _- y, ^% K9 z
    {
$ D, {' y$ r, R% n        for (i = 0; i<upp_frame_size; i++)
( ?8 g! p+ c# F: ?% s# ^+ i) w        {
  M- B9 c0 B" I6 Y            if (upp_buffer_a != upp_buffer_b)8 v' Q1 _! Q: y6 c; h2 d
            {& D/ G! \- Y8 b) P
                upp_error_count++;6 y) @; D9 ^% ~4 r. O* m( a0 I' I
            }5 L. [& ]; [6 z! K( f
        }
8 D4 e0 W. O2 V; z% s    }9 i/ p  P1 N; n

, ]+ l) b! ~5 J( _. c    /* 报告通信结果*/) L7 B/ V$ G, d0 g0 e
    if(upp_error_count != 0)1 [' P  ~, W, m" ~
        UARTprintf( "upp_error_count=%d\n",upp_error_count);& m4 `* u/ n1 e6 X4 v
    else2 V, `: l& M: g6 R
        UARTPuts("uPP transfers complete!\n",-2);- V" H$ o3 z" W9 d
9 n4 r/ I% w+ b, p
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 f3 z! j3 d. c; T- L6 `$ ^    UARTGets(ch,2);
+ r. D8 y$ v3 Y( e    UARTPuts("\n", -2);
1 `2 p8 ~- ~( c6 Z) x) M" j6 y+ D4 i: [5 |) N* v' s7 X
    if(ch[0] == 'y')! q+ u/ M+ r( Q! [6 _2 ^
    {! O: _' b* C/ W; |9 M3 e
        /*打印全部读到的数据*/6 ]. [) r/ Z9 W' L
        for(i=0; i<upp_frame_size; )4 o* L+ M% _8 n$ C
        {+ F; o* W2 V1 d( t* |( x8 S6 @
            for(j=0; j<5; j++)$ @* V# y5 ^$ h
            {
" Y1 e# L7 u2 o; z$ w4 A                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, |: `3 {4 e2 |% }
                i++;. a# Z8 x' M$ Z. w1 n, Q+ j, x
                //if(i >= 4096)- V- t- B- C5 d* G" ]/ q' e
                //    break;' ]$ p$ O9 w; ~
: \' A! a+ @2 {# \- F
            }0 L8 R8 @2 C4 @* M. v0 s% G, p
            UARTPuts("\n",-2);$ B* I: r, H3 a6 E( o1 S- e9 h
        }
( I% X8 R' Y# `3 R8 x0 ?8 Y/ c& g    }
$ E: _, ?& r5 @* H$ w; W* t: y' f) {
}
" l3 _5 E  i& L; G. f7 ~+ r

2 a: q2 o  o: C- [/ \, m
" x. j  l: }5 D3 O
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: v2 v9 R6 C: n% E9 M8 m. H" O
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ h2 |8 C1 N) a




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