嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?6 B  ]$ |( r4 K+ Y! c% a6 T3 d
Void UPP_TASK(Void)
& K" e$ p6 Z- i{5 W3 V! x  Q$ H( y
, D, P7 V0 v7 r4 {$ D
    int i,j,k,target_int_count=2;- j# r( G% d/ i  U
    char ch[2];5 M- g' S. ~; `( b) ^  z
  O5 z) l- H- J: x4 w' l' L
  p* u# k2 `1 n2 U
( C5 V  v$ k- b# H  q  H+ [1 L( K
    upp_interrupt_count  = 0;
, W$ ~0 y8 y$ ?' _    upp_error_count = 0;
. l% L) D+ L# {+ @3 V- F
5 @7 O. n! W5 p6 f0 D    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" ?+ w6 o* N3 u    // Initialize data buffers, T  w) |# g" I; p7 G4 A
    for (i = 0; i < upp_frame_size; i++)
# _+ ~0 e  q$ R9 L    {/ |) ?5 j7 s2 p3 T% J" i5 |- h: C6 c
       upp_buffer_b =i;( ]: `, V  f+ f+ j* _: N: \
       upp_buffer_a = 0xDEAD;
. o; E' S* D% k    }
: R1 N4 l' }. L# y! ~1 H' u: n1 l
& D0 J& J$ E" y* X9 S6 L    //for(i=0;i<1024;i++)
5 W1 g% B1 w" X% X    //    temp=0;, D# p5 S% x1 p1 E, S' J, V
3 j6 E0 q0 L! C+ ^' b" H
    //UPPReset();- v+ t3 a* d3 M: e* @6 h) J+ R
    /*启动UPP DMA传输*/. P5 p, g# \9 b  e* C6 T! y* s8 e
    UARTPuts("upp_prog_dma_i\n",-2);9 {0 L+ F$ {% V1 y9 O. {
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  t6 U) J- X2 x( `, y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- [2 g/ t2 ~% O    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, P8 z: w8 U* c5 M0 U

* `* V) y# c% `9 m+ F2 A7 L9 D4 k    UARTPuts("upp_prog_dma_i\n",-2);
8 Y; h/ z6 L8 |& }    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 y/ A% t* I! a8 n3 ~7 f: P$ c
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 \: ]. U" X, N6 I+ j& K; Q( y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, @% ~0 ~! |( E6 W& A
, `! u% F% t+ C. v$ E, t4 J    /*等待UPP传输完毕*/
  @; b) ~+ p  a' r& o    //i=0;( {/ B5 k; v* m/ s/ n
    //j=0;' o3 k+ Y( s% \. {" {, n
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ k0 z9 ^; n$ b) i    {
! {. N1 J& d" ^        /*  测试UPP传输的同时操作普通DDR数据2 q' X1 M$ f8 E7 \/ z3 H- c8 t0 h
        temp=i;
5 P0 c( c$ U& B# v9 d' Y        i++;
6 X, s0 ?( |& I- P% |  A8 k        if(i==1024)- A8 ^, Y9 m/ |4 B" N, Z2 F6 N# @- A9 B
        {
) u9 |" |0 p3 r8 W; E            i=0;
4 f1 `. l$ R8 g$ _            j++;- E/ z/ C5 T. t; M
        }
( D, Z  G% w5 v/ B4 A# E* v        */% V5 X$ }9 ~) [/ S0 I
3 S6 f1 b2 J' V6 m) I& C9 u
       asm(" nop");
4 a- k0 J% E- ^
, {( b' t$ t/ X! L       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 [, I( T& L$ i5 p  K& i0 q3 _) p: }
    }' v1 o/ V4 ~  H% Z9 k
/ H' c% ~0 N" ^" P
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 K7 o2 A% y0 p6 H    //UARTprintf( "i=%d\n",i);3 j; y/ x2 O8 N2 t
    //UARTprintf( "j=%d\n",j);$ r0 [- I2 a8 F: Y7 K/ u: c
    UARTPuts("Data mismatch in buffers.\n",-2);
4 B; o) l6 \4 P5 W    if (upp_interrupt_count == 2 && upp_error_count == 0); r+ h( q) N: x3 r- n8 v
    {5 f/ K( o7 |( s& B% F& N1 n
        for (i = 0; i<upp_frame_size; i++)
3 F% C$ g3 Y9 Z( b0 b        {0 [: N% K# }8 V/ r/ b! T  j; Y. o
            if (upp_buffer_a != upp_buffer_b)
: e# [/ p& k4 Q: M1 n5 [            {& u# r) u: M1 W
                upp_error_count++;8 Y; _; o% l4 H& \) }% e/ O
            }# {0 ?* N# @1 K+ N! \; O
        }
2 n# ]  ~- m+ \    }, ?+ ~; y% t9 L3 [9 X/ m

' B  d7 U0 `. e2 J    /* 报告通信结果*/3 a( [1 v& B' [" L5 J
    if(upp_error_count != 0)3 f" `5 U  W0 e  o, H
        UARTprintf( "upp_error_count=%d\n",upp_error_count);* Z2 s0 @5 a9 C+ A3 K
    else
1 \9 h7 M+ }# f; N/ O: r0 g        UARTPuts("uPP transfers complete!\n",-2);% `# \& W" [  I( V3 P
  g5 m9 Q: q1 O2 V# B1 v: ?% x
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 ?3 d* x' z2 v8 u3 n! K
    UARTGets(ch,2);
, G; `" }! Q: T  s9 c    UARTPuts("\n", -2);
# C' R3 r5 t0 j3 w0 Q+ C
: \( B8 W( {; b, a5 L! g" t8 a" W1 q    if(ch[0] == 'y')5 c, {* k+ [. f& v9 w. Z) [3 i) h
    {9 d0 x1 H; h9 y; V
        /*打印全部读到的数据*/
5 a/ v/ K( [$ m5 d, K* f+ q* C, J        for(i=0; i<upp_frame_size; )
; }6 ^  V- M' _6 j6 B/ R* R/ G        {1 |$ i  c# D/ d5 N1 }: K
            for(j=0; j<5; j++)7 F0 b5 }! r: x& ~5 f/ ~4 l
            {
5 ?  v# v% Y% ^& g) U# J: l                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
: ?# c; o2 F: R                i++;4 T8 V) V* _3 [) R9 d
                //if(i >= 4096)$ G( L' P2 t# G. ?& m* |# p
                //    break;7 I) b0 L: ~5 v; P& Q, w/ u

- z/ c' G# S7 i* d. m            }' q5 n( o, @+ o. ]
            UARTPuts("\n",-2);
, q. @& l0 R3 A5 s8 `6 R8 ^- x" N        }5 }0 m: f5 y# x" M) C$ A
    }! Y( r+ _5 k; w1 w" v
6 J0 D! x% T6 R: o% J
}

; E0 D1 R$ {. g. |- ]& A* q. T
8 Q( w' U4 t3 M. @* N$ ?+ t' ]2 G

" l9 {+ f, q8 B/ X6 T1 U; z4 O
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( o( n) a( R2 N( }. U! L
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& S5 I% D( |" ?' _9 T3 M





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