嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& y, |  ~# j+ C; T1 b" h
Void UPP_TASK(Void)  ]) Y/ X: q( {6 U8 n
{
0 i6 Q, {# @; I5 i5 O4 E
# R# ]( M8 f+ x4 A+ g* ]- C    int i,j,k,target_int_count=2;
' x) ]7 Y5 w6 m0 ~    char ch[2];
& j0 P4 Z, |  v) Q& w* x" L  E" j" J3 ?  `6 r5 _

8 C) X3 J- A- B, X4 S& l8 d' p7 R' J2 `) ?
    upp_interrupt_count  = 0;) i0 [9 n9 @, s% ?) G( d9 e. r
    upp_error_count = 0;5 w+ v2 t: j! U* ?

# U7 V- g9 Q" a8 x    UARTPuts("\tResetting uPP buffers...\r\n",-2);; J2 }$ \; d0 ~" f& D& t1 ~* y" j
    // Initialize data buffers1 f4 _! H1 V+ R
    for (i = 0; i < upp_frame_size; i++)5 V5 j- Z6 E4 b/ K# j
    {
0 i$ ^0 w! Z1 ]2 [  ?' j0 a       upp_buffer_b =i;
1 `. S, ~( {; D4 [& X2 G       upp_buffer_a = 0xDEAD;: o1 a, @, L. l! H/ F
    }
7 p3 i# Y0 Y6 d5 w8 _5 x! T3 u! \9 A) n2 X; j5 Q
    //for(i=0;i<1024;i++)4 s. T8 u8 \2 u
    //    temp=0;
+ I1 p( {5 U* O* j4 ]& h5 ]  B; [3 J6 ]! ?: @
    //UPPReset();; Y! y( ]3 z  t; h- ^' s
    /*启动UPP DMA传输*/" I4 v4 H4 r: G. [9 u1 c/ v
    UARTPuts("upp_prog_dma_i\n",-2);0 O- }5 z. C3 ~0 s/ m
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" S) w3 l5 R& U7 m/ V
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( C+ c9 s; E/ L1 g6 [1 N    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 J8 T0 g" g: n
- y' `1 o( T. k1 s( f' ]    UARTPuts("upp_prog_dma_i\n",-2);
3 r- I+ H! z; `: L  C4 q2 t    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. n* I  w( @- f: P
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' `8 ?( h: J0 A3 M9 G    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 s( ?+ T0 V! a% k4 {: ^- u  \; Q/ w0 w- @8 F( G+ t8 s# o
    /*等待UPP传输完毕*/
+ w1 W: \/ l3 I" o7 c* B. b" O    //i=0;
/ V7 u3 Z/ z7 A. K# n& g( F7 {    //j=0;
0 g4 m2 ?5 x) \6 f! [$ I9 M    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# G  M1 v1 w  F6 i( ~& Z
    {
* ]: n3 i6 w8 h# r# c+ }* C        /*  测试UPP传输的同时操作普通DDR数据" d  u2 H& E. N( x
        temp=i;) r# q9 G! ~# f7 h: Z/ _$ s) K
        i++;
0 {0 J+ E) q( N* [! K# [        if(i==1024)+ ^' O5 g" P; |: v) B
        {
2 x, S7 P, ?2 x5 j            i=0;* K5 c- O  e$ ~4 Y
            j++;
( F# w% a& X; `3 |) O9 y        }
0 U% H; I2 l' t3 D) U9 H        */& ~$ u6 R# l- ~4 ]
8 D, s4 ~  k7 }
       asm(" nop");: N) z  V& \! c& y. b
: c6 S7 S0 I$ q2 O  `% ?
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: m) b; b/ p* P) N
    }, s, @3 }% t+ ]& _. B
& P; G+ n5 ?- t3 M4 X: f
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
3 c; U& N$ V% \- w- y  }    //UARTprintf( "i=%d\n",i);3 Y  W2 M  m2 C$ J
    //UARTprintf( "j=%d\n",j);
% ?& Y0 J" o3 ^  Y  v    UARTPuts("Data mismatch in buffers.\n",-2);
. B4 p( m4 T( s    if (upp_interrupt_count == 2 && upp_error_count == 0)% `; L' _8 c( P5 ?
    {
2 `# z" m, ~. l/ w; a: Y4 P: {  F% l        for (i = 0; i<upp_frame_size; i++)
( g  G* w8 d8 l5 g4 p        {
% l4 ~* @4 v6 R  g, F' o            if (upp_buffer_a != upp_buffer_b), b& D4 O! f7 O7 |6 l, O! q3 Z3 e
            {' o. X7 E9 k/ V
                upp_error_count++;
  L5 G8 g: ~; A. @! n2 C5 F! g% q            }
2 F# ]- Y$ \1 s6 m! d4 y        }8 B' j& S2 v, j2 i
    }
: T0 b8 P/ e5 n4 q
. r6 U' U' W! V    /* 报告通信结果*/
, i# g% A: i# b    if(upp_error_count != 0)' `: E4 x) S" O2 z! H
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 {* \: }1 L& `    else: G# k: {4 n# {$ Y4 u
        UARTPuts("uPP transfers complete!\n",-2);
+ ~+ b& u8 C3 \& h4 v9 T3 D8 d2 y" w( B4 v0 [, e2 V7 f5 d, e
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 R) v6 X6 O+ N6 t, Q3 c
    UARTGets(ch,2);
! K9 _* q. o8 u1 V2 G9 L    UARTPuts("\n", -2);
$ T1 O6 f4 ^% _7 m# n$ @" p! r. @
% w3 R4 l: V- d& i. u/ k    if(ch[0] == 'y')" B9 {5 P/ `3 e5 s5 c: }
    {
' q6 c0 B, S1 z7 _, w% t. [6 d        /*打印全部读到的数据*/
* ~6 p7 }9 X0 M6 }0 g9 C" {4 `        for(i=0; i<upp_frame_size; )
0 I0 a0 L( ^3 [        {* ^  L/ I. L) q" @0 O
            for(j=0; j<5; j++)
" b. n# t1 q7 @& e/ O  ^( c8 g            {8 N& `5 e# Q7 X1 K0 N
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  F) i# e+ J) p0 B
                i++;( X" H1 k  e; _0 b) R" J8 O1 o8 T
                //if(i >= 4096)
$ b# ^+ I' C7 [                //    break;
' ^! e! H/ V6 `8 K
' w+ t. ^6 w! D! C4 n            }
7 j  }6 G  a+ q  w  t  g' O! N6 U& G            UARTPuts("\n",-2);
2 M7 Q4 u) ~# L/ @$ ]5 _8 l        }  u  A0 j2 ]' F0 w4 Q. l6 v
    }: r# n( y  z* V! p9 \9 I: @
" C! A# N+ ]6 H, J# v  N
}
0 g! E! c4 \) N( e; g

& F6 }3 B7 c! H) m; E8 l: S& O$ y: r7 o) D+ \" Q

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! n3 J- G6 H/ V) h5 K

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) k) o  |$ e9 [6 `$ h





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