嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 I  R8 F% c6 @6 y; V( R
Void UPP_TASK(Void)% V% ~% F! D6 E3 f
{0 u8 z- X" E# X4 o2 k1 r

/ H2 Y& F: C# ~, m$ E$ Y    int i,j,k,target_int_count=2;
7 r  K# R6 c8 h$ d7 \    char ch[2];
% N$ o2 x% `: w: i8 c1 q
) b4 k5 [0 Q# y, P9 }
, s5 U) v9 h) W4 [
0 q; u& @! _& R/ s2 h9 L( n    upp_interrupt_count  = 0;  B' W* n1 B4 h" K3 W0 R
    upp_error_count = 0;
2 b  A! a( _, {/ u- A. O) I# b) @
. \( v! n: u" Z# y. A8 R+ H    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. a! W% B1 ], z. p  G    // Initialize data buffers8 ?; }- X& p" `, |. J( ^' i# G1 W
    for (i = 0; i < upp_frame_size; i++)& k2 j( H+ d/ B$ D4 {0 h# F
    {
1 r% s( p8 T# x' a7 z# `       upp_buffer_b =i;
, j. I4 h7 q, p. J3 f       upp_buffer_a = 0xDEAD;1 ^2 b# `" [  P2 v7 P
    }: p+ A, Y2 y) G. X) ?) l
& }# S; n3 r/ b
    //for(i=0;i<1024;i++)
% `8 @. \7 Z9 p, f1 [+ }0 s% S    //    temp=0;7 J4 N4 \4 S! A1 B0 }8 j

5 R4 X+ V, i% S1 n& B6 @: p% k    //UPPReset();
, x7 f: P3 \8 f    /*启动UPP DMA传输*/) e9 R9 S7 I) Z+ J" s* W1 P- V  M- H2 |
    UARTPuts("upp_prog_dma_i\n",-2);7 s0 F+ }" _" V6 e
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ o6 v  R0 ]$ l9 k8 @0 w    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 X9 ]. ?( F0 }7 i
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ ?0 N! ~) F2 {  D, p' @0 f( A1 O
' t* m/ E# A; a' p; A
    UARTPuts("upp_prog_dma_i\n",-2);$ X8 G- {" j* t, {
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;3 f9 S0 ^+ N6 ]/ J: a" G
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ X% D7 [  P( D: a5 A5 M
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) q# L6 [+ `* v8 G3 W; i- ]8 I' |) {

& v( L1 f: ?$ F  v5 t7 {    /*等待UPP传输完毕*/
& q7 O) v, _  w! W% m    //i=0;- J+ |6 }" X) X- i+ ^  G6 i5 ~
    //j=0;% Q5 B# V  Z" Z# B+ ?" j
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)0 K: I+ [* d, c2 k+ h* o: \- Q, ?
    {7 l0 k  y8 z3 ?7 P0 b
        /*  测试UPP传输的同时操作普通DDR数据
5 X( g0 L- _3 q! I8 W        temp=i;
+ w3 P, I; Q: }. z# |7 |5 b! M7 i        i++;
4 R: i8 X2 D: ^- L4 R        if(i==1024)
' ?. s( u; |9 o( y& `# f        {; J" l' {1 I1 o' ]
            i=0;( ]# E) }3 {3 R$ {% p6 }4 e# O7 z6 n
            j++;
4 f) Z5 M1 f+ {+ b6 L* l1 G; q        }9 w, v  r1 n6 b& o
        */
. k, u* K. W& M7 q  M
, ~0 x" L  @5 i8 R       asm(" nop");
2 t3 n" l$ l2 F1 [' t6 n+ T4 Y( H. C* \" _" r) Y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, P) G1 a7 c( _. [. U
    }) z$ o7 i1 D( W+ Z8 O7 F# m2 H; T; a. T
+ E0 E. y5 r8 h% @7 ~
    /*检查UPP传输的数据是否正确 (loopback modes only)*/) u; D! H5 R4 ^1 A( U" {' \
    //UARTprintf( "i=%d\n",i);& x+ ^) l+ X" E& \# S
    //UARTprintf( "j=%d\n",j);9 ?" f+ S9 K3 W$ C8 \3 Y  ~
    UARTPuts("Data mismatch in buffers.\n",-2);
+ E7 S# X7 y, p1 ~9 k    if (upp_interrupt_count == 2 && upp_error_count == 0)  G6 [. }+ s) h5 w/ D1 W1 d
    {! i7 f, _8 R/ f, \+ B
        for (i = 0; i<upp_frame_size; i++)
0 M) @/ S7 f: O        {* ^3 n" d- g4 M5 b, U
            if (upp_buffer_a != upp_buffer_b)8 O- Z& e7 l+ C& n
            {- R  l" N1 _( o# _" l4 _8 X
                upp_error_count++;2 c1 U. e6 J" U& {" c' i1 y: O
            }+ ~- |- ]: J$ N+ s: F
        }, o  |& |: d2 v  r. X
    }
: H5 ^3 j, o& Z( G" R! y6 V2 o8 o: e' ~" h; l- ~" S: @
    /* 报告通信结果*/& J: g1 j9 p% q/ M
    if(upp_error_count != 0)
) r8 C1 ~- t9 z5 G# n# [* G        UARTprintf( "upp_error_count=%d\n",upp_error_count);, F- ~* L  b* ]
    else
/ R2 d  v3 [. p0 c+ b5 p. l9 a7 O        UARTPuts("uPP transfers complete!\n",-2);
3 F' R5 {% C/ B
. {( \2 g5 g$ ~8 L: y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 A# _$ Y& ~" ~' a" W, {0 m& ?: L# t
    UARTGets(ch,2);
" M& j/ U( @7 o# A- i6 _5 N    UARTPuts("\n", -2);; b8 t& B2 x2 l! T' r
! O# e' l/ K% F1 W: v% {: U
    if(ch[0] == 'y')3 E: o/ P0 Q% s) ?6 W/ ~( z
    {9 }, x$ Q6 b% o% f% G; w0 G
        /*打印全部读到的数据*/
, k5 ^% h. q( Z  J        for(i=0; i<upp_frame_size; )9 x$ W+ w4 A' b) E- z: S
        {
( o. T$ A! N. \2 L9 y+ ?            for(j=0; j<5; j++)
/ }) C1 O, y( p2 `+ y/ a7 b) R            {8 U+ F& T( L$ {5 D9 |
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);9 \3 q/ L4 N+ x) Q/ o: i
                i++;8 D4 }& ^; Y$ V0 m" H7 ^8 Q
                //if(i >= 4096)
) [8 G! M& E9 B: T0 H  z                //    break;4 B# X, M2 `9 u* A% B, a5 V/ q
, z7 e' ?8 v/ r
            }7 P6 R% `* G( a4 J4 r
            UARTPuts("\n",-2);
1 P$ E" F* l$ n: i% u+ m9 E        }( f3 z6 @% ]1 h1 l; V+ s+ C
    }
( ~" q+ l0 C0 ~! }9 ^2 W' n% a; _8 Q' w; Q# W" e
}

6 G  s# S3 X( j$ z+ q" C

0 [+ v$ Z( C5 f# m; y7 v( E9 W4 }/ r- q' |5 D; Q: w

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 b$ D% ?: _( z" E/ U$ T
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。. Q$ x( O4 A3 I





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