嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 G) _  q2 c/ s$ c0 i
Void UPP_TASK(Void)& g2 R8 J( y2 i" t- d6 a1 L  k! }
{; e0 p8 O* M# y0 I
5 h# X; i; i% n9 q7 a: ?6 h' K
    int i,j,k,target_int_count=2;
  W0 ?- v& u/ `/ a4 R& z2 Y    char ch[2];+ H: m7 _, S8 ^6 V
2 y- L; [/ I2 {2 F" B5 t# ~/ q/ \
$ M/ [- e9 e4 s& n+ p

' [; h; |- O! c5 n% \4 l    upp_interrupt_count  = 0;
7 X6 Q5 c& [7 T9 q    upp_error_count = 0;
! c3 _0 r$ k9 l. ~& y' y" U6 ^  M: T# M4 w* m, D
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, {3 c7 ]: O( @3 Q
    // Initialize data buffers1 ~1 s: Y: o0 y% D- I! Z
    for (i = 0; i < upp_frame_size; i++)
' l3 M$ ?5 ^. S! A    {
+ Q/ b9 J' d) I: L$ F# T2 |       upp_buffer_b =i;9 c9 T  j/ E8 k1 u
       upp_buffer_a = 0xDEAD;
+ t+ K6 u  Y! K; f    }
, H- P( r( [' A
  g- V+ }) z! v' N0 F0 K    //for(i=0;i<1024;i++), O" Y) h: e. P9 E$ T, Q
    //    temp=0;
1 C1 a+ s7 k) w, ]. l6 E% [4 Q, s8 B/ P# Y! H$ m
    //UPPReset();
. E+ G1 \" U  h( I/ x* m3 P* L    /*启动UPP DMA传输*/, i6 ~4 S% o9 N3 s- Q# D
    UARTPuts("upp_prog_dma_i\n",-2);
+ C  o1 K  u) k$ }    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 m6 s3 ~' c$ [3 v    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ T+ l- J/ _) }5 r, z3 A) J    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 ?' j% m7 {# x* }! Y! t# M1 G  F  Q& D3 d% n
    UARTPuts("upp_prog_dma_i\n",-2);
5 [5 L% W, Z: U7 y( T3 S; ]3 ]    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 P8 y3 D( F& G4 ^- V; S    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 y4 d/ M3 j( D# b
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);. r4 v, m) d8 d) y/ Q4 d
$ a: g* \2 M# V. y! c- M! V( V
    /*等待UPP传输完毕*/& |& Y! g* H# ]) M
    //i=0;& k" `* F6 J$ `( G2 b. L
    //j=0;6 S  [" ~0 N1 H7 ]
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# f2 V# @+ h! Y; d( C* |( y
    {
. Z( ?0 U% ]5 D. K( R- N+ j        /*  测试UPP传输的同时操作普通DDR数据# I" F3 R  b' O) x+ h
        temp=i;) M& e/ W+ ?! R* m" m$ M% b3 A
        i++;& v* x8 S0 n3 }* Q8 o9 U
        if(i==1024)9 c3 ^1 `  T+ x6 f8 a8 {* a7 l
        {: d1 `9 d7 {$ F# g
            i=0;: [% Q/ C& g5 A4 f3 z: L
            j++;: y# @. d/ G/ V2 K
        }+ X: U, `* ]( q9 Y2 w4 d7 g
        */1 _1 f. q2 u+ X
0 j5 h$ }% j' c+ t' [0 [
       asm(" nop");
8 h0 R& u8 x: [! ]4 s( E8 Y2 r5 s; U$ r8 V! O" P8 i1 d
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 V) Z1 G& o) y6 d: E) l4 T" k    }6 D0 ~8 L# `% i' G( ?7 D

+ Z2 `& K0 l* m4 K1 c0 q) x) ]4 f    /*检查UPP传输的数据是否正确 (loopback modes only)*/
" H& \. |, |! a; t$ y+ X) m    //UARTprintf( "i=%d\n",i);6 H; Q! j$ C1 u: d6 e) Q. {9 A
    //UARTprintf( "j=%d\n",j);; l: t& P% ^) `+ H
    UARTPuts("Data mismatch in buffers.\n",-2);6 |7 x7 c2 G( P, v, y& m! Y' J/ A
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 J' T2 [1 q* D% u, c/ f2 p# Q9 ?    {$ E( z! w# V" C& f+ a- g
        for (i = 0; i<upp_frame_size; i++)
. ?, s% A, E: h8 L7 a        {- U6 H/ Q* k" q
            if (upp_buffer_a != upp_buffer_b)4 a5 K" @6 [; K9 V" N8 ?8 \
            {: I1 f: L% Y: e8 Y2 P6 }: i2 T4 S
                upp_error_count++;2 M; v; \( b% |: U. k
            }% s# {& I  T3 ^# W* f# v( U
        }
9 f- M* L% T1 |. m) D( d1 F% j    }
8 u' P! y0 c- k- g4 e0 w0 S: ]5 P8 L8 z2 S: v
    /* 报告通信结果*/
* t) A: \# G: L8 w    if(upp_error_count != 0)
* a$ V) v$ x( |- B6 ~, S' T: w        UARTprintf( "upp_error_count=%d\n",upp_error_count);7 J* b, S( @' R) q  s
    else
9 A( j- ^* i2 @& U' _8 c        UARTPuts("uPP transfers complete!\n",-2);9 Y1 R$ C  G* a: ^
3 o4 S0 n- P9 W( ?% ?1 T6 c! G
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 d5 l4 @  E5 W! J6 g    UARTGets(ch,2);
6 I" W- M2 K5 a! H9 g    UARTPuts("\n", -2);
9 _7 k# Q' F% s* t: D* x4 e0 k( B: ]6 W' ]: V3 t
    if(ch[0] == 'y')# n7 Y7 i; V. C7 o1 I
    {
" T% S  J1 [' a        /*打印全部读到的数据*// O* R7 w5 y9 Y3 }* ?2 ~0 n
        for(i=0; i<upp_frame_size; )7 {# E0 u' E6 O: h- M
        {( H& S$ M7 g8 c( b! v
            for(j=0; j<5; j++)! W- o3 k5 [, ]: W5 O* h
            {0 q( C% R6 X$ u, l
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);8 a% g. u( h) [
                i++;
# t, A; P; i) L0 z/ w# {                //if(i >= 4096); M6 F7 u' V( R( O* s. p
                //    break;6 m4 w# ~3 w  C! _. K

. i7 Y6 @( K2 h! m6 O. e# x  i            }: t% ?& m& E; s' x0 ^% Y* x
            UARTPuts("\n",-2);
7 I( A0 B' j7 Q8 t0 j" Y        }
- g( k9 U- E, {    }
2 y3 {2 o- w' ^
& K5 b. d4 d1 w/ V! Q) d}
! l. C2 M, S; O

& A* B, w6 G& z5 I$ Z# }# T% m( r% Q6 n; x: f

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: @2 s  Z9 @5 m5 g  k* m
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: c* V+ h" q6 Y# ^; g3 ~% }




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