嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ l# p0 l  P! J. x. l4 C# q
Void UPP_TASK(Void)
: l- y, `! M& U6 C7 P% {{$ G# A$ `4 G" M4 Z  y

! P& U# j# N* K/ L% @& V    int i,j,k,target_int_count=2;
/ n, D5 s9 k1 r# t" N/ b6 @2 n    char ch[2];
/ V* m/ Y: J. \6 Y! [2 g, T9 `3 j& n& Y- i8 J6 n, V7 \# l
) b0 [, O# w1 k' O. b

( z2 ~6 r' C5 I6 ~( A1 E# r    upp_interrupt_count  = 0;$ }# B+ \0 ^! z4 [; W5 ]2 @% c
    upp_error_count = 0;
# i6 F* U0 {9 a
" e9 D$ P$ x0 ]+ s5 x( R    UARTPuts("\tResetting uPP buffers...\r\n",-2);
  ^5 V3 x; c! {7 `" h$ s    // Initialize data buffers5 f- f! Y+ _( \2 j
    for (i = 0; i < upp_frame_size; i++)
# I/ a/ M; [3 b    {
$ A1 N- a1 y* H$ s8 ~0 V       upp_buffer_b =i;1 W2 J1 ^; |  I6 |( n! E- a
       upp_buffer_a = 0xDEAD;+ I% Q3 U. J# w+ X- ], E* b
    }4 r  F6 T6 s) Y4 Z" D/ t/ ~, q& G

# o1 e3 A. D3 q    //for(i=0;i<1024;i++)! [( {# n1 X% \/ H; D: Y
    //    temp=0;0 u: {" F- @. ]

# @/ i( [' x7 l9 O4 g2 _" r    //UPPReset();/ |6 d: |& W. V
    /*启动UPP DMA传输*/1 h+ O. w" i' I, [  }7 P6 J
    UARTPuts("upp_prog_dma_i\n",-2);
4 h) x8 a" Y4 j3 @    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ m2 G8 p* ~" T: ]3 l: i
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 Z* Y- u6 z( H: g    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; h& l) N& e0 S' y9 M
) M# P6 R" I: ~  W5 h0 A
    UARTPuts("upp_prog_dma_i\n",-2);
* O3 ^8 _' F1 }& F: `    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% e2 }4 B: x! p+ K/ k    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( t6 Q. j9 }1 b& v5 H; f
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 E. X- P5 w9 m: w" j% @, Q
+ ^' o0 h. x& A# U& w; S
    /*等待UPP传输完毕*/& o( S7 {+ n% r( Q
    //i=0;
/ k! @$ M  N8 t+ f, s3 |& r    //j=0;% _- |+ t8 C! o' L
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 ^/ _' U$ P* h* ^; g( `
    {
- n# }# i0 W) E* O" k        /*  测试UPP传输的同时操作普通DDR数据0 O" r! x/ L  v3 {1 `/ R
        temp=i;+ G' ]5 G3 P# b1 r( q
        i++;
8 S# w) q- S1 j        if(i==1024)  X  a' U% @/ M1 x
        {/ y$ G4 R! o) I1 x
            i=0;
% j4 V3 L6 |9 C9 Z, c$ @/ H            j++;' t2 ^: H; m) }0 h' ]
        }
/ T; k5 A& m" Q# Q$ ~2 t" S        */
4 D$ c' N" x. i1 U: ]/ R6 N8 `% x, |9 N5 y! v
       asm(" nop");
3 G8 f2 U9 a% j( [  s
, W7 _7 ]7 z: `       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 [5 C5 m) C9 s
    }
9 z! Y" r& n6 a8 O& j( i3 Z
8 i* ~! X! k8 q% ~2 \6 Z& z    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 A+ i# {$ j( a! }
    //UARTprintf( "i=%d\n",i);
, H8 y7 K+ T! c. z    //UARTprintf( "j=%d\n",j);
! V4 ^' ?6 ]- D" B; l# Q$ P9 Q" r    UARTPuts("Data mismatch in buffers.\n",-2);1 d* F5 k$ E, G* e9 Y, F4 K
    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 s/ k4 K  l7 p6 F/ o# }    {! O1 S7 ]0 F/ w- s
        for (i = 0; i<upp_frame_size; i++)& f2 T1 Y+ F& D0 Z0 x( E4 ]
        {0 G2 z+ N" e# @2 `4 r
            if (upp_buffer_a != upp_buffer_b)
% Q7 l9 y0 g3 k% v0 r4 s1 Z            {
2 x- g6 ~, B# s% i" ^- n8 h/ q" w7 b                upp_error_count++;
/ Q" ]) u& V; L+ D# g5 K8 y  Q4 e( ?            }+ g6 F7 @: W9 Y4 v2 ?
        }0 r" I# I, r9 u
    }
* e9 s7 {3 [5 z& g% z( K- T. T
9 V7 t/ r- d1 S9 o2 v    /* 报告通信结果*/
6 w3 d( D9 s& d: G' n. H    if(upp_error_count != 0)5 N: Y" f5 L1 N+ |
        UARTprintf( "upp_error_count=%d\n",upp_error_count);( ]  V2 F( v! e% Z! E
    else
2 ], i0 S, A0 `& `9 x! j1 o        UARTPuts("uPP transfers complete!\n",-2);
5 t- N. h, U% P7 `+ K( f) f: W2 b$ ]* G/ v! |! @4 k' }3 \6 d
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 @) I. q% R# a2 {' G* b+ N- Z    UARTGets(ch,2);
( B. H6 W) b( X( t    UARTPuts("\n", -2);
3 S7 p4 N5 w$ q7 K6 L$ ^1 I4 ^9 b; C5 n/ O5 N0 Q* P
    if(ch[0] == 'y')
7 R( v" D; ?* h' B* R" x3 I    {# V; {$ F+ C) D8 ?1 C9 x
        /*打印全部读到的数据*/" ^1 |& s* J8 s: [
        for(i=0; i<upp_frame_size; )* D( R) O" x' ?/ _# j0 `
        {
  `, U, x) a( b: N& w/ V& Q            for(j=0; j<5; j++)
: C2 a, R( M3 L! `! }. y            {
9 C$ R9 D2 y. o, Z                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);7 w- f' R2 ~/ s$ [! S) L# I
                i++;, \* L/ T+ a8 Y
                //if(i >= 4096)
( T8 A# [  p: G, i) w! `                //    break;# d+ L+ ^. m( _9 k2 N

1 N1 T0 ~1 y- S( s2 r" x            }  E5 H  |( ^7 Y1 l$ P( T
            UARTPuts("\n",-2);. m9 |/ I0 V5 {" \
        }
& p  ^( L. o! o, o    }6 P9 N: j) k+ l$ d
# w% Q/ r2 @+ m, |) D$ x
}

; k* \' O; g* E& Y& E& ~* [( K
0 Y  ~; V% H$ ?5 \+ \' {( b

; H4 S$ D. W6 `, e, p4 I
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。9 u; ?5 e0 q; U/ h7 ~' o) F

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. t; D" y# J2 t9 A4 c; \




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