嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 G) J2 q  ^2 s% I4 E! l6 ^5 ?& i
Void UPP_TASK(Void)
4 _  _  q* }/ N" {1 }{' v) @9 U$ [  ]  y; j
( }2 o) m! X+ _# T
    int i,j,k,target_int_count=2;" O6 O) V( q& I$ j1 j& A' h( g
    char ch[2];9 X/ @2 O! i, o; M: ]

& n( E1 \. ?6 N+ n% [# @
/ a; n* {  F# K% [+ F
+ i: X, P4 ]9 y8 [6 A& u3 ~    upp_interrupt_count  = 0;- Z/ @! A: ~) c4 f" w* o
    upp_error_count = 0;  F; c" T, v0 Q* S" g: h

4 s  t# n# A; f) _* d- N+ x    UARTPuts("\tResetting uPP buffers...\r\n",-2);( Z9 Z- U; f$ j% D
    // Initialize data buffers5 p9 I7 R' o* ~- l! o& E9 b& Y
    for (i = 0; i < upp_frame_size; i++)
2 k' ~% f! ~- `8 I4 m3 q2 b) m    {
( b5 R) i5 c$ k. I, B- l8 H       upp_buffer_b =i;
- \. ]9 i- C/ M" h       upp_buffer_a = 0xDEAD;
, x: i6 {" n' \' P& K    }. j6 N: z7 R; G& L+ H6 X, u8 {' h
: d) i" N- U6 W
    //for(i=0;i<1024;i++)
1 d  Y! r& y* m4 E0 x    //    temp=0;
1 J$ p& G. p2 r; r
, e  p4 p' R3 D! O3 S/ E% Y* ?) s    //UPPReset();+ e: l4 v/ Y* S; [' H
    /*启动UPP DMA传输*/7 g: r3 ]0 Y0 e, T' T
    UARTPuts("upp_prog_dma_i\n",-2);
8 i# h1 ?7 @1 r9 c; V1 F    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;) w" ]2 K9 c4 ?* U: G
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% Q' M' D( g% f4 s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# N) u: z: b  h) N! K; g4 @. ?, v. _. X6 Z  m1 q' T
    UARTPuts("upp_prog_dma_i\n",-2);
7 u( s9 a" I& [) m" ?    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# y, G4 U/ A$ o' H, X2 \- v2 T) B
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! P" a6 C5 m( |7 x3 I5 q8 u
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, T/ v0 x8 h& D# j7 Z

- f. p  F1 r  X. M* R" j    /*等待UPP传输完毕*/0 F, Q3 E- J3 Q' t/ R
    //i=0;
  |* U" e" V! X7 |6 N9 H    //j=0;
" w0 w* e  D* V# `& M7 L    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 t3 `/ t$ I3 U7 [; W    {7 b  v% c) ]2 H9 M  j$ O+ b! V0 ?
        /*  测试UPP传输的同时操作普通DDR数据
6 S- T, v' o, Y" F* W! S/ v* Z        temp=i;
9 K/ ]8 ~- ~- ]8 Q7 I- P        i++;
3 n9 a- w" i! ^7 q        if(i==1024)
( _5 a) f5 @5 ?6 t9 M# N$ I        {, ?) `- `- C, O: m- Z) W9 V$ ?
            i=0;
3 I0 P$ |; V& ~            j++;
% ]1 S; `- C  T: O. K        }
# S3 t$ e& P# A3 l* i        */
  l0 b0 p- [! V4 X
" y( Q  `. q0 i7 N! E; e' X4 \       asm(" nop");
, M* j' x) E# i0 A4 ~' R# ~9 {
; z1 V: E7 p2 k! u$ M/ K       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);; }4 R& v% u4 [- O: f: l" f
    }
! k! D6 a6 i$ k3 R7 z& p! a) p9 h$ a# S0 l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 P4 Y# n3 v1 H) }; a5 d7 E
    //UARTprintf( "i=%d\n",i);
" y0 r- w( {6 E3 ^3 S5 m8 K    //UARTprintf( "j=%d\n",j);8 ~; _) i2 {' L* i
    UARTPuts("Data mismatch in buffers.\n",-2);
0 t" e' d1 [) ?: E! H" P; c) d    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ `6 a# @: y9 k" v2 d    {
5 V; W% g' R. ]' R& A+ D, Q/ C        for (i = 0; i<upp_frame_size; i++)
1 e7 O$ }  e7 Z/ Z5 C! F: \        {  P. h- J& n' w
            if (upp_buffer_a != upp_buffer_b)" M& G; A  _( i% K- O
            {8 L3 G# P" y( p- N' D
                upp_error_count++;9 O$ s# d% x6 _/ r. g6 R/ O9 Z* f
            }% k1 ~+ K0 H$ H; E9 m: O7 e9 B
        }
, @- X) X* Q5 i) ~' X4 M    }) D6 m! V  b; ~  L1 P: F

6 {% x4 X% T! M+ U# |    /* 报告通信结果*/
% g5 Q& g) D1 i, [0 n* G    if(upp_error_count != 0)
+ T7 c  r4 x" i( W9 g        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# |5 O7 X3 V2 o0 y    else4 m' r5 D" q1 |8 b$ a
        UARTPuts("uPP transfers complete!\n",-2);
: G7 ^2 q5 P  H% @& V
& H% p! i+ Q' p    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  t' l  |% I0 e( p9 F    UARTGets(ch,2);8 _; z4 e: x4 Y: C9 _: j" [+ C9 B
    UARTPuts("\n", -2);
/ ]; X( w3 b& p' O" s& {! I( u' A; w9 O4 q# w- D
    if(ch[0] == 'y')
* b, s3 p  U% h& E3 @5 g    {
4 e  X# S: F, U" ?* w5 I  o        /*打印全部读到的数据*/
- y8 ?$ t+ k: n. {" R/ |' E        for(i=0; i<upp_frame_size; )
, w' R* w# D, E8 ?6 Q, `        {5 ^* L! \( @" d: c9 y
            for(j=0; j<5; j++)  V' v# M' ]4 C+ M5 N  N7 z
            {
7 w& ^; S: y' R& J% B4 B/ L# p                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 y7 o  N# y  C
                i++;/ P. G& Y. D/ |2 U
                //if(i >= 4096)! [/ o6 J3 |3 s& k/ p- D
                //    break;7 F( k8 h, X1 I$ k! C' F
1 _" p! j2 Q* s" m3 p" A; Z4 N7 \
            }
5 j+ l- L. x% }# B& r8 q/ Y            UARTPuts("\n",-2);
' E' `# T* h6 y  r5 Y        }
6 L( D* ~- B" G+ B) w) b, |    }
/ q$ @; B  X1 h- K0 r1 r& Q7 o* Y* }" m  R
}
4 _: c, ]: Z0 T% d' p0 F! n" N
- D9 c3 q' O* \0 a
' o" |9 ~; u' k9 g, I4 Z* C

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。$ v( R" _1 o" `5 `; a

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& Z1 L5 g" D2 m& ]) Z





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