嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?, C  h4 N  f& e# W: B
Void UPP_TASK(Void)4 g5 G7 r1 Z. Z- {4 I
{! F( c$ P0 [, L0 g5 H8 y: S3 i

0 p) @7 J+ |4 }+ j    int i,j,k,target_int_count=2;: r) u' ~; u. j/ p8 ]
    char ch[2];& ?7 v7 U9 o; H
' {5 h4 }) w4 M4 C3 P
  q) Y, v5 \* n* w
+ B8 r# [- j1 }$ [' ]
    upp_interrupt_count  = 0;# n" f7 [) p6 J5 ~: ?$ N& U
    upp_error_count = 0;; I  a7 w& c0 T
; V  T/ b. |- r5 J
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; c  c  s  M. ?+ \) R# s8 T1 C    // Initialize data buffers
+ @& P6 {* k, `    for (i = 0; i < upp_frame_size; i++)( ^  [. s- z# J! d
    {1 q' q7 N4 L6 \/ y' D
       upp_buffer_b =i;% a7 b& ~' i) d; G% d
       upp_buffer_a = 0xDEAD;
+ N# a) a" n7 U) C    }
. U. c: {* Q  j7 W/ y
; t- u1 c. Q( ^9 Q$ p* v    //for(i=0;i<1024;i++); X+ B3 r, P* L2 P5 b) {5 k, y
    //    temp=0;
* |$ W1 M4 D! y( j( A$ P) g# C+ D: q  e7 L2 ^9 d) [1 S) N
    //UPPReset();/ H% |1 J; @- H8 P* T
    /*启动UPP DMA传输*/
6 ]! P' T3 f8 Q3 E. l* c# }: z, [    UARTPuts("upp_prog_dma_i\n",-2);' p# o, R4 @7 D* g
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* p. I0 x+ [6 i* A4 K$ y' Y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% N# Z9 A& n, c. `! M- E
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- t9 v# h$ ]* U8 ]' x- R

  v+ r" W* E4 Y3 ]! F, u    UARTPuts("upp_prog_dma_i\n",-2);4 C# [- t8 E8 ?
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% _9 N, O) ^" k
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 i/ `* r% ]% z5 a* F2 E2 V$ n/ l    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; Z$ n6 u/ j6 L2 S1 W
$ y! F& O- c7 b) T0 F" E
    /*等待UPP传输完毕*/7 S/ {/ _, T' G8 m# O3 h% p& n
    //i=0;' j$ b2 P9 q0 ]
    //j=0;0 g# \% k7 a( q  H. D  K' o% Y
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ W4 j  l! ?/ z
    {
2 m+ o# E# i: ?8 k( N7 V0 {2 S" Z" \8 F        /*  测试UPP传输的同时操作普通DDR数据
/ {+ A" }- ?6 J- b) L- L- j( k1 K        temp=i;
% `" h3 Y+ S- T$ e! H0 B        i++;1 V( Y# B  ^* h! }/ f, m6 X
        if(i==1024)% n$ ~* U5 c! I
        {9 V4 I% p5 ^6 U5 B
            i=0;( {, b7 H/ Z: g7 g, h
            j++;
' E2 a8 x7 |, b0 }+ j$ g( l        }
  a" M9 l) j. V1 q; f" ^        */
. @# U9 l2 t# K  x& n0 {. v# u# }7 M$ H5 l# d* K- v7 N1 O4 [9 j, j
       asm(" nop");; b. V/ p& X( E4 f
7 A" I, B9 o6 z. T" u$ `. L% }7 P
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 ?6 u+ @# ~- x8 w. J    }
6 l5 a( Y: z6 Q0 ]8 H6 X  A; I- a3 k( @+ s8 N
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
3 T$ I+ _2 Q) X" K# J2 i1 K    //UARTprintf( "i=%d\n",i);
' r0 ^+ o. Z! k, `    //UARTprintf( "j=%d\n",j);/ {% H; L: R9 N
    UARTPuts("Data mismatch in buffers.\n",-2);
  V  K( p$ C! Y2 Q1 R: b    if (upp_interrupt_count == 2 && upp_error_count == 0)
: l2 y6 q' t# o& j7 g. k0 L% l% V    {8 [/ T$ d" l; k/ A3 _- m. h2 P
        for (i = 0; i<upp_frame_size; i++), k4 u$ n$ E) g7 c* J% m0 K
        {
7 {- I; n7 F+ s. }& y2 U            if (upp_buffer_a != upp_buffer_b)& |$ I, h8 j: @5 q0 r, |) l  {
            {6 \; `7 l' B2 e( q
                upp_error_count++;! D; P$ r; v( k& [
            }
4 z% A+ Q: ~& @9 D3 _        }
' W" u% n8 W6 ^3 n* |    }
4 v3 o  i% A6 o0 I8 F; f! m7 Z$ d
! p" V: Z# P6 ]# {' ?3 v; Y    /* 报告通信结果*/
( p. n  T6 c4 M$ l  p0 J    if(upp_error_count != 0)
' @! v) a6 k* r& k% s        UARTprintf( "upp_error_count=%d\n",upp_error_count);, G; g" F1 S3 L9 e  p8 X
    else: d! {1 P7 i0 Q
        UARTPuts("uPP transfers complete!\n",-2);, k  L0 H# r2 g; Z

0 ]( o2 t' N3 d+ P5 W% X% ?5 A9 ^    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' R* z. i) ?% }' |- G0 M
    UARTGets(ch,2);& b3 p( u$ P" D
    UARTPuts("\n", -2);
$ e9 ?9 ^! \5 E# i: l' A% p% Y& ]& O
    if(ch[0] == 'y')* O# k$ a$ S, O. l" H$ G
    {  l- h( T( n- r0 P" H4 A4 D+ {
        /*打印全部读到的数据*/( W) s* ?5 @: K; w
        for(i=0; i<upp_frame_size; )
7 R! k+ V0 k; a# O% Z. S6 d        {
* U6 v* K9 K* ?7 _' V& U            for(j=0; j<5; j++)) t% b) u: D# t1 n4 c) z7 A4 s2 A
            {
7 n- q  I5 S& U, u" V! V+ u/ q                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 n" r8 B9 E; [/ s: p: o
                i++;! r) @" K: w9 h* s, d, l+ k, j
                //if(i >= 4096)$ C  a$ \' M8 ^! k/ X
                //    break;
4 ~8 I8 G& ]( E  i7 M6 x
8 ~' z+ h8 w8 R0 p            }$ z3 B; F& S0 H; F( I8 y0 p2 }
            UARTPuts("\n",-2);, Q4 s$ [" _% h' m9 ]% S$ G
        }
2 Z) a$ \7 h8 x& L    }
2 s6 V6 I4 g+ j2 }- g; E; F% M/ L0 D! _( `: w
}
, Q8 e% @6 N; j9 U: }) W0 R: P
% k6 g9 v  o: E/ P1 j; l! X  n

& |& y  k5 E% o. H2 h+ N5 G0 I& P
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 t( }4 v3 y% E8 ]& V' D- t( c5 }
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 U3 Z! y$ [( x! T




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