嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: {& s; B, M0 ?" k- N
Void UPP_TASK(Void)9 }. h! N: r' ?/ H3 K0 I2 ?+ E
{
& t( \" D! ?! @
3 Q$ a3 E  w0 l$ p! a    int i,j,k,target_int_count=2;# A% ]7 D3 G, q7 L' D4 D
    char ch[2];, g- ?/ V4 q# p0 S) R. W# T

$ J) U# ?1 t+ y! l$ _7 l( y) D7 J; G
0 p( z" T  u& H+ `
    upp_interrupt_count  = 0;
- ?: k. S$ n7 r7 D9 H) F    upp_error_count = 0;; A6 q- P" x8 ^# M5 {
+ [$ G  ~5 N9 g; |  g9 {1 J. r1 W6 H
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 M) n5 ~( N! w/ D% |5 g    // Initialize data buffers, j, b7 B8 J- \5 a- j1 m8 I4 f
    for (i = 0; i < upp_frame_size; i++)4 X) [2 F, y  r% F
    {. I( u' y; n3 x8 w# `4 F) h
       upp_buffer_b =i;( r$ w$ x/ l& U0 {5 s8 _: V
       upp_buffer_a = 0xDEAD;2 X& i+ H! H. K5 a7 V6 e
    }
* ^& I3 t! M% w6 ~& e4 G
* [' x9 Y. _0 B: q, x4 H    //for(i=0;i<1024;i++)( D* I: h, ]% F
    //    temp=0;
- t9 j- Q4 L- e- _9 _- F) K1 [* \; F
    //UPPReset();
* r8 I- n3 U: ^) v- }! y    /*启动UPP DMA传输*/! I* U+ g9 h  g! l) ]
    UARTPuts("upp_prog_dma_i\n",-2);* W, O: C! |1 E9 q  {) P- G
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 j- c& E( f6 w; e9 U* u. K    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) i; G# o. j0 J5 x1 N; [    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- G' S+ V6 t4 }! U5 t# z0 @7 Q- Y- j
    UARTPuts("upp_prog_dma_i\n",-2);
6 {' t$ t/ _4 n* v    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ Y0 A( [" b' U3 |
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ Y6 L8 \" x- J# z  M4 u3 z; j
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);+ l2 P0 q. v* E
5 ~: x. m5 H- j4 p( \" w
    /*等待UPP传输完毕*/4 O- x$ A1 U9 l5 T) {- E3 j
    //i=0;
2 h7 w! K7 l  Q' i, h' Z    //j=0;
/ s- ]$ ?- \4 s# C) z, U5 k' [+ l( k    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 _+ F% I$ _9 j, y/ q+ s    {
4 {* O$ ~  y  J' Z$ d0 J        /*  测试UPP传输的同时操作普通DDR数据. k: N% t- R8 X% x
        temp=i;. e8 y, L( q# Y+ r* H& ^" I  S* R
        i++;( e5 |6 r6 ?4 I; e
        if(i==1024)
; I: i% c/ P4 R) ]3 A- a5 i7 E! M3 U        {9 |* t7 R2 l: `
            i=0;
; e+ s6 C& i1 {4 ?. N: S3 J& ~5 s% m            j++;
: _* Q3 O3 q$ W# E1 l& C        }) O7 ^* O" v% N
        */6 q8 u" M9 E5 E1 [6 m; `
# \5 R6 ~- D; a. j4 U1 B2 Y
       asm(" nop");) j+ K' N4 g4 w2 Q" S. P7 n# S9 o

! ]/ t$ u1 F0 U3 a+ z  }; E4 d5 f       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: c# a2 q$ k; g, V- X    }% ]! P! N/ f) K3 |- H: K
1 J# p( z3 A: k) E, y7 |! I$ v
    /*检查UPP传输的数据是否正确 (loopback modes only)*/' w$ o$ J% \! o7 c
    //UARTprintf( "i=%d\n",i);% U; I1 [/ |9 W9 q8 @& o5 K
    //UARTprintf( "j=%d\n",j);
5 U* ?/ j$ d4 A% {' A    UARTPuts("Data mismatch in buffers.\n",-2);) Z& ]" L% ~5 l# q& u: p
    if (upp_interrupt_count == 2 && upp_error_count == 0)
) I0 {, c0 d0 B" L+ |0 i0 F    {# d- |& X5 F. h8 [  X% z
        for (i = 0; i<upp_frame_size; i++)
# H$ I, e! \. w- d+ R        {
) m% D% T( u* }* S            if (upp_buffer_a != upp_buffer_b)% D4 U$ l1 g! V- N1 W  r1 [
            {- ?' Z  s% z  Y# ?& Y5 Q
                upp_error_count++;5 D( e8 u$ b& C; }$ h
            }
7 H0 D( A& \+ a        }
3 B  n5 i! C. h    }
. I& z2 F0 }8 R. P( y
0 v: T' A: |/ p$ l  ^. q    /* 报告通信结果*/1 Q3 C6 V/ G1 ~# o% t
    if(upp_error_count != 0)
3 C. ?: Y3 L2 T6 i$ `" i        UARTprintf( "upp_error_count=%d\n",upp_error_count);
  _9 I. v1 d* U9 _8 q& U2 W8 O    else
# _: P! r" N$ {        UARTPuts("uPP transfers complete!\n",-2);
* m0 [' U; y, I3 e( W+ E! a6 L* Y+ s  x( t5 @" J8 P
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 m6 {$ O% ^- |8 x" }$ t
    UARTGets(ch,2);* U( ?, l" |$ e* J" s
    UARTPuts("\n", -2);+ C7 n: I4 ?9 `. d, P* Q0 f8 Y

6 O) P- s) s+ \& A0 K    if(ch[0] == 'y')2 u/ s7 S& w+ M( ?3 z0 J
    {; \8 F: S1 \7 o5 X
        /*打印全部读到的数据*/
& z4 p$ T! [  H* ^        for(i=0; i<upp_frame_size; )0 }1 l; V$ W0 q- V; i( D
        {; |+ J6 h( a$ b0 T& o$ G1 N
            for(j=0; j<5; j++)7 ^7 i4 N5 t$ |8 b
            {1 w3 |/ }  n$ Y5 W
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, a9 Y; D6 S, x7 t
                i++;
. N' `+ V7 ~3 C3 i: R/ z6 ~                //if(i >= 4096)- N" L6 B8 k5 k+ A2 ]1 w
                //    break;  i0 w8 l7 R+ r6 |

' u, E; b. o) ?0 z- X4 j3 R. V            }# n" ~& o& d+ k1 I' v5 L" Y8 E
            UARTPuts("\n",-2);: z8 a" c* H' l; h7 P
        }' ]7 n  P9 n/ Z( P: B% ]
    }
- i" M3 ?( g2 e( v% S* z/ `( B) q
( Y% x7 R0 T- I+ J: l/ a}

" B2 p' `& t1 L* U# w0 V

( H% q, ?& A: Z) ^8 N: h) N, O, L2 D9 Q: W0 ~. v' E

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" p; O( m" L( c7 L- c2 W+ _2 h, s6 g
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 k0 t4 \  H* X9 H: `/ a6 r




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