嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! P: Z& V5 A+ J" z9 V3 z# s% J) e
Void UPP_TASK(Void)
  R" I1 g% ~3 @9 w; Y! g2 l{
' z2 y! t3 m$ T. Y- {  _, b+ {7 w0 V9 h$ y( L0 }
    int i,j,k,target_int_count=2;
1 f+ X+ |* s0 O2 x& `: F    char ch[2];
" |. W; s1 P8 |1 g2 B0 J/ D8 ?$ |
$ @6 r. R: c  }: D  h- O7 k! Y+ L

3 g( n+ S' i6 a* L+ }% t6 j* ~    upp_interrupt_count  = 0;1 F9 |. i% q4 v1 P/ V
    upp_error_count = 0;
# [% |9 m: z: U5 \8 W6 s! [5 D4 V% Y4 t5 H7 Z3 z& Y, p
    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 C, H) Y" @2 f% S# C
    // Initialize data buffers% c+ C, i0 ~5 o2 w) \: L  V  w
    for (i = 0; i < upp_frame_size; i++)
8 T. O& h6 `( y6 E! `. t3 d    {1 G. Z3 E/ T+ U3 H% f, D( B: y
       upp_buffer_b =i;
" E9 [: u3 k, X) J  T# Y5 X- A       upp_buffer_a = 0xDEAD;( k( N! t: u6 k7 _
    }* {+ m$ k+ C& Z% X: ]6 \8 q' z
+ `. c/ L+ X  R! T6 |# B; u- Z
    //for(i=0;i<1024;i++)
0 j) u0 a; q; T4 N    //    temp=0;0 l, L$ n2 ?+ c' n! v- Q
2 Y/ b% [& R6 ^1 {
    //UPPReset();
& P$ l1 {  \" k    /*启动UPP DMA传输*/
- z4 p5 E/ s6 @- d& S; ?: Y% o3 O    UARTPuts("upp_prog_dma_i\n",-2);
9 s9 Y$ _& J" f, I    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 z' Z6 a% E$ m0 L0 d% B2 o    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 a- ?% _6 d" C- |    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. r, D7 {8 p+ C' s+ d& Y6 a) A7 f1 j! s: N) h. ?
    UARTPuts("upp_prog_dma_i\n",-2);
! {* z0 D; R  W' v    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 {3 M$ m5 c' g! p* @) B  N
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 k" W8 z2 K8 [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; x  S, \% u/ a) D' z+ s2 z  X% Y
4 o' c6 G; v7 [+ r# t
    /*等待UPP传输完毕*/
/ }9 y0 z+ @. N' [/ L5 |3 R    //i=0;, P3 c' R& x/ J6 X% p+ z& m  D% W
    //j=0;
5 T4 x+ e' l  S3 {    while (upp_interrupt_count < target_int_count && upp_error_count == 0)4 T, ^$ B- R3 ^
    {
9 T! r1 T6 H1 @- Q1 ^/ T. V8 x        /*  测试UPP传输的同时操作普通DDR数据
) |4 ^# k( W/ w' y; r        temp=i;
! X. o$ y! H7 n  M+ H        i++;
$ G4 k' o* b# L        if(i==1024)0 E. x8 }" M1 c! U6 K
        {
" M; S' i. e0 @* H2 B+ k8 X4 s$ y) E            i=0;& ]7 f1 D9 h1 C- L4 k6 w
            j++;
7 P/ H! o( P; W) R& ?$ Q' A        }
; B- B, s% F" `& i        */
* m0 T0 E  c) {5 g0 s# N* B3 S, ?/ f3 ]  |4 R4 L$ k/ N! G
       asm(" nop");
$ H. @* c% s  I# G; Z* p  _+ N1 Q" G( s: }
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 s4 G9 ]6 z2 h: V+ @7 O4 r    }
: r7 z6 z/ o0 p
9 a  d2 w; q/ n8 G, |6 t4 l    /*检查UPP传输的数据是否正确 (loopback modes only)*/* p2 r0 ~$ j; _& J$ D
    //UARTprintf( "i=%d\n",i);
( m+ j$ H6 \, j0 j: Y  |    //UARTprintf( "j=%d\n",j);
6 C+ v% V/ P) |    UARTPuts("Data mismatch in buffers.\n",-2);6 w% q: g& x0 [% H* O9 W
    if (upp_interrupt_count == 2 && upp_error_count == 0)2 k! X- D( b9 ?6 D
    {; ^' Q$ x- q: I3 T9 O
        for (i = 0; i<upp_frame_size; i++); S9 n  q5 |' L0 a1 P
        {
0 H# r) I. ]  `6 B. J8 ^            if (upp_buffer_a != upp_buffer_b)
) k8 v9 S" E3 d            {1 b# p) b; a( f
                upp_error_count++;* @0 D& t! |* M3 e, S
            }
/ [  O0 U; Y' R0 h        }
) s/ c% Y. E$ w5 L    }
! L5 N! P( T8 D, W& E. T  \! w( U; X
; H; G7 G- j/ i0 t6 ~, I) A    /* 报告通信结果*/, x; S0 \. N+ m" }
    if(upp_error_count != 0)! f) u" r% g/ G* f
        UARTprintf( "upp_error_count=%d\n",upp_error_count);. b& a1 W& u: C: Z; I. a9 Z
    else
, E# f% n7 j8 ^5 m1 P        UARTPuts("uPP transfers complete!\n",-2);' z) s) e1 v9 L4 ]

# K/ O, }0 ?& G    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
7 j  E% O5 U/ h8 [, Q# R. Z/ A8 ]/ t, L3 ]( c    UARTGets(ch,2);
( X" ?! l8 G$ B" m, z! ^    UARTPuts("\n", -2);
  {) [0 C" w) i% C# b7 ]- [5 a
! h! x/ \' C+ ?9 m( B9 d- ~5 [" p, `    if(ch[0] == 'y')
: a6 J# i2 v4 z    {
% n) C# o% V/ v: D3 n8 t        /*打印全部读到的数据*/* }" r0 Y& a  Z& l8 F/ Q
        for(i=0; i<upp_frame_size; ): T* b5 }2 @" t
        {
/ r  Z  W( k5 c            for(j=0; j<5; j++)
0 a2 I5 [& j' Y  j4 t# Q            {) N6 W  f  R& c: {! \  \+ {
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& G1 m' z) N7 s2 z  b
                i++;" A* Q0 I. O8 _
                //if(i >= 4096), r" a! z. j4 b& q# T
                //    break;
# O$ D% H" z3 ]) |7 a
% a  @+ x( ]9 G  v) Z            }
3 m2 u0 W: y: ~: n% B; s            UARTPuts("\n",-2);. C& |& Y0 s8 D8 l) k* P
        }( W3 u  V& J& H% \
    }% j( J$ w, b8 z) a/ ]; R' b7 V
& n* w$ ~" z7 D$ ~" m" x  J
}

: U: ]  n/ ~7 ^8 F9 n

3 m% _$ T& V) `! Q, \- |' l$ d2 F/ X) t! B8 |8 f  X; ^

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. {* z$ U1 n% l0 n& l, o

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: ^8 D8 ?" d0 [1 [, C




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