嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 B, m( S9 Y1 [0 d5 {  U+ w
Void UPP_TASK(Void)
6 o9 h$ q  l+ p  P{9 ^: M% Z! W5 C0 C; V0 ]

$ E0 y/ h% R) \" w& r: Q8 w    int i,j,k,target_int_count=2;
7 c1 e/ T3 }# ?5 V) ^6 d    char ch[2];) Z% f, k# G% c3 _& P/ Q" _: H( W. n( s

6 z, {0 Q& D) M0 W8 l4 ~+ q1 ~2 _" n* ?# F( o

% K8 j6 X2 W. X- s, B1 l    upp_interrupt_count  = 0;
& t- f, ]) y9 n9 v1 R    upp_error_count = 0;. m+ u8 v7 ?  U; C( `3 c; }0 R

/ Q) w, F, U+ r1 ^1 [    UARTPuts("\tResetting uPP buffers...\r\n",-2);% A: {  [' p% B8 L% W; @/ J
    // Initialize data buffers1 F) G8 g! Q+ M6 p7 K
    for (i = 0; i < upp_frame_size; i++)
% u+ i3 F8 b+ ?    {" d: q% Z$ G7 w3 |$ J1 R3 H
       upp_buffer_b =i;
. ?1 s7 h" W& c       upp_buffer_a = 0xDEAD;* y2 I1 L9 J$ t% Z( G4 g
    }0 Q1 `" r9 e: g9 q2 Q/ _
- j# O2 L: [, L9 }/ K8 R! W
    //for(i=0;i<1024;i++)
- h9 y  s( \( K. X# I5 ?7 T    //    temp=0;
0 y; g! Z8 j1 \- |! e$ A( S  ^* R" c+ Y4 `
    //UPPReset();0 J3 O& x4 Z6 o& [9 s5 M. r
    /*启动UPP DMA传输*/
; E& p" W( G# |    UARTPuts("upp_prog_dma_i\n",-2);' }  I7 ~( H0 I0 m1 E
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* f6 [7 h4 N) P+ |/ \6 O1 _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 T3 }6 R  g1 J7 Z4 w* N
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 k/ g! O- I' g1 d2 r- v8 Y

- y9 H* I/ H/ g# x: C- r    UARTPuts("upp_prog_dma_i\n",-2);
$ N) F) C5 c/ Y5 N    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( {1 e6 `: c1 K* D1 w    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" ?3 F) |; u- r    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- q* f. I% B/ V* Q6 Q+ `1 b! z9 n1 m6 \: A
    /*等待UPP传输完毕*/  h3 _+ G9 [8 k/ ~% Y3 A1 N! O- M
    //i=0;5 x# x7 `6 H& d. G
    //j=0;
0 L' ?% P3 V! r; M: V4 Z    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ M, J/ `7 U7 ^, W    {+ ?1 d6 R! W7 y% S+ |$ e* P' l3 b5 b
        /*  测试UPP传输的同时操作普通DDR数据
' ?4 D- U/ N! E8 Y# t        temp=i;
6 q) R4 i8 U7 S( U+ T8 t, s        i++;
7 Q' o; K. R; ?. m8 T( y) r' R        if(i==1024), }5 }: b. T# Z6 T
        {
0 U& a4 e0 G- q5 n$ m# c            i=0;
" u; c; E% E0 X% R4 q            j++;
  Q! N$ N: P' x$ ?; o7 ]' E        }
' N1 X9 X) @% A- p8 ?, G        */
) n* S) i+ n6 V2 J
0 v$ D; X3 S8 T       asm(" nop");1 ]7 `0 G* F* w# `& F

) ?( v9 R0 D# ~8 [       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! u. f3 e! X0 K! u- t* I    }. Y8 S+ b' D, H( L: k

6 f' L4 ^, X. C) T    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 R& ~7 m/ w: D* O
    //UARTprintf( "i=%d\n",i);
* w+ B7 t' W2 ?/ j2 S. i    //UARTprintf( "j=%d\n",j);) `7 u) ?4 {. O
    UARTPuts("Data mismatch in buffers.\n",-2);
! T7 g  L8 L* c1 b0 k3 w6 e    if (upp_interrupt_count == 2 && upp_error_count == 0)+ \6 u3 k: w! N' s5 g- A: Y1 c6 s
    {# I8 e9 v/ u- n# [% v
        for (i = 0; i<upp_frame_size; i++)# p  R9 C; N) y4 x7 [
        {  }& ]' E' Z- E/ ^4 V/ v
            if (upp_buffer_a != upp_buffer_b)6 O4 m4 d3 u3 x! n3 m; q
            {& U- h5 z9 c" G8 b; p
                upp_error_count++;
  q9 P& H$ v9 l- Q            }  P, ~* S2 t1 D7 m2 S
        }
5 o: E9 V8 W( ^+ ?+ J  ?# b- h9 O    }3 w+ m0 V: Y( v. j4 v4 Z+ X+ _

* H* N$ O2 ]  g+ v  t$ O" d    /* 报告通信结果*/
* {+ k* j3 i+ y6 C6 z- k, e) T    if(upp_error_count != 0)
1 u3 f8 X5 z0 H) ~: w) T/ h        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% i- Q( x  n$ j! @4 |( _" p3 W    else
2 v* x0 E0 C- R  C; n        UARTPuts("uPP transfers complete!\n",-2);  C, F; p  {; {( Z3 h' I8 d) c, U8 D! j

! S0 D$ @, G: y5 W, b- l( m    UARTPuts("Do you want to print all the data?(y/n)   ",-2);, `- J, j& d! F* r
    UARTGets(ch,2);
8 T9 A! A' y6 _/ B( g7 _6 F    UARTPuts("\n", -2);
- V1 ~1 Q" `* Q
+ z6 W* `- J1 G# w  s( O2 a* ^    if(ch[0] == 'y')
5 w, ^4 a" t/ b& o5 F* W+ }    {
' A. S% o" w1 N5 G6 R        /*打印全部读到的数据*/
: p# }1 x5 I9 i9 F1 j! {8 t        for(i=0; i<upp_frame_size; )* i; S9 M, C' q) B1 [
        {# r9 A' y: W/ o. B1 Y2 |
            for(j=0; j<5; j++)
4 x. y0 V7 F% e- Y1 O- [            {
1 S& Z1 {; J- q                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);; ~6 `4 V1 i( _3 E; o
                i++;
: J" J3 m6 Y, k. B& r5 x4 x                //if(i >= 4096)2 ^$ s+ g' @: @' `: x/ a) |4 y0 Y4 z6 y
                //    break;
* K6 Y% I$ x3 Q* F. y; W* M
) C, w5 |3 x3 }+ ^            }. n- s1 F. K* j9 v* }0 |, V- @
            UARTPuts("\n",-2);
. `: h8 e7 ^2 a2 m) X- {        }
$ |6 r2 s3 F5 i0 [7 ^    }
1 o, x$ N$ [: S& G  t( l: j  C7 [" H3 E( d9 i9 H/ e
}
1 a) Q6 _' j  r2 z1 K

, h7 m! G7 d9 j: T1 Z
( Z0 |+ U& v+ V) h4 \
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* ^# |; D8 g" k  k7 b0 }/ g* M6 E$ A

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ ?0 F. I, w4 f* v$ `, O





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