嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 P8 j- D6 Q0 V' j4 D
Void UPP_TASK(Void)
, Z8 P0 K+ Q/ l3 x& g7 k{# R0 H( h8 Y. d3 U2 G; r; `

, h; t  [+ D: a' [/ c# g    int i,j,k,target_int_count=2;7 y0 ]5 \2 w0 S( c. o
    char ch[2];
& U6 I( D+ x; f2 L4 S! ?6 f- X0 a' I3 P6 X

5 a0 [) ?- l+ ^1 {( K2 ]3 Z4 ~2 D; a) V& k
    upp_interrupt_count  = 0;
  e! H  m6 z5 ~; z* F7 b1 F    upp_error_count = 0;8 x5 d; J3 _7 X5 i' D, i) e& a4 [

. m9 F3 u' K) w    UARTPuts("\tResetting uPP buffers...\r\n",-2);- G; z0 x* _3 K/ s8 @, U3 e, b
    // Initialize data buffers
' K2 e6 h4 n5 \3 c    for (i = 0; i < upp_frame_size; i++)8 r9 c0 ^; |/ V  c/ k/ }
    {% P7 U- Q, z3 I2 H# k4 `* y
       upp_buffer_b =i;
) |% g' f5 d8 C. r8 S* x9 w       upp_buffer_a = 0xDEAD;
$ F" }( U  n) Q5 [9 E    }9 V& X2 I0 m7 E* s4 l

$ H' C4 o5 }# u6 d& \" m    //for(i=0;i<1024;i++)5 ^) m8 }# C( y$ z6 \
    //    temp=0;
$ Y- J  O0 j. }5 `6 |/ b
+ U' F7 ?& D5 r$ ]    //UPPReset();
$ ]9 \6 t/ p0 v" E& |9 t9 D7 P    /*启动UPP DMA传输*/; o2 ]- F6 }% m$ P/ @. D7 X: n& y8 @
    UARTPuts("upp_prog_dma_i\n",-2);
$ ^' w6 i# T% W# r    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ Z  ~" F( b. O# @& D
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 e- d! `$ D3 u$ R8 t& l    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);! Q; g- q* R% ]4 _

# e7 i9 ]9 X& ?  Y  X  U    UARTPuts("upp_prog_dma_i\n",-2);$ I0 a; ~) p) x. Y0 A
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 K# M: [( G- e! R8 t  o5 l    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 n) s& k' a& @) x; Z# ]" _
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( r6 H% u9 ]8 R3 `
6 }  p' I; I& q; e/ M3 W7 \. S, |
    /*等待UPP传输完毕*/1 _! Q, j/ H4 C9 r2 ]
    //i=0;
9 h- A3 o4 ~! [9 O/ S0 B: K, Z    //j=0;
: s  W9 p( c; }$ ]7 ~  T    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, V* ?8 Y- L& N1 \  \, v6 y    {- ~- @6 C- T) m1 d0 \: z
        /*  测试UPP传输的同时操作普通DDR数据
. h- {9 v4 x) H0 f        temp=i;
+ Q3 @, q; A+ \4 k        i++;
) J/ Z$ W1 @" Y% y- N0 H1 [3 w        if(i==1024)
5 [5 v; N# R' ^  S+ P        {! V# h2 X; c/ ^/ {
            i=0;
% S, f8 Z0 y! A4 e0 w3 c; \4 w            j++;$ K" C: J8 e9 F! z. c" U' `; D
        }
. m- ~  f1 ~$ Q: N" H        */
+ w* I; F9 U3 E( }" g8 A5 v0 z: ]2 T3 t3 Q9 g8 x' c- J' W
       asm(" nop");
2 j( _1 p& I" r! D/ q) d$ l' j
4 d4 W  q) B' F" z1 y& c$ S       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& @! Z* W9 ~" Y5 Y/ _
    }" @, f7 M% ~+ f$ w7 B) L
+ q# d7 p; l  V8 w# c' e
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) O$ n' H! L# @8 Z    //UARTprintf( "i=%d\n",i);
. t2 F+ U1 G* U9 O8 ^- v    //UARTprintf( "j=%d\n",j);
; O- P# }5 Q2 s7 P$ L    UARTPuts("Data mismatch in buffers.\n",-2);* }. G1 c6 `. n+ ~# ?  h/ A
    if (upp_interrupt_count == 2 && upp_error_count == 0)) y5 ^( R" y( m; o; f+ R
    {
" N; Z, i9 u- z3 w  D        for (i = 0; i<upp_frame_size; i++)
+ o5 ]  f$ [$ I3 g% |3 N/ z  O        {
7 a" [/ ~3 i# y1 K3 M; {            if (upp_buffer_a != upp_buffer_b)% J" \; Y1 f" |$ r5 Y. b
            {
8 S: C: T- n  @                upp_error_count++;: k9 a/ f- Z0 R& j& s/ Y
            }
- @! s' V' K1 R! u5 ?* N        }1 P& l$ `0 `2 r4 [. C' O6 F
    }- v  [7 w9 X# H# q$ c" K

9 W+ \/ c; y( ?! r. F+ ~    /* 报告通信结果*/
$ p8 Y! [  V( n# E+ |    if(upp_error_count != 0)
3 J, d1 n- K  @; |        UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ P- R. R; |/ @  x% c( D3 q    else7 \5 N5 h# l; T
        UARTPuts("uPP transfers complete!\n",-2);5 K5 [  _7 d" S7 q

4 F  N. x3 n6 ]: L% t    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; J7 P# y; A0 Y  B- B
    UARTGets(ch,2);8 B: w- B& ]) b+ V$ D
    UARTPuts("\n", -2);4 y$ D( S& P) D

* _* b; C- c. u1 S    if(ch[0] == 'y')
# ?  r; V( `8 I7 P    {
- [- i* Z. ^! t) \( Y& z* Y8 X$ y        /*打印全部读到的数据*/6 T6 o8 ?. x  C/ A
        for(i=0; i<upp_frame_size; )0 ^3 h3 {3 [, P
        {
7 C8 F7 K; _# s0 v$ P6 U+ \            for(j=0; j<5; j++)/ K: ]' j  D' K# r- o7 p2 m
            {
7 [; E' `) m- n* y! E* Q! E                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
" X! n& d7 ?( U8 v3 C- e8 Z                i++;
2 y6 H1 }; Q4 W; }- P# B" Z! I& d                //if(i >= 4096)/ L9 q* \$ a1 W$ I6 M$ ]
                //    break;" t; W1 u/ K7 |& n% a9 i
4 [# u3 F( X! [! m6 v. e4 F
            }" h7 I7 |: j+ e8 U
            UARTPuts("\n",-2);
# u3 I* s3 O2 G8 D        }$ t! ?! w) H% Z) L6 h1 s
    }2 |! k! ^0 k' m/ R

( I4 l- t* N. s+ v}
* e# o* X3 M( k- C( h# W
( S- E8 ]1 \9 c

0 a0 q5 X% u9 H& h4 w
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 l1 r# C5 l( s7 \0 B" i0 A9 Z

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ S0 u) S+ H# j$ |% \/ \. J





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