嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! Y& E8 V& W! v
Void UPP_TASK(Void)
3 r1 \9 ]% |$ z; ~' Y! g: S{8 {* o$ _0 e" g

' T2 j0 A: w' X+ G    int i,j,k,target_int_count=2;
7 S4 ?, y9 E: D6 ~$ B4 ?2 s; N' U* g    char ch[2];8 F- o% H! Z- S. l1 t& M) k

. Q; \$ O: `% L' w# B2 e/ n
6 v2 j" @: W+ j1 ~- ^9 A, C% [: A/ [4 @) b, Z& D' k+ q* Y  N$ M4 r( X
    upp_interrupt_count  = 0;
+ ~, k9 A" l1 @: I7 Y    upp_error_count = 0;
$ F; ?  N* Q. u) n- E& D* l. w6 Q" w  i
    UARTPuts("\tResetting uPP buffers...\r\n",-2);: J/ |3 i# B2 S! l
    // Initialize data buffers+ R3 h+ \1 \9 V8 n( Z
    for (i = 0; i < upp_frame_size; i++)2 H" P/ E4 `6 t9 U* Q) _6 x
    {! @* ?* B% C0 `. ^
       upp_buffer_b =i;) Q' f. G% K& l: d  s
       upp_buffer_a = 0xDEAD;
6 N' ~: {% a, v, I5 e- F    }: d4 `" x6 S# T3 F# C
. v: y4 I/ V& d  ~
    //for(i=0;i<1024;i++)
2 \1 |2 P0 Q! ~    //    temp=0;. v4 ]  a4 ?0 `) J

& _& g, G2 v# d1 H9 Y9 J- B# n4 E. J( ?    //UPPReset();2 G& E9 I+ S+ d1 b( B
    /*启动UPP DMA传输*/
9 I- ]! O( X1 |# z! `# C3 w4 n    UARTPuts("upp_prog_dma_i\n",-2);
' n- e, _+ a7 ]6 Q3 U    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 A. [: u0 K  `4 t# t" j    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# N4 q  \% J  W/ \6 r  `7 N2 _    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ E4 G" v# {' i# T# Z

  h) J0 H* Q) p/ d. Q  W    UARTPuts("upp_prog_dma_i\n",-2);' y/ s, w8 }8 f, s& V- H7 ^, j
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# O5 K7 W6 ]. O& a
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 l& [; B- V# \4 k1 Z' T: q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ K6 I5 \5 l6 y) u& [- L8 J1 J  K' \$ `$ s; B
    /*等待UPP传输完毕*/# I, B# ?" u# n' |/ I
    //i=0;
5 M6 R! w3 ^' T2 F3 _, A    //j=0;8 e# ?# g/ ?% W3 r: E4 F: q5 w. E
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* Y4 F* {! F' N4 I" X    {. V( x5 G  E3 i' i
        /*  测试UPP传输的同时操作普通DDR数据
; ]& p, e0 ?" L4 h8 f        temp=i;# y0 c2 g7 F; ^
        i++;' ]4 A7 C' [, S8 p/ I' j
        if(i==1024)" i3 ?" K0 _: s( l& S
        {
3 M! Y" _7 y0 }9 c            i=0;0 T( C* P) i5 y+ h" Q, H- [
            j++;9 h  d: i; A' [5 ]: I. \# m" p
        }
6 U# \+ x. p  C) [/ _        */" x7 T! }( d/ P
( H  T! W" ], ]
       asm(" nop");
3 s; L7 n8 A5 z) g5 O
( A  q7 F- s4 m; ~       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' \  y  ^/ V, f3 n4 ?    }
4 Z* o4 T% x1 A( c  T4 C3 Y
: U2 n) X5 }, \* u& Q    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 y+ X$ K+ a% ?4 B    //UARTprintf( "i=%d\n",i);5 T5 o9 o" w3 b1 Y/ H$ S
    //UARTprintf( "j=%d\n",j);5 B9 ]2 i- T+ N0 z, ?
    UARTPuts("Data mismatch in buffers.\n",-2);% V: B! w% F1 w/ G
    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 b/ J; `/ T, Q% b    {; s6 j( j! x. q0 p: T! I3 O
        for (i = 0; i<upp_frame_size; i++)
( R2 |1 O. q1 i/ i' G# H        {- U0 f3 \) F' A5 [' ?$ f% i6 N
            if (upp_buffer_a != upp_buffer_b)
5 ^! D) q2 V6 v            {
  D$ ^* |1 X) Q) [: }                upp_error_count++;2 ~% u% n/ v6 P- Q0 J5 {' O, a
            }
  S8 U, o5 b5 B- w( J$ Q! [$ H2 _        }7 Z1 p5 \( y  f7 |; ]5 P- W" i/ m
    }9 `4 |2 Y2 F& K" [2 L1 V4 A

% E; h8 b; _9 i  U! z    /* 报告通信结果*/  s3 {' z; Z6 \6 M
    if(upp_error_count != 0)
3 A! ]! g9 [" Z# ^        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# I$ J7 {0 d0 p6 k% U    else
  L0 Y8 t' D: Z% w- |+ T        UARTPuts("uPP transfers complete!\n",-2);
4 C, a9 B4 M0 L4 F+ |* J  e0 c5 u3 Z; s& \! D
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ R6 i% |$ n6 w& Q3 G. k( J    UARTGets(ch,2);! _( L( @7 c9 T) X8 A6 c9 T2 B
    UARTPuts("\n", -2);0 M8 R: b% L1 V: O0 l) j1 ~( n; S9 V

% ^  Z4 ]) ^# d* Y    if(ch[0] == 'y')$ R, L" x9 }4 {. a
    {
3 @6 Y9 T* J, c3 k$ A* R( r! p        /*打印全部读到的数据*/
* ~* h2 q5 e' T& G" {% W        for(i=0; i<upp_frame_size; )- z  x5 M. s. r$ `( F
        {% h( R, q! Z9 p, M
            for(j=0; j<5; j++)
9 J2 V% y. G5 r" z            {4 l1 y: q2 f  o. U+ Y+ d" \7 ~! o3 d' d
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% A' e0 N/ b; x7 H: @( p5 |
                i++;% I6 x) Q3 s5 J/ ?' C# t
                //if(i >= 4096)  `1 ?5 r- \% U: O+ J- N1 h$ G
                //    break;
# G3 X3 C0 a5 u. U$ m
3 g+ _: p& M+ {1 {/ D            }
0 l: G# U" \8 c9 N1 q1 Z            UARTPuts("\n",-2);5 j, M+ K" h% U; A* I( b
        }. J0 y. x8 z0 X% f; ]
    }
* F- ~4 N- |& p. ^! N( H5 L( @; [0 r  k
}
. }7 K- Y" M9 S3 T1 A% u' P
5 D& X/ w( B! h2 k# |% ~

9 ~( j4 m; L+ m2 Q! p/ x" L
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 R5 y; g. [# A% M
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. l& ~: }5 ~$ n- R) O' f- \




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