嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. h7 f" A4 B9 y$ s$ c# E8 Y2 c
Void UPP_TASK(Void)
5 I  l; o5 `# B0 D& {, N0 c{  Q4 M4 A3 e7 i* }

% `% `* X. S( s2 C- R4 m' T3 y    int i,j,k,target_int_count=2;
3 L( }* M  P' s9 V    char ch[2];
6 ^: D0 N% G5 M' H
: z& x* g+ f' T9 `7 D0 k. ]3 Z- a: \! i: d

' }& N) U# }2 M; k4 \! g    upp_interrupt_count  = 0;4 a" B6 }6 `! k0 ?, n& [6 E; f
    upp_error_count = 0;
5 Z. L7 H( d5 j# j3 t- V' M  {' _; o+ p
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
, Z/ v! e1 `" Q) M! M# H( A1 m    // Initialize data buffers  v8 w1 j0 |1 |
    for (i = 0; i < upp_frame_size; i++)
, i( R; H8 _" |" s3 S% O5 z    {5 G. o1 o3 Q) i" [6 x* ^8 Y# i3 t  [
       upp_buffer_b =i;
0 [$ R/ Z0 U2 s       upp_buffer_a = 0xDEAD;, o- I1 d! O4 P) ]! p5 E7 H" p
    }
+ D3 w# ^: l) ], H1 {
$ y9 L) a4 `/ B$ m! i    //for(i=0;i<1024;i++)
+ d7 C; W9 f( R! C4 c7 k$ \  G    //    temp=0;) D4 L  C- G4 m. w% l
  K1 W# w! [, I* d& m( M
    //UPPReset();) I( l% K! ?* y( g- Y
    /*启动UPP DMA传输*/+ z: B: I* N# Y( K0 e$ ^* r
    UARTPuts("upp_prog_dma_i\n",-2);! N% A) O$ H, S1 J5 j) s
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' k+ F7 O. Z1 ]% h6 y, I3 H+ t# \    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 B" K  @" f- z  b' u8 [: s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; r5 k4 d) b# f$ n- _. w
; p, K2 u9 a' U, X. v+ c* l% M. s' w4 U
    UARTPuts("upp_prog_dma_i\n",-2);
$ f2 M7 g% |% o& \; E# \    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; R" C+ F* ]3 L; S
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 Z3 q! T  f2 H3 {7 [4 D3 M    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, Y( O7 _, _/ [9 {! I3 k- @4 h& Z) o" g1 u8 U. b+ r% ~
    /*等待UPP传输完毕*/0 k+ x4 J$ Z8 f! U* u
    //i=0;
1 i, @, ?: Y" T- e6 P# g8 r" y    //j=0;
8 C8 r7 d; Z/ C1 M4 U    while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 `; t( @6 `' O7 R$ V0 E
    {
# l) y8 F+ Z$ N" j        /*  测试UPP传输的同时操作普通DDR数据
; s2 t5 R) M0 M        temp=i;
) G. E* I9 }1 H4 h- Z) j0 R5 P        i++;( i. O5 A( C  n4 v2 x
        if(i==1024)5 \+ q4 M/ j2 w9 E; O
        {
7 @" W9 q  i# V1 ^6 n! z  f" T4 Q            i=0;
6 }; \# T' P3 E% Z3 F            j++;
6 R0 x3 J* c1 x( T* d: t0 ?* V0 k        }
9 y$ a- j/ |, ~3 I        */
+ x. ?; D& |* w2 R) D
6 ~) D1 X" X: p. a3 p$ y+ X) x       asm(" nop");
! N! r5 y- c5 f9 X& }
# Z: j& O3 p1 S1 ~% I       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% c9 J7 V% l$ J) f
    }  i" H  u  r8 L$ F

- e, B! ?' [/ c' @+ H1 s, X7 Z    /*检查UPP传输的数据是否正确 (loopback modes only)*/# C4 Q; Q: x7 j1 z8 @- ~
    //UARTprintf( "i=%d\n",i);; p) T- O1 Z; @* Z* i% \7 W: \
    //UARTprintf( "j=%d\n",j);8 v& e" R/ l& n1 B! a% Y5 k
    UARTPuts("Data mismatch in buffers.\n",-2);
& J9 ]3 S9 F1 e! n3 @    if (upp_interrupt_count == 2 && upp_error_count == 0)  f( ~/ p& G& u: }& u
    {
6 s& M7 h- H+ [$ e! [6 u5 O7 z        for (i = 0; i<upp_frame_size; i++). B2 F9 W' Z9 s( @2 h* E' \
        {
8 C5 D2 J. T; ]# J            if (upp_buffer_a != upp_buffer_b)+ C" g8 s% b( M3 |- M
            {! P3 w# p# W. z1 c/ L" H: N
                upp_error_count++;
! _. |) C$ t4 Z0 L            }
2 \* g" P$ g$ Z* z# M4 _9 V9 L; @        }: p% _9 z$ I# l, Q+ E4 e
    }
. t0 k" K: d0 {0 R. W; E0 B9 h9 j( ]4 b+ ]
    /* 报告通信结果*/
) a$ T5 E: K  w5 W2 X$ h    if(upp_error_count != 0)
, b1 x! x- k' B" b" I, D5 W        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% N1 s  a# b% _6 I, ?/ L4 H    else
$ Y( v1 r* B6 f7 B2 L( |        UARTPuts("uPP transfers complete!\n",-2);
& U. f3 s- [( }$ i- I
: b* S1 x! F( S( N& [    UARTPuts("Do you want to print all the data?(y/n)   ",-2);( L! A! x1 L7 T1 o) F
    UARTGets(ch,2);
2 b0 v* x* H- q    UARTPuts("\n", -2);6 H, K! P) ]) V. I& W$ V( n6 f/ z
- {" l2 a$ r7 Q4 k: {
    if(ch[0] == 'y')
. F- J4 x7 ~- z2 {    {
; t( K& s5 v# r& ?3 X& l        /*打印全部读到的数据*/
, `! r' w1 }( X) ~5 L( C        for(i=0; i<upp_frame_size; )9 _, S( F' ]1 |7 B0 _
        {+ U8 {2 E. j5 ]5 ^
            for(j=0; j<5; j++)( p, @- u5 N: F7 O4 }
            {
9 T9 P) h9 K' q3 f8 [                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, z( S" {) R6 x# b                i++;9 s+ ?7 i* X( N" S; A
                //if(i >= 4096)- N  d' U% Q( c
                //    break;" L7 K' F' [4 E# ]7 i
- T5 X& [( K4 \* |
            }
1 L) K8 P; a0 Q* B& `* ]            UARTPuts("\n",-2);
, Q' R! H$ e( i9 F1 y4 v4 a        }! L- C0 q0 r$ ?, z; p
    }
$ q( A2 p7 I+ q3 c/ c' ~/ F( y  x4 b8 d8 I) I) C3 v
}
7 ]: D  N: S2 d+ ~; {0 y( S
3 J2 i2 X; T# _) a

9 e4 F( H' _# r' _) r$ L: f$ p
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( D; L7 N) c+ `) g5 b% L
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 K" H8 a6 p/ ^+ G5 M$ X7 J





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