嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( R4 m+ [/ O$ s! W
Void UPP_TASK(Void)
( B  K0 U1 h7 z+ O{
. \/ R: R/ m- Z" K# C4 t9 j9 O! I/ Q5 J4 Y1 l. ]
    int i,j,k,target_int_count=2;
) k4 P: h2 Q# m: G$ r9 F    char ch[2];. H+ w5 j- l* q1 b6 _

5 e8 j* O$ `/ _' B8 `* f
: s" s  Z0 Q6 }: B2 V* b! e& k7 b) p
    upp_interrupt_count  = 0;9 D; `( @( X* }( W$ R% l/ X' ^
    upp_error_count = 0;
! X# A$ e3 W6 U  l' k1 T! T* z  r1 C+ a3 u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);8 M8 U1 j; Q6 ~9 |- Y* V! z0 \
    // Initialize data buffers& V& W! C; W8 s, v' n
    for (i = 0; i < upp_frame_size; i++)( F1 ]% U% K5 g3 `9 ?
    {' C4 p8 H8 I: ?& V# n
       upp_buffer_b =i;
; P; t8 S; T) G! G% _! u+ V       upp_buffer_a = 0xDEAD;
# G7 ?) K* ~! h1 Q5 l    }
/ r4 r' W% e5 O3 ]% B0 w& ^6 e7 H# Z1 _. m
    //for(i=0;i<1024;i++)9 G- \6 h- M! p% ?. b& d, S
    //    temp=0;+ Z2 ?7 ^: N$ r; A8 f; O4 [
( X3 M) ?' F, k1 ~5 X) X1 [
    //UPPReset();$ G* u( e) e& P9 k, }
    /*启动UPP DMA传输*/
* L- Y, W7 d; ]/ k    UARTPuts("upp_prog_dma_i\n",-2);
, R$ _% q3 r7 @/ h+ }, f# P    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: g' S$ r( X5 V( {0 X    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) F- |. K1 }% `9 G: x+ l% e    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ Y4 C% g3 \% j& A) T+ N

/ R6 j! p4 v& D) R! x    UARTPuts("upp_prog_dma_i\n",-2);* |- D; O8 w/ ]( v0 ^7 S
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 c1 |7 i9 H1 S3 j& {( \    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 T: @5 l# b$ B2 V    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ |' |9 D1 n' u# H" X  ]0 }

5 m5 G6 Z$ v5 s' \& j4 `    /*等待UPP传输完毕*/
! x7 Q8 o7 K1 R: n2 l    //i=0;3 z- r2 i. |1 u, I& J& R
    //j=0;
' `4 z+ m5 L7 a3 A2 P* M6 U    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; t1 m) W. i0 u7 P% M; [; i    {
( o! e& i7 }8 s4 N' O- r* J        /*  测试UPP传输的同时操作普通DDR数据
* ]  G8 ^( ^3 e  P, M        temp=i;
5 o6 p! \: _( a* K        i++;
$ Z: s3 |0 I* x* i) b$ Z* O  l; |        if(i==1024)
0 Y% b1 Q- m/ M/ b& m( \        {
  q7 U' g9 f2 H8 Q6 v            i=0;
$ \9 S6 l- P5 i: g6 g2 v& E; m' }+ h            j++;
: X3 Q0 \1 v$ N8 N        }( L. ^$ P/ ?, O, W* p3 D0 y
        */
4 Q. v) ^- i. x/ g( ]$ p& C; R7 d5 O* M1 a2 j( X, f6 W5 @8 d
       asm(" nop");
. F" Q7 T- r9 o7 x; z9 N0 ^' e2 @- Z  ^9 o; `5 H
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% e" L( Y- q; Y% p2 V' z* v7 K    }
. ^' U# A7 _1 a3 d: O/ P/ h2 a* _) p6 P
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 k; x& b' j  p( B    //UARTprintf( "i=%d\n",i);: G- b8 y0 i( [
    //UARTprintf( "j=%d\n",j);
# l' r& U6 q7 ~0 v5 ]    UARTPuts("Data mismatch in buffers.\n",-2);
! k5 g: v. q. n, B8 B    if (upp_interrupt_count == 2 && upp_error_count == 0)
, A" H4 ?: a' G/ o, L    {+ P) J/ {. |+ e1 |! [( X0 `' d* a
        for (i = 0; i<upp_frame_size; i++)
  ?7 [' h; N+ T7 p8 o* r* }& a6 G        {: ?1 _# T1 M, r4 [' w6 ?8 u" f" A
            if (upp_buffer_a != upp_buffer_b)
0 ]$ G5 L3 C! F8 n$ k, T            {1 d( y" e+ r% B7 y6 v. V6 H
                upp_error_count++;. Y  k1 c: U  ^7 ~
            }- m. B! ~; b7 f& b9 P- z7 X
        }0 W/ F; R/ r- B
    }
" F4 Y7 F) w2 J: u' J, H# O* B! e6 ^' u6 e2 f) _  K5 e" E
    /* 报告通信结果*/& G& n. s. V0 t. W6 b# n- i& t
    if(upp_error_count != 0)& ]+ O3 _/ K2 A  V; [' t9 i
        UARTprintf( "upp_error_count=%d\n",upp_error_count);; ?  V/ @( Z- V. d- ?3 x, V. q
    else
! }7 l1 _5 s0 M  d& {        UARTPuts("uPP transfers complete!\n",-2);2 m5 c' R2 \* j. u& n1 e: M9 T

' Q7 \' K, z$ {0 C- h    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; M$ y3 l4 O- R7 k; Q& y
    UARTGets(ch,2);
8 u+ \1 @' z7 L3 M4 g, x4 }& e! |    UARTPuts("\n", -2);
- s1 S2 N* c0 s. Y) u% j# w0 d; i5 s" T
    if(ch[0] == 'y')
7 @$ U: O9 _! n3 z! j7 M    {( P1 g* _' @% L4 M
        /*打印全部读到的数据*/3 A7 a: O! y7 _" Z2 d' `8 J& X
        for(i=0; i<upp_frame_size; )& i8 b* k  Q6 r; d& X- ~- i. A
        {
$ z% a. X1 A1 W+ i1 _" V            for(j=0; j<5; j++)
% [" l: W( g0 T9 j" a            {# d( I/ B; d9 m% }& h( k9 O
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 v- k; h7 n: i5 E+ H                i++;
& I, v5 Q- m2 [1 {: ^& w& h                //if(i >= 4096)1 N9 I7 [" {" j! [2 s
                //    break;9 @# Q& d; I% e0 M" x* F/ n9 G

+ h* E. X# A' e- h" h            }% Q7 w' r& f7 L0 H$ S8 c4 X8 F
            UARTPuts("\n",-2);* A4 v& {7 N2 K5 S
        }' p+ O; X7 T1 M. y1 _9 u
    }1 z) k- C% Y4 {+ [# j
9 c. y5 [. Z! Q3 o/ U! k8 x
}
6 E0 D& |5 Y) A- ~+ H2 z
( L( O" }  g' s; k( |3 F; s5 O+ p9 t0 P
/ h9 L2 K% a" T

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 N: u! c1 K0 ]. N3 U$ {/ K5 A' O

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( }/ i2 U0 i" W8 S; s! d




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