嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' ?8 \8 t' K! t+ }$ I/ p* t
Void UPP_TASK(Void)
- [" t9 L8 B7 i! e{) P( A& ]/ U5 S' l6 ]8 t: L
$ |& w" ]( w- }0 J
    int i,j,k,target_int_count=2;
+ \- {4 l" P! q. {7 F    char ch[2];
) O( n( v0 J4 `; b# R2 C. R
; E: n! ~. C6 V* n' b( S. w# P5 k, V9 h1 n9 m- G* O
" k8 \' k7 w6 N* _4 z. |/ a
    upp_interrupt_count  = 0;
/ E) G6 F: j' r, Z/ j    upp_error_count = 0;
: h' |( d) _' ], z, I+ }5 G$ f) o# c4 B) m- g
    UARTPuts("\tResetting uPP buffers...\r\n",-2);  }9 B- M% r1 g3 N* |0 `
    // Initialize data buffers
0 Q3 o- B: \. u( k    for (i = 0; i < upp_frame_size; i++)
3 Q) F/ {6 d7 m8 V( w$ b    {. f. |# h& }& ]2 l0 j
       upp_buffer_b =i;
0 Z) F! ?; X: ]* C0 T. ^       upp_buffer_a = 0xDEAD;7 Z+ L. x, b0 n4 x
    }
4 s  m8 B$ h, B
9 W1 ]7 u8 ^2 u6 X5 w* l    //for(i=0;i<1024;i++)
, C1 R( y1 ?2 l. a3 ^    //    temp=0;
  p& U- f3 }5 Q
- f9 A) a; a' P9 u- e$ P* f    //UPPReset();
2 ^1 q. d  u- M6 `6 H    /*启动UPP DMA传输*/
3 B2 e8 a1 N, H  Q( t    UARTPuts("upp_prog_dma_i\n",-2);( Y' c" @! @& s
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 i6 [- i* n! |  n    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) m0 e( B, H) T* u& j/ Y
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 x! M, n( \  F2 r$ x- D
7 ~$ x2 z+ j$ o, _- L  |4 p    UARTPuts("upp_prog_dma_i\n",-2);9 J8 U# p+ T( d' D7 R: B' S0 i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& M9 H) J% T7 K# S* G0 o
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 w  t9 M$ u2 P    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);9 [8 P; ^' ?, P8 F) h3 {; t

3 O& v; X0 \2 ~% P* @  F    /*等待UPP传输完毕*/) q4 ?- l: n* A6 p/ `& g5 h$ p
    //i=0;
7 P2 d- C3 S6 R: Y6 V    //j=0;' q6 a" W; |8 p3 ^6 j$ k) X
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 q; n5 T4 p- u  K
    {
6 i3 s1 ^7 x" Y, u, `        /*  测试UPP传输的同时操作普通DDR数据
$ J0 s0 O- y2 h( Q        temp=i;
0 j# E# Q; p2 s5 q        i++;. Z& N7 |* _0 B1 m+ y( P
        if(i==1024)
% Z/ U  Y( \" P5 E        {, S2 }' {# L" ]' D$ V+ ?. o
            i=0;& Z" c( Z4 ]% H
            j++;
# M2 w! \3 A& B" c, w0 W& |1 \        }
5 d1 z% y7 `! [0 h  ^        */
& E) U6 C6 ^( P& L3 d- G9 h) L
: X7 C' j, g& N! v       asm(" nop");, Q6 F; q. a5 @- H" l! d: Q
# e! b. u% K1 B, c
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: U6 ^0 D, Z$ G' L" t" F    }
8 H% d4 E! m& J* A
* e" `8 S" H1 w* F3 ^0 |    /*检查UPP传输的数据是否正确 (loopback modes only)*/$ ~: d3 u- ]; H
    //UARTprintf( "i=%d\n",i);
; i7 R' `, W7 M; I$ [0 R5 \    //UARTprintf( "j=%d\n",j);
, D" m7 ]  Y: y    UARTPuts("Data mismatch in buffers.\n",-2);  w0 T1 A, E0 r5 R8 L3 T
    if (upp_interrupt_count == 2 && upp_error_count == 0)
/ u7 s. o+ C, ]- V    {
  p% j7 d3 }2 W5 ?6 ?7 X        for (i = 0; i<upp_frame_size; i++); K/ e" G* b5 z* Q$ c* J! A6 s
        {5 f7 S& y; l! N$ p& @; f6 z5 y6 R
            if (upp_buffer_a != upp_buffer_b)
# D8 w1 v9 z$ V. d: s& _            {
) D' F7 n0 t9 Q1 v+ k+ g' ], R7 N                upp_error_count++;4 \/ o2 l% B( R* \1 _' i. Z, A. \
            }
, r( l1 k  d! k0 ?$ X" X, B        }
" U5 e1 S4 s  b0 J$ ]    }
4 J$ g8 B) Z1 D" J( D. J
2 E. K" E. `4 H$ E- V    /* 报告通信结果*/
& Y( K" [: U; F8 Y9 k    if(upp_error_count != 0)
  G5 D& X9 \4 U" ]4 n- {- K4 g* d        UARTprintf( "upp_error_count=%d\n",upp_error_count);8 F6 p' p; _) [
    else! a3 G5 ~# v& y! z
        UARTPuts("uPP transfers complete!\n",-2);' g$ T( J+ J8 _& g/ u' O* w: e& c
; q6 p  c9 ?5 [/ ~# ]& ]
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 Z; K' R- a# T8 v; _
    UARTGets(ch,2);
: B+ \# G; ]" V# W6 k2 c# j    UARTPuts("\n", -2);
& a9 \' S! k) l% r9 O: I- e. N2 M
5 w) W( k7 p9 v6 y    if(ch[0] == 'y')# V- {9 V8 q! B4 J3 O
    {
4 ^) o- z; V! @. y0 ]1 g6 x& u        /*打印全部读到的数据*/
% _! Q1 k( c4 a9 x, B; q        for(i=0; i<upp_frame_size; )
8 d* S, t+ B1 {        {7 v' X0 b, X9 Y* p" P
            for(j=0; j<5; j++)1 Z: z& Y  `7 r# k( Q
            {
: e: D- n% \* i$ }                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
& \1 \  j0 w. `9 x& I* [                i++;% v- c2 o7 A7 L( i
                //if(i >= 4096)
) u, o6 L, |) {4 r9 k  {6 V0 |. O9 T                //    break;
. W' L- t4 K$ @1 R' v
) p$ H  h: `* Y, L! m# a            }
$ Q: C; b& f7 g: v! ]6 S            UARTPuts("\n",-2);+ v4 D  g& l$ g0 @8 s- @" D+ ]
        }
* P6 J3 \5 s2 l/ P    }$ W- p. D( R+ i8 I
* g- |6 t0 g5 }0 l
}
+ F3 ]5 t8 l7 i% A* \) _# l
! T# t$ j  X) m3 W0 ^1 j+ i
: Q/ i, ~9 `: f7 K7 t* G. G9 J: y

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。& c7 d  o; y% `2 Z+ W5 q0 Y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. ^( V' Z( }" w2 i0 }  F




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