嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ P9 c. E. L" g/ B  W3 O: g
Void UPP_TASK(Void)/ y0 d( {% B" k3 m' \1 m' ~
{
+ v! ?& _7 `& Y, R% H2 j8 {; P! g" {9 V, _
    int i,j,k,target_int_count=2;4 M  K) E, _" c0 H7 {
    char ch[2];5 V8 s4 ^& T5 C% H; ^8 {
8 x9 g7 k; `( {+ N( `- I, T* k

7 E6 y" k; r" n3 {5 c( l
$ ^) t# k; \1 C3 j: l" n& H    upp_interrupt_count  = 0;
' }3 u3 u" f1 s2 O    upp_error_count = 0;
. U0 H4 i: Z; T# t+ O$ D! W5 J
3 Q6 ]/ K8 c# b, z/ X7 s" O/ b* a4 w    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 G/ N/ O, D2 \) G4 b+ s% M+ \9 H" q
    // Initialize data buffers
( ~, W* J0 |7 T- W& S% E1 C, @/ I    for (i = 0; i < upp_frame_size; i++), Z9 w! R, {3 A$ Z1 r
    {+ d7 L" [. Z! N0 M8 l2 c
       upp_buffer_b =i;
6 }* u2 d& W" V. U3 p7 H       upp_buffer_a = 0xDEAD;: A: i- S" w7 G4 M: r; D' r* u
    }; G% R* i9 j* h1 u2 d9 ], @& B

5 Y6 w+ X2 s* U    //for(i=0;i<1024;i++)+ N* n  V2 D. [, |3 E5 s
    //    temp=0;6 c8 \' l$ [0 u6 W$ x* ]$ w0 W; H
1 _1 H. T+ u# [4 ]
    //UPPReset();7 e1 N& F* q% l% h0 G4 M
    /*启动UPP DMA传输*// h8 c7 E& `: U( f7 ]
    UARTPuts("upp_prog_dma_i\n",-2);) M# w- J8 L# Z  i  ~
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 A2 x, v! P+ \" O. E    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 K1 s4 g4 w2 O/ |. J    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# s0 z, X0 Z$ v( p4 X" c, w

; v5 t0 b" s6 @4 J    UARTPuts("upp_prog_dma_i\n",-2);
# M/ O* ]0 {9 l$ k7 d! U. h8 p    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( A: J' a0 M5 r8 @5 `  [& _$ D6 S    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! c/ n7 ~2 E9 t, N
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 V+ p. m. D3 @' B9 r" U

& o) w# N0 V" [" A* V/ x    /*等待UPP传输完毕*/
& J) T& ]9 U. T+ G: z3 o" x$ h    //i=0;0 {$ p9 k/ ?$ G: w
    //j=0;& L3 m  y( \) t7 i( L/ K; b
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 L/ `* l; X9 T    {
) M3 _8 r; Q1 X3 c. C  J2 J        /*  测试UPP传输的同时操作普通DDR数据& j1 a& _6 g: O8 R) M
        temp=i;
* N4 g) s, m6 x1 e8 ^* \        i++;
7 \6 j' I. Q2 I6 B        if(i==1024)2 G( N' u: D$ i
        {7 H$ o$ H. w. E( y; _; r
            i=0;$ @& a6 D8 J0 I- b
            j++;
6 H3 i) E+ M3 S4 N        }
1 D% c0 a3 v; h8 Q4 r) d% T& t        */0 |2 B6 Y, v' Q! i" G

& ?$ U& k3 A% |1 ~: Q% c       asm(" nop");, K+ f# k, b4 A9 q

) b$ [8 N; i4 J. u       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 }9 ~: ]1 j* {4 [% [1 P* m    }
7 d# h6 U/ o7 d7 X! K
0 M& o; e0 U$ b! s    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 h* p. W4 b* T4 @8 F% s
    //UARTprintf( "i=%d\n",i);0 n5 Y6 m+ |. d( r1 c; j) W4 ~
    //UARTprintf( "j=%d\n",j);. f- v1 ^" L( N; R* F1 C
    UARTPuts("Data mismatch in buffers.\n",-2);
% I7 V) f: M6 O% s5 D* b. n    if (upp_interrupt_count == 2 && upp_error_count == 0)) {$ k7 h( Y/ {# A
    {
9 k( v- T- {0 i) v9 S        for (i = 0; i<upp_frame_size; i++)
2 B% `" k. r/ |. w$ p2 w" m        {' J! o$ [$ D/ A7 L1 U
            if (upp_buffer_a != upp_buffer_b)) D& s  p+ v0 X! Y; l
            {
3 V  O) D+ q  i( Y4 p                upp_error_count++;/ t% X* @. G& a& v
            }3 m+ `2 Y. r# {/ r+ k$ T0 \/ ]
        }  T$ ^; M+ K# I9 c8 s! z
    }
+ Y  e7 q% B+ G0 G  w2 Y7 M" D4 X/ `/ }
    /* 报告通信结果*/
( A4 Z' g0 ]1 M( c- Y9 S$ z6 Z    if(upp_error_count != 0)
. x! E! q9 e# c: p, |. }        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 _1 z+ o; C; p# t+ C+ y    else$ I& i/ l7 y* O) y0 h1 p3 ]$ c
        UARTPuts("uPP transfers complete!\n",-2);
: W$ z! F  ?( F! ^5 x% l+ z
: g6 f) ^4 K: j# L, a6 o    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% M. z$ ^# R0 ?
    UARTGets(ch,2);
& c: X, p4 m. t8 D1 @+ b8 H3 c( d! g    UARTPuts("\n", -2);5 A4 O& E' f6 k" M1 ]

, Z- l7 F6 L) D0 w/ A5 n    if(ch[0] == 'y')( F$ ~) r% _! n* v$ j0 Q  U3 h0 l
    {* C+ n& T% F, X
        /*打印全部读到的数据*/
5 i5 q( s1 i6 T/ o0 k% d& a  y        for(i=0; i<upp_frame_size; )
6 B! X0 k; h# H3 m! E        {
& K8 [6 b( z0 I  V  r7 E+ }            for(j=0; j<5; j++)8 Q4 |0 W  S4 W5 i7 c
            {5 w: t8 E- k7 Z5 e9 p) a
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& s$ I5 n! C' K! m: e7 P& l
                i++;6 q) R% e! p2 F( I! \% J$ P0 V
                //if(i >= 4096)/ Y/ O7 j0 |. x, n2 Y
                //    break;
) _$ \% {( P) S( Z* {7 ~8 h" ?) u( e( e. X) Q
            }6 ^+ y+ y9 T& v- c0 ^& [* o
            UARTPuts("\n",-2);
5 O9 z7 I. J2 s6 C        }
% K  Q* f4 Y! a; `4 v! D% K0 ?6 q    }
" E& B8 p# e1 g# ]8 G( E$ b/ P  h! C) h# ~; N
}

  c+ _- x8 M4 h; E# b. u& S
% o7 f% [* I$ ^: C, F- }( Y+ s8 _: p
1 f% s% i3 n) M; V5 W- b

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 }4 ~: m4 m3 Z# M$ T1 b, ^$ z; Q
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ }! v* A6 ?# n/ c, w1 \: n





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