嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ [/ B* x' V0 D5 D8 b. g! ]/ G3 W
Void UPP_TASK(Void)
9 O) E" A: s. Y2 }% E{
. z$ k: ]( W& P% S% P/ i$ L8 Z# ]+ m0 g- o; e1 P# c& b
    int i,j,k,target_int_count=2;
; _' R- m+ F8 V! {  h    char ch[2];
7 n- S& i; T' Z4 @" N0 D  E# B. v
1 x$ u+ t9 B1 Z- O2 }
, M% B: q- x, r4 k3 w
    upp_interrupt_count  = 0;# E9 W3 K8 Y, O. A# M
    upp_error_count = 0;  U" O4 l7 k4 q3 q

4 [( w) e( [! U2 u    UARTPuts("\tResetting uPP buffers...\r\n",-2);( c  X4 {' Z; b% {: A3 N/ d3 N
    // Initialize data buffers& e/ P8 _' t1 P% ]; t% t
    for (i = 0; i < upp_frame_size; i++)
3 V- F" {# \* ~5 J    {% f$ Z4 o" t7 g) Q/ a/ a7 B
       upp_buffer_b =i;' D+ t& O6 J0 E- g5 `
       upp_buffer_a = 0xDEAD;
( ?' O6 U$ l: Z+ _. q" l9 |' K7 R    }# n' Y9 B7 y# F0 N- t; l) Y
, I* \% M# X8 j- G  H
    //for(i=0;i<1024;i++)
) j* r3 ^# Q- Y* \6 y    //    temp=0;
# Z, v0 D" \; \4 A$ G0 r, x% k5 Z4 v  n9 {* Z6 k
    //UPPReset();: k: w8 b$ Q3 u) Y! S
    /*启动UPP DMA传输*/' ~- h! d# O6 W7 l$ r  W$ Z
    UARTPuts("upp_prog_dma_i\n",-2);4 o. X; T7 o0 M, r. j8 R( Q
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ N+ V4 u, M7 z. p
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  u# I6 w5 l! k* Q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' o2 B6 l4 O8 j% K
8 R% I& e3 E, q4 V* H7 b& a/ b
    UARTPuts("upp_prog_dma_i\n",-2);% R0 }+ F, ]5 G4 ]6 `$ ]
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) Z1 B" U/ P1 Z5 i; w  _: A* t    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, h0 R  f: \. z8 |
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. q0 G1 e, C5 t4 |! a
% H/ K1 x9 `! p% ~1 i8 N5 h6 y    /*等待UPP传输完毕*/9 Y5 `3 v( O' G' e  x* i3 q) Z7 A
    //i=0;
) F- R$ P- o" P: F" n7 l    //j=0;
0 p4 b2 _& {1 R0 ^+ I. D( D    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. N( q( V+ V! z" q2 i7 r* w    {: o' S5 b' q. X) |* c( l, J& }
        /*  测试UPP传输的同时操作普通DDR数据
9 v$ d2 W8 Z  H' R% K        temp=i;
7 p# O! d8 ~0 p% m        i++;7 R6 b9 c7 b4 x$ P4 [$ x- t
        if(i==1024)
7 N+ o2 J* Z% x  q( x        {
5 g: A# z2 z! Q6 L( w            i=0;
# m; z$ c0 M4 Q            j++;; ^0 `# a, j! ?% M$ ?2 q
        }% q' e% e; k6 {7 M
        */% a5 |5 o( E( J, X( o; _

0 j/ V, K& k6 z       asm(" nop");* u1 K) f( G$ h0 y# L  A$ x
. E. N2 X' N# H0 d
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) o. z% m- t7 G# P8 Z    }
5 W: a" [- y5 [! T
5 D4 n' x) K" A8 P. _$ r; t    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ K- a$ k* W$ A5 h9 v! j    //UARTprintf( "i=%d\n",i);
5 f" k- n8 s1 |! F# l5 P7 k, Q    //UARTprintf( "j=%d\n",j);
4 |3 q' D- l7 O  {' o. j$ d    UARTPuts("Data mismatch in buffers.\n",-2);* I) w' j7 e0 |! L4 Q0 \! ?
    if (upp_interrupt_count == 2 && upp_error_count == 0)* u% |4 ^3 B) j# p! O! R
    {
% f  I, Y. g! z, K5 [        for (i = 0; i<upp_frame_size; i++)
# e$ P  w7 w! v! l' D        {
2 |6 S7 o! e, y  A' I# ?0 B            if (upp_buffer_a != upp_buffer_b)7 o6 q% @/ ~# P6 q, S# Q
            {
+ Q8 b) T2 J( u1 _& D+ |6 f                upp_error_count++;+ N! [6 x, B' H* m% h
            }7 T* {4 {# k- P8 ^+ f  V+ I# K
        }# P7 A5 O$ f3 y0 W) ~8 B; S7 X% K
    }* D$ r$ A7 D% r0 V6 h4 r

9 @7 [7 p, D# g  [* A( }    /* 报告通信结果*/4 g3 ~5 t# h9 ]- }9 F0 L% ], Z
    if(upp_error_count != 0)9 j  L5 E' C$ W+ c& g2 }0 Y' U
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ X/ }/ Z& C7 [* h* q$ L
    else% W3 T" u! ]' C! \; \; z2 b( R% ~
        UARTPuts("uPP transfers complete!\n",-2);( C" x+ _7 I: F$ c
* Z  {5 i- p: I- }3 X  y; ], L) Y
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 n! s, O, j! [" ^2 l    UARTGets(ch,2);
$ W, k: _* B# ?( \    UARTPuts("\n", -2);) g) y2 }& {8 c) ?- E8 S3 _3 \0 v
% g4 r6 G2 N" a9 O. d" l
    if(ch[0] == 'y')
) w9 F: E- P' C/ B8 ^, C    {
" z7 S4 h5 ?3 q5 B5 w! B( r0 S. F        /*打印全部读到的数据*/
  g" p5 |( Q, W$ ^) a, B        for(i=0; i<upp_frame_size; )+ S8 ?4 O7 h. M9 H" G. t/ L$ P
        {
/ W  v! x* O4 U+ }            for(j=0; j<5; j++)
; [: ]$ s3 x; x& N" k            {+ S" B: U" T1 y  }! V
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, y$ L4 ?( K/ e& {5 s* m% O
                i++;
3 n7 k& s' M# Q; n7 s' h                //if(i >= 4096)
2 a* b4 [- v( ^' d                //    break;) ^  B3 }& u- c: G/ b
8 n; Z2 F1 H( Z) `$ z+ \# r* N7 \4 I9 w
            }4 }6 s0 B% E/ \: }+ L+ j/ N
            UARTPuts("\n",-2);
9 C: D2 C  y3 Y' t) E        }3 J) H& _  `. {  U* b" i$ m) w
    }7 X  j  P" n" c! C

* x0 h; W* m8 f: D}

1 H1 E; ]* G- R& d* z5 J

/ i. Y/ f" k" ]( q1 \
8 n8 G" b# P+ ]
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 u- @0 C( `" ^, O$ ?
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) z9 \. N  f0 R$ s





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