嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( t( h" \% m0 h
Void UPP_TASK(Void)
/ o1 B) q$ `: @" A0 ~1 v+ i6 }% ^{- ~( a1 U' P% Q+ X8 g0 y' b) ~

; _- q8 \) _* K' ]2 Q; [    int i,j,k,target_int_count=2;
0 s' y( U, H* l/ u; A; }6 s    char ch[2];  ?- M5 a0 R+ V" Z( }
' g! `) \2 k% c  Y# T
, P8 r: E- a0 k' I1 d. l
* {9 T+ p$ w9 j& q: H; V' u
    upp_interrupt_count  = 0;
5 `9 z' [0 y& X4 r* N$ m- p    upp_error_count = 0;7 b4 _( y* @- O! M% x

3 F) d9 Y$ S/ Q. W8 I$ S    UARTPuts("\tResetting uPP buffers...\r\n",-2);' R# C& O' P9 z& o( A  K4 t
    // Initialize data buffers
6 h' j- }2 V: d    for (i = 0; i < upp_frame_size; i++)
9 c- \2 _1 h- `9 c/ O0 ]- C    {- o9 s1 y, d! @! ^+ |9 X
       upp_buffer_b =i;
: V9 P% [1 r, Y       upp_buffer_a = 0xDEAD;0 e( r3 s: S6 \/ M$ y) a
    }& b0 E8 o# e) T: |4 b% L
$ n0 @8 H" Z9 v5 e8 H
    //for(i=0;i<1024;i++), ?4 c( f& P* @* p7 w
    //    temp=0;
6 F' @) N/ W% s0 ], M+ Z. Q6 Y4 R' ~& d2 d8 @% G$ t
    //UPPReset();! f0 d3 W. v) ~" O/ |( q9 O
    /*启动UPP DMA传输*/
8 v) K5 @! ~' D2 p. G    UARTPuts("upp_prog_dma_i\n",-2);
. Y7 V  e' N) D' b    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! H! g! S) @& L" b    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. [4 i/ D3 ^0 V6 \& I/ v$ v    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' d: X0 X- N/ L! r& {  V9 I$ s  I3 s6 |/ c: L+ d
    UARTPuts("upp_prog_dma_i\n",-2);- v2 o, P' a" M/ T* A
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 r% e" E& I9 Y. v7 n" T    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 N% p( c5 C7 ]- z' Y: [& e: o    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" r; X6 G) e, \, G. ~

9 Q  y* P2 E+ y6 L2 w/ Z3 Z    /*等待UPP传输完毕*/
5 U1 X+ R1 l5 b- C    //i=0;
2 [* I4 c4 N% b9 \+ L0 i# R0 _    //j=0;: g. Q) u* k+ V/ d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* q( r+ L5 ~( e$ Q
    {5 q  `% h- E/ F5 p% X. D+ P) [: d. F
        /*  测试UPP传输的同时操作普通DDR数据4 ~  y, ~) {4 j( P% n+ u7 P; F
        temp=i;7 }( h: H% h: a1 A# a4 @8 y
        i++;; l2 f; l+ {% b' o2 g1 U/ @) {
        if(i==1024)! z5 c2 V1 T% C; [7 E" v6 {+ X
        {
9 f+ I) \# r3 y: R) n" i  q3 n0 Q5 d$ N            i=0;+ Q, k( Y# W8 G+ g
            j++;
* @$ I6 f- e- K* a' T: V- b4 r# P        }' o- w8 A( U% W2 ?4 T
        */& O1 A4 l) a9 W
4 h+ C) Z2 r. B. W1 Y" |. V9 I2 c
       asm(" nop");
* N% s6 N( s8 [$ C
8 S. l- o4 }2 U: R- m5 U       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& b6 M; B% m% u% L) h$ u
    }
$ l! Q- ?+ x. |1 X  @2 p" @
0 m  N( G5 G) C( o1 R7 }    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) q3 j- d+ B: v* I( A: Y8 p4 y    //UARTprintf( "i=%d\n",i);5 c$ B& @; \$ A- U, l
    //UARTprintf( "j=%d\n",j);% Q& L$ P3 `9 I* B: n6 n
    UARTPuts("Data mismatch in buffers.\n",-2);+ x+ n2 {; c) }% ~* q, F
    if (upp_interrupt_count == 2 && upp_error_count == 0)
. `9 s- e( w+ A2 f+ ]* w- s6 G    {
/ E4 q: }( l: D: u4 n% u# F        for (i = 0; i<upp_frame_size; i++)! K6 W% p5 `, G3 L" r5 Y
        {4 O& w4 D" m! F% I! D
            if (upp_buffer_a != upp_buffer_b)
1 C+ j- R0 I) B            {
. G1 u' P3 x% b                upp_error_count++;2 j# y1 F% y0 O
            }
1 F0 i! [" ^( ~6 E        }9 D; u% ?! {7 v$ f- P
    }
* b) c% J, T6 I$ A9 h0 V( Z4 Y1 ]" T
    /* 报告通信结果*/
( Y1 z6 F( x) ^! f9 e    if(upp_error_count != 0)4 G: e& x) L! y
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ f+ w- j, J4 f7 [  P5 M$ p    else0 B2 o  p0 L9 V5 O& N9 g. \
        UARTPuts("uPP transfers complete!\n",-2);4 e$ ^- a9 B# u& q' k" ^
7 e3 O$ E; @( k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 G8 M' l# R+ H( j5 |    UARTGets(ch,2);
4 }6 |5 E  Y5 E& j0 e$ T    UARTPuts("\n", -2);
. g4 j" y, H2 w" [4 G! S0 E) q2 a0 r$ c* L& @; e7 J& [
    if(ch[0] == 'y')4 }5 O) F3 L- E) M  r: V. V! O8 a
    {! Q% x7 ^" M- g" I
        /*打印全部读到的数据*/
6 C3 j0 g4 ?: M# i        for(i=0; i<upp_frame_size; )
$ W9 h) s8 q4 y4 ^' g& e        {
3 V) x4 D) @# g. e            for(j=0; j<5; j++)+ H* A( W4 ?) p  y2 K1 `1 h
            {2 ~8 z' ]& `5 f3 ]* o: ^1 j+ K
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 P% I4 E! r% C& ]' W                i++;
1 \* z( H- Q( R! d5 k' m8 S* g% ~                //if(i >= 4096)* l; w- l- E4 v1 m5 Z, t
                //    break;- S& ?# ?* [  k4 j  |1 q
" A9 O* J% U: u9 ~$ L- S3 g
            }& c: L6 ?8 |+ ]* c) x$ T
            UARTPuts("\n",-2);* z- S/ z3 \, `; _1 N+ h
        }$ L/ d1 J* I3 J' n1 o
    }
0 I/ W& Z( `' @5 n3 h" T) h% I7 n# l" L' N; O* |7 U, F+ w1 I
}

1 H- [; X; N4 c7 b8 z

6 h& |! r: t0 B# ]' p. q% R( H4 j$ @& R* \' U- y& ]

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。- s8 E& x2 q9 a! T4 j! k- M5 F; s

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) ]  B/ e  `$ ?& d$ D8 o' R




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