嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# ]% y8 h5 i$ w! o$ q& E1 J
Void UPP_TASK(Void)
: ]' v7 }6 g9 Y6 ]. m% |! i{2 Y: a, ~, W) }: j
3 y3 B% d4 G' B6 ]9 A) F% w
    int i,j,k,target_int_count=2;
, z: G) ~# A3 x, A! M3 `8 D    char ch[2];4 m1 e( [# P: B" L5 Z! s

+ N* u' m: R' C2 p0 i. q8 y! E7 {6 E& X. S

; D' ?4 j; Q- F7 u! `7 \* Y    upp_interrupt_count  = 0;4 _( [/ ]4 S  e3 G" L  P
    upp_error_count = 0;
$ b2 ?, @4 j" C" n$ Y! ]* K! ^$ }" S* d$ F# m# a
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 b+ g: b1 B+ B9 v! J& v    // Initialize data buffers
  c/ W3 b+ _  L( r    for (i = 0; i < upp_frame_size; i++)/ B" R3 r. \0 t4 N; S0 [: Y
    {" L6 }( L3 z. s  K
       upp_buffer_b =i;
! t! F' b$ d% k       upp_buffer_a = 0xDEAD;- H% H( |4 X( Q! j5 z# r+ T
    }3 T! J6 f( r6 N0 F

2 @. x) Q3 P# N: @    //for(i=0;i<1024;i++)
% a4 w9 z) W3 m6 v    //    temp=0;
" o, Q# j# S6 I
9 Y3 X  x6 y! y+ t4 y% F9 Z/ ?    //UPPReset();6 E8 w  Z& p5 D3 h( Z" r
    /*启动UPP DMA传输*/4 m- x2 @5 }4 r' u
    UARTPuts("upp_prog_dma_i\n",-2);
8 U, h5 b* C6 ]8 j. B8 m7 i! S* e2 k    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;3 K, o2 i, D# k& s
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ F% X- k9 y7 W* w9 L    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 A4 X% a4 O0 Y: n$ E5 U' y5 B0 y% p! @
    UARTPuts("upp_prog_dma_i\n",-2);
1 H  U% q! R8 `- S' U# _' d    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;8 ]9 x8 G) ~) C2 x: \
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* j" z" A: U% W$ d9 s    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 S) k6 R$ n1 T, \/ [* p/ E/ u# D& i' N
    /*等待UPP传输完毕*// s$ ~6 @$ W. ?4 R& n5 ]9 E0 F
    //i=0;
3 m% b! N2 J% B& b    //j=0;4 R9 C. G  v6 x5 t
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 @3 N( z& H. y6 m    {7 W5 y3 d4 R3 D" O9 U
        /*  测试UPP传输的同时操作普通DDR数据
1 C+ L' y/ U% H! @3 m" z( h9 r        temp=i;% S' Z2 s! x2 P% }
        i++;- l+ r  j! j3 K/ a( C, x
        if(i==1024)6 k7 [7 N+ t" r, w1 |# R# F
        {
/ U9 T# u' i0 M5 p, q( h3 i            i=0;+ }; O5 r8 K2 k5 C* v: O" ?# V
            j++;) T* j" Q& M( X3 |( X# n
        }' |* e+ p* O% P7 v5 {$ m  z4 _3 |
        */% O+ W4 o/ b- m& H
3 Q5 T5 b- w5 |2 T8 s2 ^+ U
       asm(" nop");0 y9 |1 D8 J$ `9 K# V

2 k( c  Y6 b; S/ e# b. E       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! [, I7 O6 O8 R) h6 Z9 L    }
, k! D0 i' y$ y0 e$ j( Q$ m1 k
- K' f2 Z4 e" o, y    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ [( G! B# L4 F; t* U    //UARTprintf( "i=%d\n",i);: n5 t! V0 i. J3 o5 Q
    //UARTprintf( "j=%d\n",j);" K" ~; ]& Q' ^/ @& |8 e% E% ]
    UARTPuts("Data mismatch in buffers.\n",-2);
. V0 l9 ?3 W& x6 Z' A' m    if (upp_interrupt_count == 2 && upp_error_count == 0)
% A  l6 S, S! d& M, M    {
: p! J7 L& K0 g/ y  R        for (i = 0; i<upp_frame_size; i++)
/ v3 y3 D9 s3 f7 P( m! r        {
3 C: v! P0 R* _* u            if (upp_buffer_a != upp_buffer_b)  g/ v9 K4 Y( e$ J. Z6 N  z* E8 N
            {1 }  N4 o8 W% Q9 c) z
                upp_error_count++;
5 o9 B) B6 e1 T  R+ X  C            }
7 ^' B4 V& p! u6 I; W( R        }
+ J' r: A  _7 {# j- E9 R    }
. r6 s# o7 }9 j1 E/ V# f/ B* g
4 I$ ?( ]- j6 z4 h2 S    /* 报告通信结果*/
: q8 Y6 |1 Q6 o$ w: ?    if(upp_error_count != 0)
' f* v, J, i; }2 m: K6 L        UARTprintf( "upp_error_count=%d\n",upp_error_count);. Y" e/ f5 N" w6 l* B
    else. H; k6 H- a: g9 t
        UARTPuts("uPP transfers complete!\n",-2);
8 Q" q# F1 r4 z" B
. W8 p: M7 f8 y; F    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  q" Y( p. j: O! h3 p; F    UARTGets(ch,2);
+ I8 g& c  f# y2 w* B. `( Z/ ~    UARTPuts("\n", -2);
9 `" y" F( |( S9 k$ Z' O8 S, q& x  @! K
    if(ch[0] == 'y')
/ @) V" d4 P  m/ J    {
) a2 z, ]  f2 m; D! l3 `  S        /*打印全部读到的数据*/* Q, C, U; p* |6 p
        for(i=0; i<upp_frame_size; )8 o+ X  Y4 N- M& L! o  u: z
        {# J% j: L9 I1 o( Z5 j5 {; w  ^
            for(j=0; j<5; j++)* Y( P8 ^7 V' d# p- V) L5 r
            {
! Z' z1 h: d" B* t: I% \# q$ E4 t                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 l. O  O: E! K: q! q* R, C  Y                i++;
. E* j4 d2 _/ `                //if(i >= 4096)
5 u% z, P0 x$ v5 u. `2 G4 i2 Z                //    break;" m5 i7 \/ W/ B4 F' v7 a

. s9 S1 Z% d: {" F; T            }4 B# L; Z5 `# H* l
            UARTPuts("\n",-2);6 D% x5 }& N- I- f) B$ `' g4 z6 W
        }: i9 ]- g" T  A% `
    }5 k! Z, Q# m0 b) o1 a6 @( z
$ O' P) O8 h5 k# p
}

5 }. _6 k  O: L- n7 h. @
5 K. C5 v2 p, @% x2 T! X+ r: W

# H6 D2 J. R: U6 v) r7 G" f' Q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 s# P/ k7 a2 w: ?0 s! B# v; g
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 m& ^- o8 n; p2 Y




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