嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 A5 A9 y  T- t1 }4 C
Void UPP_TASK(Void)
: y; Q/ N" v$ Q* C5 h' i' d{
8 z1 f+ P' F% {5 P1 x/ y3 H" b
0 G. S/ O9 Y6 Q/ m+ @5 s    int i,j,k,target_int_count=2;
4 W1 B7 d. R$ s+ N, Q    char ch[2];
# Z$ C5 K! U0 N# h: |
9 h. M: F& y0 f1 s  G, @$ ]' d0 G3 y) ?, |- \

/ D/ l5 G7 d6 E% B    upp_interrupt_count  = 0;' ]2 q+ y3 a- v" {4 w$ L% s/ G
    upp_error_count = 0;. T+ q, p4 @' f$ D' u1 @! Q

# R* `7 e4 G! W    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 t& f% x+ X# p$ a( f# H. U$ c    // Initialize data buffers4 W! U& R4 V, K7 \* W
    for (i = 0; i < upp_frame_size; i++)) k8 R, E+ L: M9 |/ X7 ^
    {
+ x  q" g; M$ q6 y# V       upp_buffer_b =i;- |: S4 Y1 Q4 a1 B# z6 ~
       upp_buffer_a = 0xDEAD;6 W+ o! E1 l; s
    }5 I1 ]  ~' Z7 q6 ~  b' J

" x. S% `6 C* K2 C7 F1 \7 w    //for(i=0;i<1024;i++), d" [8 Q8 d& p
    //    temp=0;
$ D/ K, E# ~8 B  M' e0 ?( E3 z: a4 l9 O5 `+ [3 Z# b
    //UPPReset();
* _6 O( t/ K( K% V    /*启动UPP DMA传输*/9 j# C* w* }: {
    UARTPuts("upp_prog_dma_i\n",-2);
- E( U5 g) v7 `, o; ^    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 l% Z8 `. K( B: e2 v
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 W9 q1 B8 {/ @5 S
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ G4 P8 I" W4 \& a! ]$ \( h# c. K" Q+ a" }  z& V/ B: M9 u
    UARTPuts("upp_prog_dma_i\n",-2);- c7 {) A. E' w  [) h5 q
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 g% C) H% T* \) l2 j" h! Y  ]
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 R+ N7 N. [% w, X$ z4 [  s
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 a& N* S2 L7 R, k7 x$ q9 Q4 s

- ?6 ^1 T: P- P$ n: [: e( o( {    /*等待UPP传输完毕*/
! r( y* n, S: ~1 A# Q    //i=0;8 `" {: m9 d+ T0 [( `9 F6 b9 {1 S
    //j=0;+ [; {8 s" r1 J( p
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  x' P3 T7 g% _- S. R
    {% z6 Q( |, \( v) n
        /*  测试UPP传输的同时操作普通DDR数据! s" Z7 `2 _6 k
        temp=i;
+ s3 A4 }# P, n. Z! N1 _/ B        i++;& K8 b& [. H' p' m2 i$ L* E
        if(i==1024)
8 t- l, _1 ?- _* \2 P! W2 E        {3 f. V, }+ @3 S
            i=0;- E4 S6 d1 t5 P( J, P0 s+ q
            j++;
8 k( k* y, F! L; {/ e1 H; C        }9 d$ k3 _( G/ f6 r
        */1 N9 k1 E7 K( y9 u0 O  a

1 e! i- g1 {& l4 [# p$ u       asm(" nop");! Y% E/ @/ t8 I7 e7 D

: E( z$ A2 m: }, y: f8 Y" g       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' u1 S0 V5 w5 f8 g- c" z; ?
    }5 }8 p1 B/ D8 F* a+ o4 a" ^7 t4 [

* b: Z8 o  Q' |" B    /*检查UPP传输的数据是否正确 (loopback modes only)*/
" }# ^3 L$ O! U) w    //UARTprintf( "i=%d\n",i);
5 @# M" L; Q# A6 U2 b" O    //UARTprintf( "j=%d\n",j);0 j; J# c; ?8 o) U2 d# j( j
    UARTPuts("Data mismatch in buffers.\n",-2);
& A* h/ ]9 _& L' \/ Z" m    if (upp_interrupt_count == 2 && upp_error_count == 0)8 }6 @! d; C0 l
    {# n! ]) p1 q0 m: I( n
        for (i = 0; i<upp_frame_size; i++)
( p2 x1 w; m* c8 b( l        {2 R4 r2 y9 ^. F
            if (upp_buffer_a != upp_buffer_b). _; v& ]' Q  u7 p
            {7 q8 H! g' P* m  d; s' R. w. A
                upp_error_count++;
" O* V  k% N7 S) m$ a            }
; ]- l4 A& `! j' b# f" t9 p/ M        }
  H( L! e% n& y. B    }) ]- A3 V9 `( k2 Q) y

; F% o' U3 P! K1 L7 ^) c' a8 I% M    /* 报告通信结果*/$ ?  u. Z5 i" W* g  N
    if(upp_error_count != 0)
( O3 T! a+ H% T7 o- @        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 v! \+ S# b9 ~) x3 U
    else
# g: m2 G( @6 {3 ]        UARTPuts("uPP transfers complete!\n",-2);
+ }1 H; q3 H. c, X
" p) R! D- g! o  E: Z    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 D: `; E( [& m" ^& @% _2 F# q. O- n    UARTGets(ch,2);
( V2 I& `& o9 f; @0 N    UARTPuts("\n", -2);
3 O# }8 s- Y0 Y+ G4 n. a- ?, [( K$ ^. T  b. i
    if(ch[0] == 'y')9 y+ T- M$ W$ G# T
    {
9 j- s3 j4 M# C5 s+ q, f        /*打印全部读到的数据*/
3 I7 E/ S5 ?: H; Y2 j, ?, O        for(i=0; i<upp_frame_size; )" y. {. U" X+ F: g, ]1 x/ q
        {  x: V3 S. u0 E; R8 `3 b+ V
            for(j=0; j<5; j++)
6 d& F: H/ b8 J0 k( S            {, S& C2 c. q: L( u/ K/ }8 q$ m
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, a- D2 n7 ]* _! |; [4 H! r) t+ n
                i++;
$ a7 J% k4 e" I$ N+ L                //if(i >= 4096)2 \, a/ w& l* U3 f
                //    break;
; v% ]# i; F- O0 e# X0 v( E7 ?+ F2 P2 a8 n# ^1 e$ r
            }
2 c7 v9 q% y& [) u; Y1 R; i# s0 ^            UARTPuts("\n",-2);
, e9 R+ n1 Y- H) a" w- b6 t, |; X        }; l7 C6 X, J6 ?" |
    }0 ^& ?0 ?+ u9 {' G5 R$ v4 \: ]

/ s/ c- R- o- x6 r5 _( ]' W9 ~}

2 c5 y  _+ t  B/ j2 N- b" `% ?4 r4 T
4 ^9 k: T6 h& k2 g1 G
0 d$ Z1 D  q7 W/ R

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* g2 C4 w& @+ P* U8 p

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- p* u8 ^9 s( E




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