嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 k! m, g. U. R! H' Q$ A  c0 B, X
Void UPP_TASK(Void)
, b( d2 X3 y: _& h8 J{
& t( U6 a1 ~# X8 E% ^. k3 P  M$ m2 t# B4 u3 Y
    int i,j,k,target_int_count=2;
6 s( M0 J) V: q7 t; X' ]    char ch[2];8 o& h$ i) w( j3 \8 c3 d
4 M8 A& C8 y5 [$ a9 l

' C/ E% b9 o! h$ Z6 H2 K! X9 r; t' X* V3 F7 f. \! @" j6 g6 {% |3 w. X
    upp_interrupt_count  = 0;
% M; d' e( O5 a5 {/ R4 G    upp_error_count = 0;
0 E1 \0 r) ~2 ]8 U
& X$ Q5 n# e, J  k, O/ W& |    UARTPuts("\tResetting uPP buffers...\r\n",-2);* _  Y. `1 i) x5 Q' f+ _
    // Initialize data buffers
3 j+ o, d5 ^! O9 ^: B: c* _0 w5 r    for (i = 0; i < upp_frame_size; i++)
0 T; q9 \; }: r* y" G) @: J1 u1 D" B) i    {
! H8 V2 V* |- u  x  h/ K       upp_buffer_b =i;9 S2 f: a* p" t; S% u. n
       upp_buffer_a = 0xDEAD;
/ O9 ~" k. g% k8 T/ [1 m4 d5 I    }
' m& E  ^5 W  m, S* q8 j
" C) U6 N2 |- V    //for(i=0;i<1024;i++)4 n3 i, |. k! y: C* M
    //    temp=0;. Q; v5 }" }( q' T+ P8 l3 S* e  l) B

, p" u/ t, N. z1 q    //UPPReset();( c! L% _- d% C; Z
    /*启动UPP DMA传输*/
2 R0 c- w: M+ _  ], Y- y$ z    UARTPuts("upp_prog_dma_i\n",-2);
+ s: N, k: i2 h, K; s! o2 K/ ]' k    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# S" L+ m0 R  _; s6 y3 V    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& N8 t* s6 ]4 ^4 I    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 `4 y1 D- v  C% `

6 Z9 {( k7 U; z$ C9 s$ F    UARTPuts("upp_prog_dma_i\n",-2);1 [: @. h) e3 h# o( S, l0 X* |
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  V% \) Z( a/ X% @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) d- L6 d8 v" d/ N    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ a' a+ K, _6 s8 M8 C% @. A
! \8 O' ~8 v: T6 l$ P. T: x
    /*等待UPP传输完毕*/* R6 d' l$ h+ t9 @4 F4 N" t* z& n9 y
    //i=0;
0 R) k1 H9 v2 O1 I$ d0 U" K; p2 |    //j=0;
7 g  G- S: W. b  u) O! n* i    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 ]1 r6 v8 d' A1 d& q
    {
- ?( ^% P5 \( Y3 J7 @        /*  测试UPP传输的同时操作普通DDR数据
. u' D! N7 L7 W, S) A& r. w        temp=i;' ~- C  b: O. T! p3 [
        i++;' a3 F6 `. M1 A% O6 S9 J+ {1 C
        if(i==1024)
0 r7 a0 Z* d3 y6 `* I9 U4 a        {9 H7 V1 p6 g/ l0 A3 `
            i=0;
( t0 Z0 g% Q( _- i' {5 |2 l0 Q            j++;
; x( x5 u9 _9 d4 x        }0 {4 E3 c6 N1 U
        *// s- C6 t+ Z! z2 k4 l
, X- L6 i$ b+ x
       asm(" nop");" `; o% q( D3 s( ~( Q8 |( A" j  c

, G# z5 X4 C# @2 T       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  E8 I" F# Z. o8 ?" a$ T, K5 a. ?5 I    }
% Y8 n# k7 O3 s5 t" z, T! B4 M8 d2 X9 [' D
    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 a( p" }+ V* _; ?
    //UARTprintf( "i=%d\n",i);
* d% a5 j, W3 _, R2 j4 n    //UARTprintf( "j=%d\n",j);0 O1 }- b& d: m$ e2 b) W
    UARTPuts("Data mismatch in buffers.\n",-2);. p; f6 x6 w: Q# O1 C  l2 w, M
    if (upp_interrupt_count == 2 && upp_error_count == 0)/ }) f/ S- w& ]; E% b1 q2 N
    {; c8 {7 t( |$ `$ Z1 e
        for (i = 0; i<upp_frame_size; i++)
+ a9 |: }4 D' P: Z# z0 v9 f# }3 C' v        {( x1 X' [: W0 s; w) w5 p1 R
            if (upp_buffer_a != upp_buffer_b)
1 {$ k$ \, y9 w7 L            {
! i# c$ P" {; c% A& c# F. H8 N" {                upp_error_count++;8 L, Z5 r1 d5 d+ S: k* T, O
            }
6 [" R. @) ]2 z. \; Y) @: r* Z        }
$ K' f! J, x" u- |2 t    }
+ r: R/ W$ W6 D  P$ n& k/ ?+ L, I  `4 g& N6 ]2 Z
    /* 报告通信结果*/
8 T1 w5 G  q" p, U- K3 B" t    if(upp_error_count != 0)& a0 S  U, M1 v$ k3 j
        UARTprintf( "upp_error_count=%d\n",upp_error_count);: |) v5 D4 ?- m$ B$ {: K% [! R
    else
7 n6 R0 ^* f/ w* y- e0 O, p' K: r: a        UARTPuts("uPP transfers complete!\n",-2);8 W0 w( V6 G* x
. v- q4 |, ]6 |8 q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& Y  J& C0 \. T
    UARTGets(ch,2);
+ s; ~' u8 l- W7 Z$ n3 Q    UARTPuts("\n", -2);
" {2 ^! O9 S4 m: l5 V# _
3 f) R7 N2 b; Z  A    if(ch[0] == 'y'); M% d* I, c+ l8 O$ c
    {$ f" Y  U  n% N& ~4 K2 Y
        /*打印全部读到的数据*/
0 D2 m1 |3 J8 V5 T" ]4 t4 G) A        for(i=0; i<upp_frame_size; )
; E5 y# f4 p' @+ p: w4 r        {1 ~- T: D4 x, ^8 w
            for(j=0; j<5; j++)7 I5 p, g" |8 Z" ?) v& p% f3 t
            {; Y; u; i4 H, x' l* T
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ s% M$ ?6 L! a' p2 M& m
                i++;' r! D8 D$ z& r" ]
                //if(i >= 4096)3 i* o! S! w% _9 [
                //    break;
1 j! ~" [% |; c  |
5 M0 D2 n5 \/ {7 A' A            }" l) s" `. I0 n0 F+ ^- c
            UARTPuts("\n",-2);, U8 T, ]: I" @
        }2 V! p0 d8 Z8 `3 g. |8 V! u
    }! t+ S- |2 F5 \8 }0 \; G6 ]

/ _  X, a- V5 b% C( O& U$ a}
4 D$ t  A' j8 E

, P: N3 b3 c- ]
! `* b5 b. Q3 c" `' y4 L0 i
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" R2 f& [1 m% W' E& x3 ?, r
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" k6 J* Z% k! g! J% b  _




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