嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" ?8 Y# k2 [! C3 ~
Void UPP_TASK(Void)  n9 i% H6 r; \
{
- x! e# V4 t/ E. V) j9 O: S1 f  f. ~, O9 m( m
    int i,j,k,target_int_count=2;8 [1 J- w6 t8 S+ \; F# `. G
    char ch[2];" v4 i: K: a* X+ \

1 t: s; ~1 m$ w  W" ?
$ `! m0 z1 j4 B
- T7 o: \& B/ D: r2 _' A( r    upp_interrupt_count  = 0;
7 i  E2 ?0 c% D    upp_error_count = 0;* E  O% W( I1 y5 L' @
* P7 o, L/ K4 j& D% p1 f. C" i
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 t0 L: \& L4 y" h7 P4 c5 n    // Initialize data buffers
# s" f' L0 Y5 X( T    for (i = 0; i < upp_frame_size; i++)
& C2 L, l8 J' p& s. ?    {
1 D- Z9 L$ l. O5 O/ x$ G0 a       upp_buffer_b =i;
" {" x: v# a8 E- `0 p       upp_buffer_a = 0xDEAD;
  w6 G( b& ~* D% A4 }$ W    }% ?/ r5 j6 w3 @

3 G! a* }* X- H" s) Q    //for(i=0;i<1024;i++); B* u/ Z* H7 o# O7 m3 _
    //    temp=0;0 _; d$ H% p; [8 }2 W* l

9 B; A/ o8 G4 a; ]; N    //UPPReset();$ J$ ^, a! d( P  m) v7 K
    /*启动UPP DMA传输*/
7 h" {7 i3 ~/ |5 u8 T0 G+ K9 Y* l    UARTPuts("upp_prog_dma_i\n",-2);
; M- g: g* O! e: d    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" |' U. e3 u6 T4 R
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ |5 U( t( j& D5 F2 X- M9 _    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 u" K) m! z" G4 F7 Y  M: z# }2 f( X+ l; L0 [
    UARTPuts("upp_prog_dma_i\n",-2);4 c' r/ R: w( [% o; k, P& y
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* E" a9 t6 S7 e& t, \1 _+ _    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 S7 N: w$ P7 f  ^6 c- W% C
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 b8 |1 R0 K' g& q* |$ \# f( @" @: ~$ ~
2 c4 O" Z. y+ X) p    /*等待UPP传输完毕*/! [: ?, I1 y' L$ i% ~% L
    //i=0;* b) R0 N4 s' Z
    //j=0;+ O" {3 \4 x  u
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# `* n- p5 ~+ P' G- o$ S1 U
    {
6 w5 r1 q: G4 |* P' z8 r        /*  测试UPP传输的同时操作普通DDR数据  Z1 P" `+ i$ x7 T  y
        temp=i;$ ?! I2 L9 a$ E8 h. m5 ?
        i++;! n. p5 |# ^3 \: [
        if(i==1024)
. N% v- L1 [; d7 \7 b        {& v7 L7 y9 ]+ f/ {& v
            i=0;1 W% u( @4 k( \
            j++;
8 t8 c2 G8 s) \        }
7 N% S  S" f7 B  T( n& ?" e        */
$ N" a/ B" L+ b8 v- e+ Q6 W3 V9 y6 q3 H* n9 }
       asm(" nop");
" x& {" g% E7 ^7 x9 ~$ E& B" O
4 l; q' @+ Y2 ?* g$ ?: Y) Y" m* u) F       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 @; e; J, a$ E! r1 X9 j, Q    }5 ~9 \1 s: @0 S
  g* o9 k! ^& W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
, R- b1 E5 ^7 m6 n' ]' Y5 v    //UARTprintf( "i=%d\n",i);# M" {  t' _' e5 P$ E( M  x
    //UARTprintf( "j=%d\n",j);, F! c4 D$ ?, e6 {! I
    UARTPuts("Data mismatch in buffers.\n",-2);
: V, k/ J6 X: w4 S, M, J: F    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 H; n+ b& v( N. U7 Y* p2 K/ E    {
0 o* I' \/ m: p/ \$ j: h( J        for (i = 0; i<upp_frame_size; i++)
3 u% f# W4 W% J- D; e        {
) `0 \1 K' N: H8 L+ l0 v            if (upp_buffer_a != upp_buffer_b)
5 l% B  C5 u/ y, j. l1 u+ H8 g0 _7 M) X            {
4 j8 O6 r% m3 N/ |2 o0 N; v8 c                upp_error_count++;" T9 d; B( q, ^
            }
. b3 a! J5 B6 b        }6 Y* N/ r6 m4 Y# a. ]
    }
) q% M* D- M# F" c. _- r
/ i. [3 s! E8 v1 w& Q+ S    /* 报告通信结果*/7 g5 H. K' \' r0 c' {3 m+ t
    if(upp_error_count != 0)
" \4 \! r8 w9 Z' V, d9 o! V2 w( o, ]        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 N* B7 _7 x/ j! B- g
    else/ h3 @: V+ X6 H7 O  e
        UARTPuts("uPP transfers complete!\n",-2);
9 e) S) n4 g6 N$ D. u" Y
8 q2 M1 J/ u! l    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 \# e4 @8 ^1 Y% I) D
    UARTGets(ch,2);5 z  R1 b3 \3 l
    UARTPuts("\n", -2);
" m& n6 o0 ]! T' X$ |1 j. c4 _! {$ J6 A/ z% p! Z
    if(ch[0] == 'y')
# B, ?6 c7 Q* y/ K1 S    {
: ]1 _3 j2 ?- ~        /*打印全部读到的数据*/* k/ E' p+ w' f' j- L, s, S8 Q
        for(i=0; i<upp_frame_size; )8 ^; \. f) c1 F& X% g& ^* ]
        {. {# e, Y  o4 p9 |
            for(j=0; j<5; j++)
$ ^9 B  w9 d0 f, m            {+ \( B9 J2 u+ Z+ E% K3 ~' I1 @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 E7 i9 k& Y: |% i7 ]
                i++;( i  G0 h0 M7 g3 n  P2 ]+ Z" D4 X% j
                //if(i >= 4096)  [# z, r8 [0 z- k. v# x( ^$ f5 X
                //    break;
8 w# k3 K+ D( h, W% K# _; X; H" w4 K( o  V( `
            }: `' |/ S# D5 l! ?
            UARTPuts("\n",-2);" q/ [: ]4 N6 [) t  v& D9 N$ z
        }
' M0 L8 N- |! t& k3 c! V    }
7 h5 Z2 D# h- e7 C) L) l, a0 y& A) u4 Q) s) V# h1 F
}
: r5 j. N9 q$ R- G6 f
7 S; z' C  S- J

% V+ P/ Z: n* d, J* t
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% Q( D- U. x0 a5 S* M: Z' ]) L5 `0 M" o

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ x# |/ p$ `) @. |- c




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