嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& ^  H" ]5 b+ x0 W; ?* F
Void UPP_TASK(Void)$ ~! I/ F/ w& M
{3 [( c1 n# x( J( l9 R; u; ?/ o
3 j" `3 C( ^6 ~; l* |6 I) O5 B1 [/ K
    int i,j,k,target_int_count=2;
: o' F6 J5 I& k) p6 R$ M5 w    char ch[2];* A- }$ n  e! |+ D3 @7 \

) E" q" m& h- W( d
1 Q! S$ G2 j5 y" d6 a, c! j) V2 [! m% Z4 O7 G/ k
    upp_interrupt_count  = 0;
9 v0 J# `, K* E2 W6 T( W1 V2 K" V    upp_error_count = 0;
+ G8 W* {" g3 s7 U  f0 p- r# N5 _. |- `% ]  R$ \# C; T: u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 S2 D/ ?+ _6 K1 q- W
    // Initialize data buffers
* s$ D  A' q. b. X8 }% ]2 ~" z    for (i = 0; i < upp_frame_size; i++)5 p1 `! T7 D8 g+ Z1 R5 n
    {: S. h: ]7 M; I6 r
       upp_buffer_b =i;
" v; Z/ g( z6 m+ _: W# m       upp_buffer_a = 0xDEAD;9 E, w& x0 Y" ?0 Y' I9 ~6 \: Y0 ?( R
    }
6 `2 u! t- s$ k8 ^# v) ]3 C: M, `- V
    //for(i=0;i<1024;i++)
$ ?9 t$ ~, L4 M+ |1 M    //    temp=0;
. o; r; u4 p- m* ~+ h0 i2 b, c2 |/ s9 Q
    //UPPReset();  `, |: N- s8 U, J6 q" B5 c
    /*启动UPP DMA传输*/2 ?2 V0 F2 @8 b# ]
    UARTPuts("upp_prog_dma_i\n",-2);- L% ^( J* Y6 A9 P4 f1 w1 v  }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; k  z# X8 t/ ]) r1 S% Q    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 f6 E3 L4 J1 `, W' t. q
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 m: _3 Q1 r# j7 D' P) \# `- |" A
8 B8 q# I2 A3 Q& a) G& n4 E# ^7 W1 T' K
    UARTPuts("upp_prog_dma_i\n",-2);) S# N) y/ @. h9 H4 t
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 m7 M( O; E2 A7 i. Z2 X    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# ?8 Q$ z9 E1 k" r$ h    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);1 ]/ Y6 K# j9 I8 r, p( G
/ x% x( Z0 ^! }2 j! U
    /*等待UPP传输完毕*/6 q0 [$ U8 H  j1 L. ?
    //i=0;* C7 A" M7 c1 E" R
    //j=0;
( X% c( h8 J3 G$ t+ N1 Y    while (upp_interrupt_count < target_int_count && upp_error_count == 0); Y# H. _, i0 [" H2 r0 ]; I1 \
    {
  ?  U' k! O5 I  g9 S9 M        /*  测试UPP传输的同时操作普通DDR数据
& t5 ^" f% h4 s        temp=i;
5 t7 [; O: Y6 z( T) X+ G  x        i++;
' F; q* _* Z6 |) C. x' |1 O        if(i==1024)
9 Z8 C! D4 F8 v( b        {
7 J) P* Y$ L* N* u: e) T            i=0;
1 Q( l/ f- H. [* f- T            j++;
2 Y! y( E' A3 W5 q$ c        }' c8 y! h; A* Y! M- w4 P; l
        */) g8 Z8 [' P% u* y

2 G) ~# ?$ f7 v. M" U+ t  U* K6 T       asm(" nop");
. Q6 `! ]+ v( s: z3 X! n5 ?: Q8 s3 s+ ~: z9 J9 Z; [1 v; f% E0 @5 \$ a
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- e5 r/ r! [+ K6 [
    }1 a( F) `; h  z( u2 l/ y" _! }6 J

) P# x" N* B% S  W- o6 M    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 [) H6 b, O7 g% ?  N  O    //UARTprintf( "i=%d\n",i);
0 R0 R+ L. O& o( F    //UARTprintf( "j=%d\n",j);
2 y* s: a% q5 y8 C/ L    UARTPuts("Data mismatch in buffers.\n",-2);* |1 j% {9 ~; n5 J  E4 T0 m
    if (upp_interrupt_count == 2 && upp_error_count == 0), P- C  L% d2 M
    {
, b9 G% m, W$ ?+ h: y        for (i = 0; i<upp_frame_size; i++), ?4 N# J6 L) z4 Y
        {1 [1 w: T& p: z
            if (upp_buffer_a != upp_buffer_b)
4 G4 u" C4 e( x% B1 t# @            {4 u0 o3 w* {* e" w' O( b9 E
                upp_error_count++;
/ X; K  _: n! h, o1 e            }
2 u* [# h7 G, L        }( V* v" R  \7 z
    }& F) y% h  u: z+ p2 y

9 G! S. q1 F+ a1 ^1 U2 T    /* 报告通信结果*/
8 D- X8 `# ]7 u7 w    if(upp_error_count != 0)
. t4 i. v1 a- e8 O, ?+ }        UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 z8 J1 |' A0 n% U4 ]7 ^    else
# w8 u5 c7 o* U$ b; ^3 k3 |        UARTPuts("uPP transfers complete!\n",-2);" W0 n: y' s' i3 Q! B

; F( V5 b5 d2 R9 y' N    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) p; V9 N7 d1 U: `7 w    UARTGets(ch,2);0 Y: I& X! ?; o) z7 M
    UARTPuts("\n", -2);( r5 g9 }$ v2 W1 i# ]0 e7 r# C9 Y8 |

8 _3 g) V$ V# ]    if(ch[0] == 'y')
  o' A5 ~/ U' ^. G: w5 N, }1 M. P1 V    {
! y  X4 q% k$ @" s$ y/ a$ b        /*打印全部读到的数据*/
, z: M2 r9 H2 ~( J( l3 k        for(i=0; i<upp_frame_size; ): b# J  }7 R  o& v
        {9 l/ O( X: r7 w5 I% F5 r+ D# Q3 K
            for(j=0; j<5; j++)
- v4 g5 u! D: ?/ Q+ g            {
+ r  v$ O% V& {- b0 ^                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; v. N: [) L) a                i++;# I0 R/ o4 A" ~1 f
                //if(i >= 4096)
0 b! e  G; Z( z( K; V( m                //    break;  V( x" y) ], D  k

. ~5 l3 T- `9 r) b+ O( n) c            }
* s$ g4 c3 c/ r0 R  c4 q3 y            UARTPuts("\n",-2);! E2 z  Q. c  }0 d- X
        }. Z: }" g  Q1 e- S
    }, V( q, j+ q8 g4 S6 v% \
$ m8 ?' n' G* S; F( P; z! [
}

6 I8 e  ?6 g- a% G

5 q; k2 @1 j2 i3 _% v4 o- ^4 a+ H
* g0 j1 G, u" x% o
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 b0 s; n6 z6 ]6 |9 E

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! F0 A' C& S2 x





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