嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ e7 u& i3 [0 f' Q' v, n
Void UPP_TASK(Void)
  h3 n; y" e' q3 \{: ~. ]( t1 _( w; b

0 l" o4 {& |( M    int i,j,k,target_int_count=2;- ]9 F  A( o7 m, l* e* f% y( T
    char ch[2];/ o  f2 ?# t2 M! `4 h9 `: C) W

; S5 {3 L9 H! ^5 s/ S
+ `: K6 m$ S" C3 }6 h$ _" O/ q% Z3 A% X# e2 ^
    upp_interrupt_count  = 0;1 w) w4 p- `8 @+ Y  ^& r" l$ E3 l
    upp_error_count = 0;
5 \& }( s- Z  h, R
+ k6 b0 o  [: v5 S) i; Z3 D, i    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 L# I& l' B/ \4 U) ~& S" W
    // Initialize data buffers* q, k* R& n, o7 `0 j* ?
    for (i = 0; i < upp_frame_size; i++)
7 ^, Q1 I# J' m: W    {
* L# O* U( Y# V       upp_buffer_b =i;2 T, u1 C7 T# l
       upp_buffer_a = 0xDEAD;
' p+ |" _: X- e, Y8 }. j    }
+ C  e, Q1 g1 f, D9 z5 h
8 j8 f; G6 H6 [- S! E    //for(i=0;i<1024;i++)) }4 i, O0 T) w% l1 i/ s  m
    //    temp=0;# T' m0 ^8 c& {/ S
3 r5 M6 n" a9 @+ ^# w0 E
    //UPPReset();) u: }6 O$ [  X9 z4 x  u! R+ n
    /*启动UPP DMA传输*/% m' [" f% O8 n4 @! P" Z% B
    UARTPuts("upp_prog_dma_i\n",-2);. ?) q- L9 d, J; I' Z0 l' d
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, _+ v: T8 ?& o5 b/ U
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) j! L! }2 h6 R5 G    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; l) e) q. B3 }: o

# s/ G- r5 K; n: J4 y: q9 M    UARTPuts("upp_prog_dma_i\n",-2);
; [$ [1 b; c- K* c4 i9 B    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ e% {. t4 i+ c    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( q5 H: D/ S2 u, i2 h8 n" A
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% x/ j  n) v2 g# l2 f% ]# m3 n! d
8 i  q3 @4 S! o4 `+ R    /*等待UPP传输完毕*/
5 C: n$ z) B& w% F" m9 f    //i=0;) B& b2 _- `) ~( A+ r/ K
    //j=0;
% @8 w1 `5 y9 N% \% ?  r    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  ]7 \! |+ l+ q    {+ ?' Y" X+ _) H. y. k2 z0 J* D3 o
        /*  测试UPP传输的同时操作普通DDR数据+ z1 l8 P: w+ k( v
        temp=i;
, ~# U. e: y/ |* \. i8 f5 B: s        i++;
! k3 ^. W, i. y# H9 T4 \# ~        if(i==1024)
) `8 C! i: k0 F1 J        {
' n, P; K5 H- q3 v            i=0;. d9 S) O# b# ?5 ~6 a8 V
            j++;
0 s" U6 l) e; \% f5 X        }- m" x+ }% U* ?
        */
9 o7 ]; G/ r, j4 ~( T4 Q- E, ?* ?* ~) i0 ]; j
       asm(" nop");( I1 n. ~7 `- M: y# C

! x4 F3 p& Y) G  O1 \, t       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! n! Y3 j6 _2 }; ^1 I6 v9 n" S
    }$ X% M6 D* K# h
' r$ `+ ]( v) Q' `5 r- w
    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 o; ]" K* k0 H/ q# @% R
    //UARTprintf( "i=%d\n",i);4 b3 Q& G' U. F" N
    //UARTprintf( "j=%d\n",j);$ |) y; j9 k8 w/ q
    UARTPuts("Data mismatch in buffers.\n",-2);
$ z9 a9 f4 z" N+ o  m6 g    if (upp_interrupt_count == 2 && upp_error_count == 0)
. l" c2 {/ M, O6 V  E# _5 G# }; n    {; `# ?( [; ?) t& ]# v/ k# L
        for (i = 0; i<upp_frame_size; i++)9 {$ j. u1 X5 `' n& W6 ~* W
        {
) O9 R8 r9 a9 t6 ?            if (upp_buffer_a != upp_buffer_b)
: z2 E; P/ S& `# @: y" \            {7 p6 Z9 d/ u* q
                upp_error_count++;
  E$ j' s* q4 h8 M! g  b( \4 a            }* m0 Q# _5 L4 w$ U) O
        }
8 U& J* f6 J- l' H' e    }
) d) W+ B7 Y, E5 ]1 x
1 K% w2 F$ p) z) c6 n    /* 报告通信结果*/( l( C+ r& W' e. m/ r, L/ V/ ?) K$ [& Q
    if(upp_error_count != 0)6 ]! e& k, z! {3 ~% s* i
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 ^9 M9 R7 p5 y# l. r% E    else
' _) C) J, k9 l; @2 q# d        UARTPuts("uPP transfers complete!\n",-2);
' v# ^2 j* {5 E" v+ M  \8 v
, Y/ ]6 ?$ d2 ~/ p) a( N/ E$ A    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 h" w" L$ ?' e" k4 Q" h0 D    UARTGets(ch,2);
( y; I, C0 @; [% z. Z1 K    UARTPuts("\n", -2);
6 ~' Y) M1 y: f9 g
! H% T& k$ k! {( S    if(ch[0] == 'y')
# o  u; g9 ]+ Y! {  e$ I+ ]    {
5 _7 c7 r1 [6 b& B3 L3 f- U        /*打印全部读到的数据*/7 n$ `3 z* n7 q5 |9 s5 L# j- o
        for(i=0; i<upp_frame_size; )' Q0 B, ~$ T" F) b0 Y6 r
        {
! X( I" n' A1 e# `. X            for(j=0; j<5; j++)
. O% p1 ^* X. d3 n7 [+ f; y            {
. W' [7 ^: N+ Y+ U                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);# n" @" C; S. `2 g
                i++;$ ?- d0 ?6 Y# `3 |5 v
                //if(i >= 4096)
4 C' [; v6 O3 f                //    break;7 u" ?9 B8 E8 c. F

4 p! {* I+ v$ L" ]            }' \1 ~& v" J$ T& K7 M
            UARTPuts("\n",-2);
8 L) y7 \- p( k: ?        }5 O  h  b, W, a' e: X
    }
+ }) G& ?6 t& q
% R' U9 E) u5 D8 ?# q# z( C}
, w0 D" G5 j! h: P! l6 ^6 r

4 I  Y/ I9 e! l8 ^# k3 S# j. }
* z! f& I1 A3 b' t8 X) d& G  g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* t1 t% t9 w- H1 f6 M. D! a' v
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; v. D1 @2 l- e1 e0 ^7 ]5 x: [





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