嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 v) g# V9 i! ~3 E) k5 i% [+ a  c9 ]% d
Void UPP_TASK(Void)4 j) S3 b8 v1 W' I
{& `: X  w4 m0 Y

; z0 t0 e& S' O0 g; v7 K( m4 g    int i,j,k,target_int_count=2;
# ?7 g1 @7 m- |    char ch[2];
( d% L1 @3 I5 |. l% C& x
& n; e. L3 O" ^4 q# M* k
0 v+ H0 B. |1 n. |3 L: |
) n3 t6 K5 F" Z7 m( E# m: t    upp_interrupt_count  = 0;# ?* G5 k8 H/ l0 F! J4 z" l/ M
    upp_error_count = 0;
: c& _5 E" S  b6 i: q$ ~5 A2 V: h: i* i. @
    UARTPuts("\tResetting uPP buffers...\r\n",-2);# W" S2 H% O! Y0 F: N5 T" [
    // Initialize data buffers
) \  _/ I# F# z- y+ z3 |    for (i = 0; i < upp_frame_size; i++)- P# H7 g- N6 [
    {
% Z; F2 c, ]0 D, X: w" k1 s       upp_buffer_b =i;! [! B0 \; |) c7 N) {
       upp_buffer_a = 0xDEAD;
$ `" @4 \: X0 H    }
, v( n( r; t* d9 S' |
+ K7 v5 j$ V4 e% |- \    //for(i=0;i<1024;i++)4 Y, \2 |) f- |, e3 q7 E
    //    temp=0;6 |9 ]4 W- v! R+ R  h6 D

+ y8 Y; f5 U9 l" i4 r    //UPPReset();& h+ K/ u% l# q+ }3 [6 H0 o0 U4 X
    /*启动UPP DMA传输*/
6 ~! n' J# i7 L+ h! k& ^    UARTPuts("upp_prog_dma_i\n",-2);, d# e. Q5 `" h% ~( C
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 L# x# L7 {+ U, O  _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 {0 V; A& J6 d7 |5 t+ @
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 r; X9 f% P/ \& @

: Q( l" ^1 u5 ]+ [& J    UARTPuts("upp_prog_dma_i\n",-2);
: N6 N5 N) W; B- J    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 A* x8 q6 ?! D
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: C: R9 y1 h5 U* f4 R
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);2 K  h6 H! _0 x* e; d  |5 z

  I# v! {; ^, r' A8 R6 K    /*等待UPP传输完毕*/" W& ~, _" P, z
    //i=0;  S' M7 h2 ?8 }& D2 A) Y# X
    //j=0;8 w) h6 A+ G1 i, Q8 S1 F
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ `, _- D* Y* Y- _4 {    {
  o6 k- C7 A2 J+ o        /*  测试UPP传输的同时操作普通DDR数据
9 X2 ^. r$ v2 z4 [7 m        temp=i;! c! u, Z" X- t; m8 d  ^
        i++;8 N5 l9 N+ @2 [9 `; a
        if(i==1024)
# _3 t+ O8 F* H8 l9 D        {
- {6 ~* I; U! S            i=0;
3 y4 s- N8 M% [- i            j++;1 z6 I% F  O2 U+ e( {! Z
        }
- H: X/ E. y+ Y        */
/ j& O$ V5 T9 p" Q, k' q8 T/ j5 Z
' T9 C# L+ @) x, I$ ^       asm(" nop");& c  E+ ^) B; ?

+ T5 [/ q# ^$ k) q       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ X' J! f3 f6 Q8 X
    }
% n( v3 ~/ n6 y! Q3 @9 |9 L* F. E% I: h$ l7 |7 l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* v8 X/ ]' y5 N5 J* R  y* g# a    //UARTprintf( "i=%d\n",i);/ j) D/ e$ e* M% i) z$ B2 z7 `
    //UARTprintf( "j=%d\n",j);( o3 a! G! D* J) b/ K- C3 d1 o
    UARTPuts("Data mismatch in buffers.\n",-2);
# I0 |3 H" P" c# D  {    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 y: p) g4 D" Y+ |, ?( |8 q    {
6 d: V# f. w5 [( Z" U        for (i = 0; i<upp_frame_size; i++)$ V; T- U. h7 S) ?- e
        {" Z6 l$ }- E+ ?; B0 H
            if (upp_buffer_a != upp_buffer_b)8 E) Y" V+ t# m
            {
( r; U- D7 V! ]. I2 b; z) M                upp_error_count++;
4 X( e3 t' M8 F            }
9 f% Q; y# x' L: _        }# ^- ^! T' R9 Q1 r2 w
    }2 f( {7 y. D5 v% D/ |0 C3 Z
$ x% h: ^  _9 z
    /* 报告通信结果*/
/ H. q2 [( S' _    if(upp_error_count != 0)
3 l- w7 b: `# |* V6 w        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 G* P. X: m8 C( x0 |
    else
7 J1 M  Y9 f5 E9 ?8 O2 y+ }4 t6 }5 W        UARTPuts("uPP transfers complete!\n",-2);" Z6 x" d+ E/ p2 |

, F) R: G, y7 t; i    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- |8 C, ^$ I  A2 ?# E5 ?
    UARTGets(ch,2);6 b6 q8 Q4 }: J9 @1 m% p: \# \
    UARTPuts("\n", -2);: D1 q2 p4 u7 r1 \% C
/ C9 U4 h5 X6 a
    if(ch[0] == 'y')
/ [% D5 e/ u. ?/ t. k. E& [) F  d    {" B3 j0 n8 d9 D" k/ Q, u
        /*打印全部读到的数据*/
% H5 B: l) L; A/ r& s' ~9 X3 v        for(i=0; i<upp_frame_size; )
) V. T' U( |+ p) V        {
% q$ p$ s  g2 d            for(j=0; j<5; j++)3 M% ]" g- e. h  W, {4 X* U& S
            {
: T' t5 n% w; D; y                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( O* L+ T1 c) ^" E. D2 o
                i++;
$ ~  Q6 q5 J: P' U                //if(i >= 4096)
0 W5 J, Z: k. f) C% ]                //    break;5 }- m8 v1 y$ a

( k! Y, l& \/ d& F5 u            }
* C+ x! t' m" F0 ~# o            UARTPuts("\n",-2);
, }: a* v* A) x/ F/ F+ Z! X7 Z        }
$ i- m0 a) r; F% L    }
" V8 D$ [- b4 p: T: x
& N; ]! X2 i* ~  _# S4 o: D}

( t! Y1 C4 D2 [# z7 \

, n* u' e! Q' i0 F; }
( @6 T5 N! u4 |5 R: ^1 c/ A
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 t; U! n  ^5 z

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 C6 g1 H& `% U" ^" a6 {+ O# ]; b





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