嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 \! |1 ~7 S( }# F% H1 Y8 `
Void UPP_TASK(Void)  P4 |1 T! [. }+ a0 P( ]3 {" G
{$ z6 ^) s" f6 p  E8 R! c) F7 A/ b

% ^  v3 W* j  T+ w    int i,j,k,target_int_count=2;. @0 x0 T' S' c. N
    char ch[2];
6 ^" W; z7 {* ?
% r. k% a: l  M0 ?0 A& ^
& X/ ?7 p* |* G% |$ c8 z
* F5 j! O  T) u    upp_interrupt_count  = 0;
! C0 C; q0 B0 i  N: y2 S    upp_error_count = 0;3 n% |8 x9 [. K0 G" O7 y) c

" d8 }1 c& [) j) }' D9 S, r4 |    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: p+ j0 i1 N1 Q4 {: Q( F    // Initialize data buffers
5 q2 q' V. e, I+ g; d    for (i = 0; i < upp_frame_size; i++)
( C" H( _% G- x2 D* \  c; U* z5 ~( E    {
% W. A: t/ H; l: W# L* y9 P       upp_buffer_b =i;) q5 ^7 ]+ q& t0 Z4 t# ^9 s; k; a8 J
       upp_buffer_a = 0xDEAD;3 p" ]! j7 f" t8 \' N' C+ i
    }
" t8 _4 ^7 S& q. O3 \! d$ P, y/ H- v  z2 O  Y
    //for(i=0;i<1024;i++)
! _5 [0 m* `; [/ Y( \4 {    //    temp=0;
& o' @) ?3 q. \% Q- m
0 Z3 }* E% r4 E) R2 m9 i    //UPPReset();
" A0 Y0 G5 e9 x) L7 z# c9 x- k7 x    /*启动UPP DMA传输*/
8 k# [8 [. G4 y( ?( I    UARTPuts("upp_prog_dma_i\n",-2);
% q5 g& @+ h* ]$ k    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' t+ |& B: u. j) O: `: ~/ ^: _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* i6 C+ c- ~. j8 P; ]7 [% z; ?
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. H4 t" R5 ?- y; q" Q6 A7 F3 x- H# s+ k0 ~; e8 w
    UARTPuts("upp_prog_dma_i\n",-2);
3 q/ a" h7 L3 U2 w0 Q    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, @" l% [! ]$ V3 l" m  J- i# h
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% `- k$ ^* v( ~$ l2 P2 w3 `& C    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 A  p) c/ `6 R1 t2 L. [/ c
4 f9 z, T/ E/ m9 G# {
    /*等待UPP传输完毕*/8 ]6 \" N4 T2 F7 d
    //i=0;
4 U- d1 `2 q/ [% S    //j=0;
! D+ X/ f% L: E% a    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 A- ?& G  F' a( M    {
; k# T0 }* C: s2 ]        /*  测试UPP传输的同时操作普通DDR数据/ m- N# x+ @& ]3 i  c
        temp=i;
7 n- L  {; G1 I        i++;
1 B. j5 R, Z, n" }: b* E% e        if(i==1024)1 J( ~( S+ w" ^- c
        {$ C2 ]$ m/ x; v+ V
            i=0;
5 R' T. v& E% j0 h$ I* j: R            j++;$ g" o0 ?' r- M
        }6 r; P* D. i! \9 D
        */
7 R  P1 [2 \+ H0 K) w: Y" ^9 C* a: Q, _% U( i$ `  b/ Y2 r0 R
       asm(" nop");
: I1 }' `5 M- s: o9 H) u: T
2 j1 Y( U8 [- d( i       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- b: N# X" M6 P- d1 h5 q
    }% u/ F0 f9 n+ }  X& K* t/ h
; D* M* {. S0 Y& X) d- R
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( O# }7 Q: k! Q# Z# w* r% j9 a% e( \+ U
    //UARTprintf( "i=%d\n",i);
! N' r! P6 `9 k7 a+ M9 h+ E* z    //UARTprintf( "j=%d\n",j);
3 z7 i" |5 Z- I5 a    UARTPuts("Data mismatch in buffers.\n",-2);- \0 ^4 y1 W: H
    if (upp_interrupt_count == 2 && upp_error_count == 0); l+ E; L" T5 I, Y5 f
    {& s+ R9 B% C: _+ G' g/ \
        for (i = 0; i<upp_frame_size; i++)
$ A+ B( @) c: L! a        {2 b8 |' l1 p# M6 ~) r; L' T5 u
            if (upp_buffer_a != upp_buffer_b)
+ b7 Q( r/ b% @; P, }            {
- W0 n4 E6 \$ N4 s                upp_error_count++;! K. k' z" o1 Y/ u
            }, ^3 a: t8 e9 _; w' Z0 G
        }! Q! L. s  f. T& I2 Z: F3 ]
    }
: Z& Y  f( I& p6 h
' j  S1 H7 `! U7 r    /* 报告通信结果*/
% u7 _( s1 B) f    if(upp_error_count != 0)( `* x0 U, e. l8 n& T; D# c. e
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! h' m2 ?8 n, z+ R; x* o  L    else1 |+ A: h) ], `9 b- `
        UARTPuts("uPP transfers complete!\n",-2);! f* H% x  d, W' u

- N, K: Q% i7 e; c. L* y# w3 O/ L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" `# W. t- j  h2 b    UARTGets(ch,2);7 |' r1 d' c4 y+ ]
    UARTPuts("\n", -2);
( }9 A# ~' [; C3 D" J) w, |" o, C+ d, w2 F: _9 Q5 i
    if(ch[0] == 'y')! \# J3 c% `  H
    {
4 \, f2 E1 e1 E5 l( Y        /*打印全部读到的数据*/; n3 h0 w/ X7 X0 b$ m1 f! ?
        for(i=0; i<upp_frame_size; )
' f& d3 p6 R% B: `( `4 C        {
, [$ u0 O" n; `- u7 o; V            for(j=0; j<5; j++)" P  R9 h+ t9 u1 s* X) ]0 N' @5 R! n+ T
            {
1 V) m  H8 Q% G                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 ]( `) J* l* O) y
                i++;, J' q# w9 o9 u1 o
                //if(i >= 4096)
$ A7 C% W: g3 M& F" i                //    break;5 f) H+ |4 v3 V9 |; i- h

  M$ L! v, r' n  q1 a* O  [% E+ V            }
0 B: ^7 A8 G7 x% b" X            UARTPuts("\n",-2);
. B; `6 O0 ?; G5 c' [        }
5 F$ @8 _; h8 B/ r$ ]    }
' B5 S# N* B5 x9 N/ t& B
" @7 B6 h! T! j}
4 z  V# y' E2 m$ C

+ Q8 ~7 O* d( H: K
" d& k8 U% l( K. y; h: R
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# g" }# c, I8 V. @

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  l' E. T7 F  X) D




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