嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" k# o( k5 Y0 _, Q5 ^
Void UPP_TASK(Void)
# y: |0 y4 _6 A/ X2 H{
! X: Q+ x7 s2 ~. J1 ]
4 R" J$ B. j6 F0 F; r7 m    int i,j,k,target_int_count=2;+ e. y. o% ~& N  [. d
    char ch[2];' a# ~" A  y1 N  l7 Z/ o7 ~

. T( e! q0 C& x4 O6 o% o3 @
5 w0 q# j9 f/ K
! D+ t+ r# w0 g3 g- f    upp_interrupt_count  = 0;  Y  X7 r9 v6 u2 C- o; W! C
    upp_error_count = 0;4 _9 i! S0 v# _. `4 t

- F: A+ y- [+ h! ?! [    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 [8 p* S, a! ?2 M: `( a/ b: C
    // Initialize data buffers3 [% t$ @. L  K! y6 P3 O) V
    for (i = 0; i < upp_frame_size; i++)
/ `  E( x& Q: f% ?    {& a1 T9 @: f; o6 V
       upp_buffer_b =i;
1 k  f/ }! |1 q/ z       upp_buffer_a = 0xDEAD;+ a# G' q9 _. }2 o) a: k, ]
    }
0 L; A. q' O3 e$ W; _/ J0 d; A; v' A1 R0 ]8 p4 p: {) O% ?
    //for(i=0;i<1024;i++)
2 r3 g# G- i, i4 B! G+ Q( R    //    temp=0;
( H$ y+ T2 M( I; q3 G$ R+ |. i, m' L, j. F+ u" m( r
    //UPPReset();
3 _6 i. d& Q5 f    /*启动UPP DMA传输*/
. H" e& \7 z  `/ P5 k% u    UARTPuts("upp_prog_dma_i\n",-2);
+ {+ y: a3 S* p$ I3 j    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;; M; q% z; y# Z& Z, C: Y5 K$ L6 f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& G- G# I. b1 o$ }' F8 |    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- t% w7 @/ B9 O2 Z
- d% z( t) B% ]! x( k    UARTPuts("upp_prog_dma_i\n",-2);' v* Q9 e: |8 w. }
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ l4 |" b- {7 T0 |' n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 O% |; O  |; b5 h7 P% o) ]# Y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);/ R8 e( Z2 e9 c
, N: x) n7 }  j) P$ r" Z, D
    /*等待UPP传输完毕*/' ^2 l6 b, v1 Q! u: N' W2 u
    //i=0;
  G3 r  p$ _4 }8 C* R  D    //j=0;$ z* b9 _& S" }$ I: a3 L/ I
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# Y' {% U9 e5 \: V4 X
    {2 u' c! [, C5 }* ~0 I
        /*  测试UPP传输的同时操作普通DDR数据9 }+ o* s- \- n
        temp=i;
: q% d7 A- I) ^9 e. N# U        i++;' z+ Y3 g1 L% u( ^( Q
        if(i==1024)
+ n3 _! R2 Z# L8 j. U        {
6 _; x  v( w+ W: x            i=0;# n* t, O: u' @& ^: u
            j++;
, P. C2 b. [1 T        }5 G+ \' b1 t+ V' C' R6 p
        */
1 V3 a: }6 W& v. s
" a, [( G* G# }' l  N% R       asm(" nop");- ]: g; y) Z0 h4 T0 y
7 |0 F3 u- z9 B0 }
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ ~5 l  A# C. k" [. @8 l/ d! b1 N    }( D3 {+ h0 C# c+ Z' j7 H
- I0 P# }* n, z0 J5 |' `
    /*检查UPP传输的数据是否正确 (loopback modes only)*/4 y# R- s) `3 ~$ P% X% u7 {
    //UARTprintf( "i=%d\n",i);
  z- K) ?7 j1 T  J    //UARTprintf( "j=%d\n",j);
9 y8 Y+ X# A( \: X. b% h  r    UARTPuts("Data mismatch in buffers.\n",-2);2 F2 ]& t1 S# W  a
    if (upp_interrupt_count == 2 && upp_error_count == 0)
  F7 ]& ^2 r+ G  Q    {
8 ^# p; [# m  G) Z" O9 K9 p, r        for (i = 0; i<upp_frame_size; i++)
  I# W9 Q5 @) s% O. w- q        {' y6 l& s, [3 B3 b- V
            if (upp_buffer_a != upp_buffer_b)
3 @1 M1 l$ a' r( w  {% \3 V            {$ u  B- s) `, z1 O
                upp_error_count++;
; I' z( _6 H; z) t+ a3 {% j2 @            }
# o# l/ C" I9 Y        }
. X  r% u9 S, Z# X    }
. C% P9 u. x  M3 U# I5 q5 [
- M0 _6 U8 m4 s7 ~7 j" k7 s$ ?    /* 报告通信结果*/
* f3 W# `" ~4 J* x7 J    if(upp_error_count != 0)
- J6 G8 A$ u! a- a. ~  C        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 G8 o% C$ ]# d4 ~9 E: a5 c
    else- ^6 V. d( [2 o7 A8 D
        UARTPuts("uPP transfers complete!\n",-2);
5 P! M7 m+ N' u
' F' g1 q1 A0 `8 k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 m7 x! Y, a  Z& v) c5 k5 c    UARTGets(ch,2);
6 r5 O* {! \/ q9 C1 F& o) h    UARTPuts("\n", -2);" o# g! I1 R$ {+ k

  }/ b. ]& D5 F) P    if(ch[0] == 'y')
4 `$ }; }. s  z' j% A8 Y    {9 D, l- D2 S$ k- ?/ @4 X+ \+ \% q
        /*打印全部读到的数据*/
) N7 K) o: T4 S7 X' n2 C% s/ O4 W0 \        for(i=0; i<upp_frame_size; )) J/ Z: j/ |3 U
        {1 b: y: g1 m5 q6 J) h# ~
            for(j=0; j<5; j++)
0 D2 E/ Q$ z  C2 L            {% w5 Z! G5 q* @% Y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 X: `1 S# _+ h& g9 [, i                i++;5 p) v" L) o. b
                //if(i >= 4096)3 d0 N5 S) w4 \3 R0 {" v  Z  N
                //    break;
& Q! a. i( p5 A% n3 Y/ [2 l0 [% ~, I/ }' [8 X7 x$ v' K
            }; ]+ r( O4 g& B% ?+ x
            UARTPuts("\n",-2);3 N- E4 K+ G* ^+ h- M9 N6 i, T
        }2 E& v: i# U& p  ^9 k5 I  [+ }1 L
    }
0 P( N# F. ~, k+ S
7 X$ ~2 |. o+ Y9 v* e; i}

3 q: U3 M2 o5 [  }

! Z* Z- }- R% B# ]* o7 U& D( d* D6 K

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% V3 t3 l$ [  a3 w( g: c
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 [5 V! ~3 T* S9 Z




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