嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?5 N% p- v: I- u  ^! v
Void UPP_TASK(Void)
; x# u" K: e/ ]! ]* z2 a{. Q+ L* ^+ ^+ Y% G* a0 w0 h
4 G1 b( W" O* Q7 s$ D
    int i,j,k,target_int_count=2;
* f5 ~2 q1 E+ I    char ch[2];
7 ~/ B: E, {3 x8 q
- O! u; W2 M% |2 r. ]! J1 c/ a# j% `1 ]( @- X# x# v1 S1 v

- g( D% m" F0 ]+ T, Z8 |1 I# x    upp_interrupt_count  = 0;4 b' `& ~7 A* P2 C5 N; {1 y
    upp_error_count = 0;0 X  m, \5 a3 S

+ P% k9 K% e- ?; M2 `9 f    UARTPuts("\tResetting uPP buffers...\r\n",-2);# s4 D0 C$ G) z1 y2 q
    // Initialize data buffers& x2 u8 B5 b% t7 K) w
    for (i = 0; i < upp_frame_size; i++)
* h* R1 k7 G, K0 y# }/ \, e, A, K    {8 a* ?4 [' E# p; l/ P2 O' A1 m
       upp_buffer_b =i;
3 U0 o0 D8 \- S* k! y       upp_buffer_a = 0xDEAD;9 j' x2 ]& W7 ?, }+ |7 g
    }
* J, O. A( F5 b1 q8 N9 d
$ p. g1 m5 G& l6 z1 U    //for(i=0;i<1024;i++): b% ~  p. [9 `+ j  X. ?; E" {3 R
    //    temp=0;
+ X; ~3 B, ?& l5 O& C% _( f2 A8 f" W* D1 j; L( Q
    //UPPReset();
/ |" _; T" u( N0 i7 T    /*启动UPP DMA传输*/
$ c& d1 `2 Q8 H$ s: y    UARTPuts("upp_prog_dma_i\n",-2);
+ E; y4 p2 ~  k    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& q2 R$ x2 ]' {5 A+ _$ z: q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, o. i0 j' {! V    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& Z1 i6 l0 |6 e$ R5 @5 \

9 \0 D) a3 Q9 Y    UARTPuts("upp_prog_dma_i\n",-2);
& ]' {5 A  P6 Y7 j    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# x3 ]& i% t  E  [2 z6 F5 k    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' r8 A! P* g' ]    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! B" y& D" J1 N+ `& k) y3 R( u! z' E9 V) Z4 X! s5 {9 V/ [3 P# a. N' @7 N2 k
    /*等待UPP传输完毕*/
- b" I6 T2 f+ I, ]    //i=0;
% J9 F" l. A% @    //j=0;
/ R6 X; G1 `& L    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( @; T' e( R9 Q9 n" j5 @/ J" i2 V! G5 l    {4 U- l5 K' g  {. S6 N2 v* ?
        /*  测试UPP传输的同时操作普通DDR数据: t7 @. P$ @3 [5 X1 U7 \" {
        temp=i;0 Q6 z7 O% L' p: s
        i++;
& I$ n' a+ g; S, y3 l) [7 w6 g        if(i==1024). w; j: N6 C, S' S
        {6 L, F2 O" s* x7 z7 h2 i5 O$ E
            i=0;/ W9 ?8 O2 q* u/ l1 i. v7 I
            j++;3 [# P( \# ?( n
        }" V: b% R2 T0 b& p8 L! S  ?$ k9 |' F2 W
        */
& u) r, I7 I' m2 I! }/ w. ^2 {( ]: T6 s; w% O
       asm(" nop");5 L+ V' t6 @2 l- n: ?& g
+ ?' a4 q7 R5 G2 l5 I
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) d" d4 }" a6 T. W4 e6 R    }
$ B# p1 M6 ?+ J1 Y9 l& y: Y0 P8 G* e/ H3 ?- X6 ^% K# z3 m  _5 v$ x
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ Z! ]+ i( K1 Y9 V# \. X    //UARTprintf( "i=%d\n",i);  f8 X2 [: m# x0 B" {: c$ h$ Y$ d
    //UARTprintf( "j=%d\n",j);
! E0 R9 y5 R" E# i/ z% j    UARTPuts("Data mismatch in buffers.\n",-2);
) H2 O! z% q# B    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 A; u' I8 \% b' O    {
4 Y2 M$ d% p2 y8 w' l4 k        for (i = 0; i<upp_frame_size; i++)
* g$ ?. U- a8 y2 N" a0 i/ g1 `        {' O8 M$ O! T! R) A. B) [: `
            if (upp_buffer_a != upp_buffer_b)* p* N; _8 j& r7 b) [
            {9 J2 f, o, k/ w2 |4 s
                upp_error_count++;% [6 q) S3 b  t! N6 _
            }
+ O, ?4 i, L! t3 t* u2 m        }1 j" E8 @3 q; i3 q3 ]" s+ G- x
    }$ b" S9 U! z2 K# @
- D/ w7 h  y7 A% f* h! R% U/ s
    /* 报告通信结果*/' i$ c. l6 Z0 ]8 i
    if(upp_error_count != 0)
# J9 n6 K! q6 V7 i; w        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; u4 X7 _2 ^6 |5 Y% R- E, y( j$ o9 b    else
. m0 i4 Q% j( f- j/ J        UARTPuts("uPP transfers complete!\n",-2);& b; O) Q: h# m) B/ T

, v9 B7 m5 J" e" O5 G, K# i    UARTPuts("Do you want to print all the data?(y/n)   ",-2);1 a0 B. a, r3 }8 E8 Q8 t
    UARTGets(ch,2);- [: _  W; L( ^" O7 C/ h/ y' l% w
    UARTPuts("\n", -2);$ X! H5 h: q9 z& c9 m
. H. f& t/ `* g0 O  B# G
    if(ch[0] == 'y')
% @/ J% x% m" J9 q* W    {* F; D) z/ l. o9 n# j* e0 W
        /*打印全部读到的数据*/
* o3 S0 X0 T- a5 e+ M        for(i=0; i<upp_frame_size; )
- U0 o& J7 Y9 @( E7 U% Z        {) M  r$ V& w* l/ Y) E
            for(j=0; j<5; j++). o6 A  s9 d4 ]  u$ g6 R
            {* B4 j/ k! y9 n3 e( O" @- d
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ ~1 \3 F$ J0 x
                i++;5 E) g8 r* P# p) y
                //if(i >= 4096)  O! b3 P% g7 q  a; n6 y
                //    break;
: ?; R7 v) s) [: [. ]+ c) |. c
- E- E  Z* F! L0 z+ S+ g' E$ e+ m5 @            }5 `5 j0 K3 N2 e
            UARTPuts("\n",-2);! \3 q" \6 L. v, Y9 ]8 Y% x
        }- s5 K, g' L, X7 _* D$ c
    }, D! M9 O% x: V: ]% @; a: @  y* V
( Y0 L. J! e- M; q! \  W, T
}
/ G2 D; D) Z8 B7 B( R% t

& C6 {8 s- c3 c/ `7 p
/ t9 m2 A+ Z1 |  w- i8 p  @
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 [; s  F/ F( ]$ R3 `& q, C0 d: C* Z. y5 c

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% i9 ?( n2 {# y% R# N. K* v





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