嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" }6 G1 M. n4 `$ {/ |. p- A
Void UPP_TASK(Void)  v- ]+ s7 i* L& K
{5 y( V% v: Z1 o# z* r( U

2 n5 R6 k  E* W4 F$ w; _/ e    int i,j,k,target_int_count=2;
/ I  t! v! E) @. g" n' ~( k    char ch[2];
+ P" L$ Z, o3 W1 D* [& t, R# S* q% w- m! D' e

1 L. @: ]2 N0 Q. x* r( j; ^2 _+ i% a0 y* @
    upp_interrupt_count  = 0;( Z! r  O# i4 S" w9 B. ^8 o
    upp_error_count = 0;
7 U) z. B% y* [) K' W4 C6 m9 O' V
% b4 c; I+ n0 m, ~" V    UARTPuts("\tResetting uPP buffers...\r\n",-2);$ f+ d  P% ]" @  A: @! P/ E# ]' M
    // Initialize data buffers( p' u$ x3 g  S. c% W) M, B
    for (i = 0; i < upp_frame_size; i++)/ Z5 a1 R! q: ~
    {- n) Z* p2 |% U  i: L: s
       upp_buffer_b =i;
+ \( O2 M. k3 ~# O% r+ k8 w       upp_buffer_a = 0xDEAD;
( _! _# `3 _# k7 h4 G    }2 m( }# c2 z6 k

8 O- u$ n9 V' ]# r    //for(i=0;i<1024;i++): @3 y6 d$ k3 \  }5 }
    //    temp=0;
: a* M: _. O) g9 j$ ^3 ^, S1 L+ k4 j
    //UPPReset();; Z7 {% k5 `. r) P- z  \, S
    /*启动UPP DMA传输*// r. l8 X. d4 s6 _# C6 a5 r3 b) g
    UARTPuts("upp_prog_dma_i\n",-2);% I- f* o; E$ V5 x- ?& l
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ j' H. B  d% K- z( j" X# u- t) q( ]' I    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 b7 ~" y4 ]9 h! _0 D: _2 M
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& Q7 b' G+ y# H- M6 @$ n, K
% a9 U( m4 m4 W2 `% G" T
    UARTPuts("upp_prog_dma_i\n",-2);
4 l2 {% [! F) L+ A3 l( P    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ P  P# w* r% n
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 v2 I, a# v5 q9 Z7 Y% ?- H6 [! B. J) [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  k4 a- U! S+ f7 b3 O* Q6 O8 b& Y& b8 j2 i, R
    /*等待UPP传输完毕*/
( N5 i6 y- [8 M    //i=0;* Z* x5 H. t: ]/ U# Q) V
    //j=0;
  v0 M% @3 V9 S( X" t    while (upp_interrupt_count < target_int_count && upp_error_count == 0); K; S, D0 }* [4 _8 ^9 G5 V- T
    {
8 G3 R' E/ @6 a6 g! W2 C4 v* X        /*  测试UPP传输的同时操作普通DDR数据* i" ~6 b: M: _
        temp=i;5 i5 q7 O. [/ |" G! z1 Z' H2 O
        i++;
+ e- y6 f+ m' r; h' _+ V4 W/ i) d        if(i==1024)
% ?; j- J& i/ R" R2 z        {
) b" n% `* f' e6 b- q) Q            i=0;
$ b6 f! V4 s. [" `            j++;
  H" A: T9 G( o6 a% s        }/ U4 `$ q! U2 y- @% M. w
        */
$ E. e5 D: a7 Q: B* k% D6 `# ]/ H/ i! z, z4 e/ T4 [: e
       asm(" nop");
- O+ b0 C+ t2 ?
+ n- d) d8 O6 y3 y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  E- Y) f6 e8 \9 R- J5 w    }4 \" F1 R; }& B, c

' h* H% p7 d! h; |1 K    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& D& r1 s: [8 |% g, S( s    //UARTprintf( "i=%d\n",i);: @( p4 ]' Y' @: e  x
    //UARTprintf( "j=%d\n",j);4 P0 T3 R# k. C' E' M
    UARTPuts("Data mismatch in buffers.\n",-2);
! T/ A$ B5 l0 ~/ Q    if (upp_interrupt_count == 2 && upp_error_count == 0)
' ]4 d: I0 E8 R* V0 w    {- T! `9 I: C2 Z# o
        for (i = 0; i<upp_frame_size; i++)
6 x$ S% I- Q) S/ a/ |2 A' u; @        {' t$ ]- P4 }. ]
            if (upp_buffer_a != upp_buffer_b)
9 ^0 \8 @. f9 ]# _: T% p# c            {2 C) F9 b9 O3 f, h2 K4 M7 C
                upp_error_count++;
/ |. w7 Y8 n* q. a* d$ S            }  z1 \2 t4 z, O
        }9 {" M% b5 X/ B
    }
/ h2 b% V1 S9 T8 `/ ?5 c
3 l7 K! u3 f: ?    /* 报告通信结果*/
5 t+ @- W4 f! s# K) v2 X9 d3 C    if(upp_error_count != 0)
( Y% H8 |- c9 D$ g        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: T! q: q8 m  z' p% ]2 _8 g9 A2 v; k5 [    else0 Z' z% `* k4 v/ e9 {  L
        UARTPuts("uPP transfers complete!\n",-2);: O# a" w( `6 ?$ V) ^1 [# t

7 l. j& C5 ^# T    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 x; ^4 J3 ]4 N
    UARTGets(ch,2);4 ~7 H& h2 q. M7 S8 X
    UARTPuts("\n", -2);
/ n/ m" b. n7 I, B; W/ ]
7 Q4 ~; |3 H9 q% F    if(ch[0] == 'y')
$ F0 e) t  ~/ v! M: w5 w3 B    {" h5 Q' M4 K9 M
        /*打印全部读到的数据*/
% j: @$ R: B/ w        for(i=0; i<upp_frame_size; )
  H  p: K) `- O2 T        {* W' }1 B  h6 {  c8 r. S
            for(j=0; j<5; j++)
* a7 |: Q  i7 g) c7 Q1 K' ^( B0 y            {
6 w/ M6 ^0 x. W! e( F                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ A! F. j* y4 E& Z7 O  K" b                i++;
( z6 M! ]6 S. j8 p# z$ S+ p                //if(i >= 4096)! Y' E$ U. d( {% S
                //    break;
8 a, s" h6 ?/ E2 o$ j7 h4 B0 k) x. T4 K2 N7 k+ ^( p- m$ A7 ]
            }' n+ C& ?: v4 a' u
            UARTPuts("\n",-2);
4 {: F# L; o) j' u4 U; f        }
0 e  G* j2 s' w, O4 p! Z% t; q$ v  G    }
% r* `* e* z: }
# e# ~& |& F! K8 w: }; @/ W) A}
( k) T% K6 G. b" r7 r2 M0 f% X

2 l2 ]) w$ {5 j; G* ]  [$ ^9 R# }  d8 X0 A/ w  B, J9 y" p/ a* R

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 }3 F9 N' m7 z9 z: M- P3 w
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ J1 a8 J, H6 ]6 v3 w* I





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