嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?+ r5 f/ @& q6 D7 x
Void UPP_TASK(Void)
+ P5 D& ^! u& y) K* l{
' @) B* j! p2 o6 [# Q( s% m9 E8 q" Q. V0 k8 i, c  L
    int i,j,k,target_int_count=2;
$ N1 b' m; m2 \1 S) U    char ch[2];5 x. u6 O2 \' _+ X. J

$ }/ V  }! A" t2 A2 w) y5 I! a3 G- t8 _: H# b6 x

" p. q- G8 s, A& |( ~5 Q, p% E    upp_interrupt_count  = 0;) F2 t! ~$ V3 Y! [; A
    upp_error_count = 0;
/ Q) @4 t  r  K% S$ h* V( O! d$ ?3 h& }  L, V/ U' J$ f+ P
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
' F9 u' i1 m4 {  ?1 I" A! Y! E    // Initialize data buffers
: i5 ]9 s# ^' M5 V    for (i = 0; i < upp_frame_size; i++)  c) [( p$ B0 L' L2 y$ F; t
    {- Z# g" C' s5 D
       upp_buffer_b =i;  v$ B+ c' t' [6 i
       upp_buffer_a = 0xDEAD;
" m  C8 I3 V- V1 ?0 s- E( k& `    }; K0 V" ]0 P4 z* U2 n

$ j3 Q# v$ O: w- B! A4 o    //for(i=0;i<1024;i++)
1 f/ S+ k* Z( G    //    temp=0;$ Z) r4 Y3 @6 Z, ^

  [$ P! N' ], b, n7 D9 \" V! z, l' ~    //UPPReset();
4 Q# {6 {& `( S    /*启动UPP DMA传输*/7 o; T. [! |( K: \7 [* ?
    UARTPuts("upp_prog_dma_i\n",-2);( @+ ^% L7 z7 ?3 ?" O9 }5 J8 Q& V9 J
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" X7 |; {9 v1 B& l' ~
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 C. ~& {( p6 J! b
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) r* A1 N  j/ ^2 e- o' J3 @4 l4 [  o3 j
    UARTPuts("upp_prog_dma_i\n",-2);. G( _& i1 v8 @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 Q) Q6 q9 O4 _8 M" |    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 W; K( U3 G6 z    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 W6 x* x5 o" ^5 [/ t3 X: Z+ B7 O# ]: @, n. a: R, O9 E
    /*等待UPP传输完毕*/% b- B( h; C( I9 i
    //i=0;" v4 Z& _) ?( {8 \! d- O
    //j=0;+ F$ I) Y. U) Y- B1 N- M' @
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 ~3 k4 l5 {& y- R" R
    {2 G3 t. r( I% @( c7 @7 l! m9 c2 M
        /*  测试UPP传输的同时操作普通DDR数据
4 d* e! A* [9 ^  E        temp=i;) Y) t& a5 g$ ^( u$ E
        i++;
& s$ m* z- ]  i+ \4 z        if(i==1024)( l; {( |- F7 t
        {' v0 O. J# _4 M0 W. l
            i=0;
7 {0 P. ~% T4 \4 Z            j++;
5 e9 c. Q# Y+ z3 H* m5 u& }        }& Y  ~5 x, ^+ v( G& e+ t2 P
        */) [2 h. M- O; T4 K0 u
2 l3 B" v% Z) J6 a6 @! u
       asm(" nop");, v5 `9 C. f- \' p7 p3 U
+ Q; }( m* B. ^7 n& }7 P" F$ |
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& ?) W$ S; ~; n: Z/ N* O* h2 [1 A
    }  C8 J1 J/ J% D% C, }3 P) i8 w) ]! u( J) |

6 t8 S1 ]' T) K5 x/ D2 g, J    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ D* f! U5 X; a" x* r  G, e0 v    //UARTprintf( "i=%d\n",i);
8 {, }  P  l9 `! @6 n    //UARTprintf( "j=%d\n",j);- w  J3 Z; u% Y/ g9 x- W- X+ ?
    UARTPuts("Data mismatch in buffers.\n",-2);
: ^; P1 D4 ^# ^2 x    if (upp_interrupt_count == 2 && upp_error_count == 0)! B$ R5 B$ T# _9 _
    {0 y6 U! ~$ d5 J
        for (i = 0; i<upp_frame_size; i++)
* I' n# l% D1 w5 ?        {
( P0 j3 A! h% ~/ J! l( L            if (upp_buffer_a != upp_buffer_b)1 j  l( h, ^! }# L
            {) a' G$ G8 Y% k! c# G9 k: M; X' k
                upp_error_count++;
# C) r! @  D" \8 b            }
( T! E% s5 H) Z3 ~2 @  ^4 f( n        }
( [9 p7 m/ V# J  t% y. v) ?3 q    }
* o6 w5 a: N; ~# x
$ d- k. o* g) Z/ c    /* 报告通信结果*/
9 h% W, B9 f( b6 O7 u    if(upp_error_count != 0)7 s6 {& L7 a6 Z" [5 Z
        UARTprintf( "upp_error_count=%d\n",upp_error_count);: q, a8 d. u. d; F8 W- ^  N8 m
    else+ {, g4 h  T' L
        UARTPuts("uPP transfers complete!\n",-2);
  @  \/ e5 s5 `) {* Y3 n) B* V' o8 y0 T# q$ p
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# z! H5 I2 R. _5 C8 l: c4 Z: B  B    UARTGets(ch,2);
. Q2 N& k# V% x1 I. ?" X6 B    UARTPuts("\n", -2);
" o; K- B4 U5 P- D7 g8 M* |  e  y% Q& B! ?1 c0 i( _
    if(ch[0] == 'y')# d7 [7 S% G' e/ H, A
    {. A& g" u5 H4 X
        /*打印全部读到的数据*/
: G. A, Y' p) ]        for(i=0; i<upp_frame_size; )
( Y8 _4 i* o6 p" f        {; {. E6 Z9 ^9 N1 C  W
            for(j=0; j<5; j++)
9 q# C0 u) z* Q            {
( S) L# R# \( J% R( c                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);4 L' F8 t, J$ F
                i++;  T. v4 g  R& u6 E  L
                //if(i >= 4096)
( |" B" K% Y: v; T, I# H$ @                //    break;
9 s3 g# |. d2 H. H2 f7 e' K( B3 l. H0 t0 p# F& m0 F
            }
) h) T% w7 k8 O9 ]: L. X: I            UARTPuts("\n",-2);& v% M3 P0 U( a, p4 h+ ?  G& @" k
        }, g, r$ B) V. \. M
    }
0 b5 z, @6 [$ C5 Z+ c, E- W' l- P3 o4 \- ^/ I/ E
}
6 S- _& ]+ \5 m7 I- t. A
6 T/ C8 x. U) s/ ]/ c) V* G
+ l4 W0 Y  `( Z2 M8 I* w) {

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 w* g% ]- ~: [* W- U" `# l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, h: u3 b. ]7 ]6 q9 I6 J




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