嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( y& _+ [6 C; x8 l/ Z9 S9 y
Void UPP_TASK(Void)
% ~, o6 \( s; e" y5 @3 }{
' U& K) X+ _) C7 c" V2 N/ R2 l7 U, s; y$ e0 A: B2 x
    int i,j,k,target_int_count=2;0 x' a5 z# p; a5 {. w/ ], f3 `8 r
    char ch[2];- }3 n- D( H2 a) |3 }  O4 o

/ d# p( Y4 X  r# c. D# X, ?
, s  ?* G2 T3 z: w; U) L3 l' \- r& o" B
    upp_interrupt_count  = 0;
; r2 n  R3 n5 _1 F0 \. t8 L    upp_error_count = 0;" y* j$ p) F0 I4 w( z5 T

1 J% _. h3 _) o- {0 w    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ Z+ h* n9 T2 ~
    // Initialize data buffers
) ~6 E( r$ d; b/ f    for (i = 0; i < upp_frame_size; i++)
: ~: P/ x0 j& n6 ^    {* _6 K% b( `: h* F) U
       upp_buffer_b =i;4 v* l. l+ {" E: T" i, z2 v5 t, @
       upp_buffer_a = 0xDEAD;5 u( H4 E: B& [1 B5 {2 E+ N
    }5 |$ i& d' L' Z8 P+ M, p

1 p4 E1 _: Y1 R. C) F! Y' C    //for(i=0;i<1024;i++)1 _; o" h" B# J" \% A
    //    temp=0;; ^' ~# `: h7 p3 w6 M
* I9 \! O6 ]8 w5 M# J0 C3 e0 l6 V  A
    //UPPReset();9 O* T$ M0 E' Q' ]# z
    /*启动UPP DMA传输*/
% ?4 ~- _3 H4 Q2 y% R6 j( Q7 S    UARTPuts("upp_prog_dma_i\n",-2);
' ]/ }1 {! V6 A    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& x  l) B4 M. f& _
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& G$ A2 S: V) A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 b) f9 C' I: w% G  r) X) f
& p" ?+ b/ M! B. z( T
    UARTPuts("upp_prog_dma_i\n",-2);
+ ?: \3 c& X* \  p- \    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 j2 M3 z2 |* a4 t( s2 [0 r# s: c
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' ]" }( y' {/ Y4 A: V    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, }8 V: ~# p& q3 J9 {3 P
; A* I6 F# _1 a( F+ h% x/ E    /*等待UPP传输完毕*/
- u( z- D7 z! \    //i=0;
8 _8 ~* I+ u- ~7 T' S+ S    //j=0;: H1 K$ p" R6 E5 X' T
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* s( H/ C6 M+ ~( Q! I    {
$ O  q: t' o' D; v+ n        /*  测试UPP传输的同时操作普通DDR数据2 O* F& u5 I! t4 @9 l. R
        temp=i;
( Z1 p$ D+ r  a! L        i++;  ^1 Y  A! \( z$ A. D4 [. h9 k
        if(i==1024)
9 l! Q- P- B$ V2 ?- T5 ]        {& g4 A! c5 x/ P6 H0 z3 K
            i=0;) h( u/ _5 x4 }
            j++;( Q  [, H# `; q7 V8 H. @2 h# |5 i
        }
# `/ b. S+ _' F7 v0 G        */0 {- k5 w0 Z: a5 I' z! B/ t- W

1 B9 ~* u/ T& O/ t. d       asm(" nop");. p# N" R- s$ ]) |( N+ h
, s4 p- G6 S. h5 |2 G0 ?3 G# {7 b
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);2 ]! U8 r6 T# O0 W; L! N9 b7 f
    }6 ]: T" D1 n$ h6 U6 p

1 {5 L2 S+ G; s- d; L! d    /*检查UPP传输的数据是否正确 (loopback modes only)*/- S6 H* l8 N# M* n) M
    //UARTprintf( "i=%d\n",i);7 t2 I4 u$ d2 A' [1 G" R7 N
    //UARTprintf( "j=%d\n",j);
, q& g) |" t" |4 f3 o    UARTPuts("Data mismatch in buffers.\n",-2);( f; \5 l1 B+ |9 D
    if (upp_interrupt_count == 2 && upp_error_count == 0)8 I$ j4 T: K/ {1 D3 M9 k2 p
    {
0 H6 ^! t* m6 C0 O7 G! l        for (i = 0; i<upp_frame_size; i++)
5 o$ y: e/ B& U0 c, N% }        {
( H5 {% G/ V, M) [2 I& N/ P. B            if (upp_buffer_a != upp_buffer_b)$ L+ m/ F5 {& G" D+ k# s! q
            {- p+ B1 y. x% K: J- N1 m
                upp_error_count++;
3 g& q# e* M/ Q& h& }            }7 C& j5 s$ i$ i" P. L$ N
        }5 M  v& ^; I0 U3 b" ]5 ^" J2 C( Q
    }
% [/ y# Q1 b( @' ^* a7 p8 P1 G* s3 F' s
    /* 报告通信结果*/
* m5 n2 y2 G4 L    if(upp_error_count != 0)3 ]6 G& h! x' L, b+ p
        UARTprintf( "upp_error_count=%d\n",upp_error_count);* ?; }( {6 m, n& r
    else
; }( h" D5 t  ^$ n/ R) v6 ?; q- v        UARTPuts("uPP transfers complete!\n",-2);
" B0 G, o1 g* t1 I; l: F1 x
4 z7 _" S5 N6 z6 I% S# m0 |    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 o: q; U! e2 p, x# L    UARTGets(ch,2);
  p6 Z  X; \7 p1 u    UARTPuts("\n", -2);9 Y' v9 _& R2 W
( A5 A1 Z7 t, n# X9 |& n
    if(ch[0] == 'y')" v% R5 ]) m; }! l0 m1 w9 j% ]2 N
    {8 v, v: U) [5 Z$ r) I' n
        /*打印全部读到的数据*/
) H* J8 n! j' d+ X7 j6 Z; x        for(i=0; i<upp_frame_size; )2 b! D, `/ i, s* P4 ^! \% G
        {
* r6 L0 i8 @  Z1 e/ O. A' b            for(j=0; j<5; j++)8 ^4 g. v7 I1 K+ O3 R5 t! u& P
            {
" s5 [3 ^) W4 z+ x3 P% W                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 ~2 w3 G3 n4 a" V                i++;/ @  b9 j8 X' ]  s; a" Z; o+ ~
                //if(i >= 4096)
. e! N+ c: O9 _0 T                //    break;0 z) ~2 o; H: ?7 N
7 O/ f9 M8 V& N1 R
            }7 Z3 l* w; q" @. S
            UARTPuts("\n",-2);
$ j( v0 M" R' k: ^" y        }/ |# d  b. @3 A
    }8 \  s% J3 W; q: O- H+ B6 m7 k
- Q  }% u( p1 `1 E8 P) B1 Y" }
}

' M2 y5 h& N; I8 |3 ~' x

; C0 {8 f# P" K8 t# B7 @* k5 t, B  s5 H$ |

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。$ ?$ L# [& `' o. k

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 N+ [& D) W3 k8 c9 Q0 G, w




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