嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ c- M; t8 Z0 g# L* y2 h* u) W5 K
Void UPP_TASK(Void)( X8 ~& I3 y7 i( \! P
{
) B2 y' U9 N' z+ f* X) }
% ~0 z9 M$ _4 z' k    int i,j,k,target_int_count=2;# s8 x% _' n! f( O5 ]4 n* K2 c" f
    char ch[2];" m/ }+ C" k: U" H: W% ?: f6 O$ o
/ p' p7 t1 R' u* d& z; M2 ^
( p& T, c5 H: ^2 j

2 u. w3 D) a% T3 q' M    upp_interrupt_count  = 0;, _; C( Z9 A! T
    upp_error_count = 0;
& F7 ~3 d' k/ P2 ~% f5 e' x* [1 p: m# p2 z. b8 ]7 u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 {. N5 I( Q( w- C3 J1 m+ a    // Initialize data buffers/ t0 b, S$ T5 R( L; b% W
    for (i = 0; i < upp_frame_size; i++)
: ^" Q  s5 s1 v* u, w    {+ X0 w# T& U; I* Q/ V* n; n
       upp_buffer_b =i;. _+ R- [2 ~* z- d: a6 E: L, ]# r) w
       upp_buffer_a = 0xDEAD;
5 z, @" x' }; F    }
  B/ p* x1 m0 N) k; I3 p* B2 l8 Q* L$ U! a7 X
    //for(i=0;i<1024;i++)
) i1 B' M7 x1 s, F# P  a    //    temp=0;
0 c) }- x: x3 I4 |
! o7 a' R4 {, X6 ?2 G! D$ C6 K    //UPPReset();
6 l, g' b9 B) w  l. V7 P    /*启动UPP DMA传输*/9 [8 q( z; @2 o- z5 R
    UARTPuts("upp_prog_dma_i\n",-2);
4 y+ b* h; L5 [4 @" f    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 _% H7 U- o- q: J3 Q! r
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  {# |. _# f' a! K" t8 @4 ?; Y7 t    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* U4 G( u9 T6 j& [2 B
% Z* Z, Y% ?4 \: J" w% E    UARTPuts("upp_prog_dma_i\n",-2);
+ j; e# {2 l  e- [+ q7 M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  s7 x. T& @, T    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% u, s, s- N2 G    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 z; T- x8 [; x1 u' b4 @4 K0 H: J2 ?0 D: d" K
    /*等待UPP传输完毕*/" \% ?9 {5 W& m4 D5 _
    //i=0;5 V; |0 Q6 a. E4 b: [/ w
    //j=0;- X6 T% ?% L4 W6 C, x+ d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* H# T- m, J, g" u0 S2 D" N    {
! ?9 X) _& J3 |( }9 M        /*  测试UPP传输的同时操作普通DDR数据
' B0 f# h2 _1 N9 X. T        temp=i;
& R" W# K8 U0 q8 I! b" z( [        i++;
$ \8 d# h* x( n! l6 J        if(i==1024)
; c6 v9 s# i# M6 Z! t6 i! E        {' R) B( B& s" {" H/ P+ b( [: x
            i=0;
8 i& J) d. a; O) f7 r            j++;
2 b" Q5 Q- B0 d        }6 [1 ^+ |! g9 g
        */: _- ]3 W: h, z1 W8 f
) e$ \2 C) Z! B! Z+ J$ N
       asm(" nop");
) \0 ?# {( l9 B' q' l1 B7 \- r+ h: h. k
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- |( Q" f, s' k# c; g; S    }
0 A5 x/ T+ U; U2 H! M& W3 g- C- Y8 A$ ~* K
    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 n0 r3 F1 W, d, p/ S
    //UARTprintf( "i=%d\n",i);
. }- e( s& w- ^7 w. i    //UARTprintf( "j=%d\n",j);" ^# V4 ?4 g# g) g, N$ T2 p  \
    UARTPuts("Data mismatch in buffers.\n",-2);7 ?4 W. b( }. q( t7 Q
    if (upp_interrupt_count == 2 && upp_error_count == 0)
! }3 w/ N0 c% V6 j5 a9 j1 Y+ i    {; f0 g* }) z$ [* j% w
        for (i = 0; i<upp_frame_size; i++)! V( v+ ^$ \+ C
        {8 `3 m' a* r- r. K; q6 V
            if (upp_buffer_a != upp_buffer_b)
5 A, U, T5 p9 S+ U" w! P            {
, M* j) Y5 ]+ |% a+ X4 J4 v                upp_error_count++;
3 t$ p! q# D3 r: `, c            }$ @5 T2 V3 H( o
        }
* q' X8 S$ n& y$ A* u( Z    }
1 t( T% v% G- I' P" D
9 a5 X! M& |9 I, f# K    /* 报告通信结果*/
  Z" u5 T& v4 y2 M0 c. v4 d, {    if(upp_error_count != 0)0 a+ r- q; s& }  O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* M! o4 w- F7 k6 h    else6 c, G) ]1 a% H- G) w+ Q9 u$ r9 p
        UARTPuts("uPP transfers complete!\n",-2);
3 k+ W: i( Q/ U% i! l
5 Z% b) t0 f$ a$ a' d    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 }2 d5 T! N3 M6 _3 s  ^* Z
    UARTGets(ch,2);( c1 _7 |# N9 D7 ~' {
    UARTPuts("\n", -2);7 M& O+ ]# j' T( ?$ \, Y% m
2 m. ^6 h8 n5 G
    if(ch[0] == 'y')
0 x1 u' {5 q- m- G& E" D    {
) W' g2 z9 V  N' i2 v        /*打印全部读到的数据*/
* b! H0 O" f- C, Q4 J        for(i=0; i<upp_frame_size; )
  @; B; P7 U4 M        {7 Q0 Z3 q2 G$ c* [* j  ]. p
            for(j=0; j<5; j++)2 r) _0 F% H2 \: \# u0 a
            {3 n0 G4 }; ]  R, v: F: H
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" P: s* @4 L% q  m; {' b/ L
                i++;
' `) m$ K  B: x: c: D                //if(i >= 4096)
- B' r, [0 C/ I3 n6 |( }, U                //    break;  u; n+ _$ `) O5 |
" _( n8 m& r! h: ]
            }
9 J1 i4 ]" d; I* i            UARTPuts("\n",-2);* ?* g% U- h' E# h: `0 l, Q  \5 u
        }
& d$ c3 Q- m6 h    }
' M, f# K. @* x/ m
' q# o( y# I% M/ ^9 N}

$ T3 ~5 U9 F' u% j1 h
% g/ m, l  E; ]4 `* o
: N; [5 J$ s6 M, ]0 v7 p5 l

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* {# H$ P- A8 I2 Q' _

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) a1 d* S' T+ l( n! R+ F




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