嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* R: K  E* o* t" \; }
Void UPP_TASK(Void)
: X: w$ b3 V0 ~, r{
9 A6 u. g+ S" h" X  M
9 d; N) q( R) U& k  \' W7 `    int i,j,k,target_int_count=2;
4 I( p, j. E0 W9 D7 H    char ch[2];
- W1 [" f. O9 Q) P1 n" D$ F* B+ L; j6 G( X$ S* p
5 ?* q8 n6 s5 Y3 H% o
, G! z  P. X3 o( q' p9 L
    upp_interrupt_count  = 0;
# \% q& a) \" Z0 L) K8 ?    upp_error_count = 0;" o5 T# k) \- E/ R7 `( `

/ g( e8 n5 ~7 ^, F. r, @+ n    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 _) N6 u5 F2 W3 J3 J6 _( z: w    // Initialize data buffers
% p. g/ K- A3 S0 G  d+ S    for (i = 0; i < upp_frame_size; i++)
1 v6 @7 I, ~( z    {
2 `( v1 `! ^0 M6 m7 f' [       upp_buffer_b =i;, b9 ?+ |7 F5 x0 z
       upp_buffer_a = 0xDEAD;1 P- e+ V" x, C% w/ L& k  c( g! {  U
    }* U. d- ]5 p. x& h2 Q, s2 _2 Z

6 D- E- R" g9 H- B$ w    //for(i=0;i<1024;i++)
' L  e/ s- d  J* o- X    //    temp=0;
, d( p+ `) a3 x2 g! g3 D) [( x" D- {  x- J) G
    //UPPReset();$ l0 ^( E' w% \5 n* A8 \
    /*启动UPP DMA传输*/; h6 B" ^6 F# E+ P& @
    UARTPuts("upp_prog_dma_i\n",-2);1 g+ Y! o) a1 b/ D! k0 V. e$ p) m
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 m2 i  W5 s# w4 s4 V# w6 U4 c9 `
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ c2 v! A# _( G  K- H+ u& a
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( m# q$ m% U: k  F) R. y" h  F0 w- }* g) ~8 X& e3 \  i
    UARTPuts("upp_prog_dma_i\n",-2);
$ ?6 n6 K$ ^: g4 N5 A8 N# {4 I9 s    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 a: d, i4 A" u3 X4 m; r( d3 T7 ?- m! O
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 M) a, O- m& D, a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" X6 R; o' @( G) d/ k
) Z+ e! X: J+ ^! [0 }, r
    /*等待UPP传输完毕*/2 l- a( w( Q. K' X- u
    //i=0;
3 r4 D+ Z  t# _    //j=0;
9 k) ^4 u" C& J& c& Y1 A    while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 d6 C; R/ U* }- U6 [  Y5 a( n
    {
$ B: [$ g, O3 c) y        /*  测试UPP传输的同时操作普通DDR数据8 \2 G5 Q$ a* p
        temp=i;
7 Y6 g5 |. h$ Q; O, b        i++;
1 f0 q+ @3 Z. J# w: t0 ?. J* D0 W$ p7 T# ~        if(i==1024)
2 H* P! @* Z9 I2 @7 o6 m4 Z        {  k; g4 T5 y# x) {7 \0 r1 b' Y1 m
            i=0;) N7 {# P0 L; n( s! f
            j++;0 J' `3 G' X% V! a. b! k
        }
( \; X' \. q9 h        */! n; R" k" B* w8 D1 u1 Z

6 p" j' w- }! z1 {% `, O/ V# }       asm(" nop");
7 q) c$ z% H1 s' O4 ]
$ C! x( a" I% |  i  ^       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& P( N1 e4 A- ?" o    }
) E+ ]& F) `( F+ i! Q: b9 v' ?: L
+ \* ^0 b% {8 M" Z# I    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 b# p" i6 j: G. }' F$ K    //UARTprintf( "i=%d\n",i);
5 I8 K$ M6 [9 ?" i, N: y2 K; y+ S    //UARTprintf( "j=%d\n",j);
8 J+ ?) J6 b, Q' P' {6 T. o8 f    UARTPuts("Data mismatch in buffers.\n",-2);
0 M, E' ~  q1 _' S6 S: E    if (upp_interrupt_count == 2 && upp_error_count == 0)
  n- C. x0 [# V; X& N; ]5 E2 @    {
9 M$ R4 F0 I4 Y. i* I; U+ m6 B8 X        for (i = 0; i<upp_frame_size; i++)3 B$ W* @! o' {: j/ _% ^' T
        {' v, l0 n6 M1 t- p# o7 v
            if (upp_buffer_a != upp_buffer_b); X: h! A0 w( ^+ {: s0 y5 @
            {
% L; Y# j1 w# D0 p- W                upp_error_count++;- Z* w  \4 q( X2 C5 L
            }+ [0 ]- Y% \9 h  p$ S! p: l
        }
8 W' T' f2 D; K/ W" v1 A    }
& Y3 |6 k  Q& X& I% C9 n7 I0 Z( X" E4 s- w: b
    /* 报告通信结果*/0 x9 _' a% t0 `3 i( t0 }
    if(upp_error_count != 0)# a3 b5 a- `& x4 L
        UARTprintf( "upp_error_count=%d\n",upp_error_count);( K  g- b& o* i  y) r# y, D
    else4 \# U$ f6 g) S) t
        UARTPuts("uPP transfers complete!\n",-2);
: A! F( w/ \& b8 {  [0 X6 h5 X7 X) M1 x8 F) s* ^) l  c
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; J0 ]8 j8 k* T, V/ a- m. @8 o    UARTGets(ch,2);$ d6 {' ^5 k: T0 Z' E+ P) G
    UARTPuts("\n", -2);+ b6 c" h, Z/ o7 V
2 w" r+ O8 Q$ V9 E/ I8 |6 ~
    if(ch[0] == 'y')
+ x3 _1 {8 B* l- Q) B6 s9 @+ ?7 X3 G    {
5 h; c3 N8 @  H7 m" G        /*打印全部读到的数据*/
& D3 S% I, W3 {  q) O2 Z        for(i=0; i<upp_frame_size; )  B2 u+ @& b" i6 V; _) v/ ]
        {
- t9 M7 N8 l+ b% R) e. G            for(j=0; j<5; j++)
( {* n: g  |2 j/ s4 u. R            {
! L+ C) v9 J4 O0 z8 c& X& j5 p: [                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 I$ c9 G, X' h, ]1 J                i++;2 U, J3 A3 B  ~1 S8 I7 E
                //if(i >= 4096)* \8 b0 y; \/ n% I
                //    break;" l) P2 ?- T8 `4 s% R
, i% g/ G1 r% a; v0 d& a
            }
. ^5 G, C) l, C9 }) x            UARTPuts("\n",-2);$ G5 n, c5 J8 f, k
        }
9 S6 K! r8 |: e% t  e( q    }
$ k; Y! G5 z5 f7 M$ B2 @6 ~: g! I2 H* M1 ^0 I  b+ s
}
' P2 M9 j. u+ \, v: d3 O$ Q

9 v( W, A# N6 S1 n4 b' F
9 V* o8 F% f: S/ o: J
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。' m3 s! |  f0 [

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 J  o. c- p3 n& \3 y+ E, x  Z




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