嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 r" {8 f# e* G  h) X
Void UPP_TASK(Void)
1 Q( Z+ Y7 l& X1 j- ~{" k. {3 F! j. K5 O; v$ E

. x  y' a, \( l& y& q0 h    int i,j,k,target_int_count=2;
4 w! W! G- ]- w2 s# Y0 U    char ch[2];
- }9 w, A9 g5 V) a4 A  z( A; |9 t1 K, ~1 g8 C- o, ^& E' Q9 {

$ X* K. P% X6 Z# W9 l& S& E8 J* C/ [6 U% ?
    upp_interrupt_count  = 0;
% {0 E0 q' _* w( t* c  o    upp_error_count = 0;
1 n! u& t  V5 K7 C8 U: b) e+ \( P- Y9 e/ {4 C8 o4 N; Y, x
    UARTPuts("\tResetting uPP buffers...\r\n",-2);- ^9 Z6 `! L1 ^' ^" j: n7 l" b8 T
    // Initialize data buffers0 Y. |9 g+ ^- I
    for (i = 0; i < upp_frame_size; i++)' J# T8 {& Y: l  t# P3 O2 S* N
    {
! `: R; J5 s1 E' p' a       upp_buffer_b =i;
6 l% J: K/ c1 c5 c7 Z$ N5 E6 |: q5 A       upp_buffer_a = 0xDEAD;# i5 w1 C7 D& x
    }0 \$ w  n9 x( y  M9 y

! X& [1 W/ R' t* g, Q. ]' Q    //for(i=0;i<1024;i++). L* `2 e6 l& T4 g9 w
    //    temp=0;+ P* Q7 R, j* m0 P/ J! U* Z
+ t* P  W, q1 p: r
    //UPPReset();; b& `* Z2 C! e' v  U8 n
    /*启动UPP DMA传输*/9 o, A2 q- i; M. I
    UARTPuts("upp_prog_dma_i\n",-2);
/ ?# x) Z- |, h1 ?    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 n9 w; T9 l- f, ?: Z3 P' f$ P' B* b    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, D! i% ^+ E+ }8 [: n8 b7 }. y+ N
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# y- @+ x/ _/ I8 \* [0 [0 K$ S

) r- y" j# q+ K3 j$ D    UARTPuts("upp_prog_dma_i\n",-2);! o$ V3 a5 B8 y+ l* \. n# b$ s
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;6 c. ?* V/ a. u% M0 C
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) t1 p" j! {1 c3 C& P
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ c, J" O( |: Q; o# ?  W

' g  Z7 W1 l5 s. Z( i    /*等待UPP传输完毕*/
1 m! p/ |0 [& H# u    //i=0;, d; M, ?+ a, J
    //j=0;
4 d+ Q" f* ]% T) x: h) e    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! j* p& C# l4 c# z9 b% ]
    {
) L  r5 I! m0 |  D8 F8 q        /*  测试UPP传输的同时操作普通DDR数据
: ^# I; h4 _9 I! b        temp=i;
9 C: j  Y  {! E8 l4 @6 i        i++;
7 G3 i- G5 G3 N" B: T$ A* A        if(i==1024)0 U8 b4 b( y4 B+ Y# E
        {6 X, _/ j; q! ]( O
            i=0;
' G" V$ i+ s; _8 w( q% F            j++;
  S2 l; D  j7 ?4 S8 i% K        }
) f) U  j" Y* S( P$ ~        */
, N  C" @% I9 C- d
2 V/ R5 N8 u9 Q  d, D. h       asm(" nop");
6 E7 _- J( T+ _' {; ^5 C2 o' i1 _
4 n, b/ w' x& V9 O7 }& g       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);  d/ F4 H$ U: u% b; |( a+ o3 @
    }, G: S1 \: h% n# I0 c

# }5 _3 i; u, L) H: }3 e1 T    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 ~+ r, ]* N  Z0 E# o; o0 W/ k    //UARTprintf( "i=%d\n",i);
; d1 _! h& K( J) X8 c    //UARTprintf( "j=%d\n",j);
$ h7 K6 l- W: E" o    UARTPuts("Data mismatch in buffers.\n",-2);5 y  W! E$ K8 f4 K- C
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 w# V7 i7 f9 `: B    {, o* p' r! O# |3 I) e+ h
        for (i = 0; i<upp_frame_size; i++)8 x  ]+ N0 q& r" v) i! q
        {& S! `7 X* d$ I
            if (upp_buffer_a != upp_buffer_b)
! d$ J! C: H, ~            {
. `9 _; f- w9 H1 e$ [5 [                upp_error_count++;
, n) G8 k& X# t! D            }
: ^5 x- v: a* p$ ]        }
5 @9 H; X; @- ?- c# c    }
8 t5 h- P5 N7 P2 J9 X! k6 M: N) A! G; A( F$ f1 m, ^7 T. N
    /* 报告通信结果*/
; X5 A7 _7 o- r4 [; w( T    if(upp_error_count != 0)3 g/ _" B# ~+ }
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 Q) n" p3 w# i7 }( W, Y5 ]    else
! i) Q1 H4 f% A# A+ z% |        UARTPuts("uPP transfers complete!\n",-2);3 W5 k' {. c: m) w8 W8 |

' e" a2 u- a, r2 X, v! D1 l& S    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  j9 m9 S! R/ e# Z    UARTGets(ch,2);" _' H- M1 U7 S
    UARTPuts("\n", -2);; D& \; e! `& f: o) |# Z) {

0 B+ b. ?' {* s  D  t+ ^: D; l    if(ch[0] == 'y')
" {- O0 a) `7 B% k0 {7 o! L4 Y3 w* S    {
, A0 r8 C6 J+ w        /*打印全部读到的数据*/
3 I5 V: s% E8 z  R+ j$ w. v- a        for(i=0; i<upp_frame_size; )
2 `% S( j- J3 Z5 E0 q/ m( c        {6 T" H, M7 [" Q# v$ t
            for(j=0; j<5; j++)6 e8 }: @# }6 z9 e8 @
            {4 p! n! b& b( @* w6 T
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) ^$ ?& A# b. g$ F8 @                i++;
8 J( o! O6 }" a  j8 G" W                //if(i >= 4096)
2 v/ `' e( ]8 B' z! }* k                //    break;
& K: p  t7 F! I
* v7 F- q* S& v% I+ y# _3 t8 U            }0 N% h: {' Q9 }) j; @% l
            UARTPuts("\n",-2);2 k; f) a0 i& n3 t" M
        }
/ p0 m( s: }' R, K    }( p9 Y3 s5 O1 n+ ^

8 {" `+ a  \$ s; A, a}
# ~0 j/ ^$ r: s3 [. e' D& V7 g

: d8 c( B! p* X% }  H+ m0 e% R  }3 y6 S
% H3 V9 F) R0 x
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
  M' g3 E: q0 j) Q4 W( K$ p; w
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 o) g+ e+ _2 {- f





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