嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 Z8 w' Y7 j  ~2 E4 w
Void UPP_TASK(Void)+ q/ _- a/ \8 q; g0 W$ P! ^
{
* U" V( g  W1 P2 g" {: c6 n
: _7 M+ D2 T* i  u# E3 n. c4 P    int i,j,k,target_int_count=2;
/ u; ~- l( |& j& C    char ch[2];! y8 r4 ~9 L: A  t$ x% ?
! W6 s% F( l* {0 }

# r4 y* [. B) U1 S6 }* M& x( m3 |# u4 L9 r, _
    upp_interrupt_count  = 0;4 K% H% J* F! |3 [3 C" N
    upp_error_count = 0;
2 Y: a$ o; Z" D+ D. w! Y+ P/ ]- W2 t, o5 @+ B; x  Y. t" V
    UARTPuts("\tResetting uPP buffers...\r\n",-2);# I; M' ?' w; K& m1 P* v* I
    // Initialize data buffers% e1 H1 Z9 z+ E" u7 Z  Q
    for (i = 0; i < upp_frame_size; i++)
3 j; J9 _' W* \/ M+ H. q) U    {/ q1 P3 {3 u( E2 ^# F0 m( _  t/ G" U. _
       upp_buffer_b =i;
1 ?4 c. |2 Q: o. w0 U; h       upp_buffer_a = 0xDEAD;
+ s3 L) X8 `( S$ e" q: ?1 j* c    }- N% e+ w/ I* Z1 `# p

9 B. y# u1 ]! f- T* n0 Q    //for(i=0;i<1024;i++)* {) }  f, d* X1 U! p1 q
    //    temp=0;0 V0 o! G' z8 a& z  t/ h3 X& t

6 k/ \0 M$ O2 p& y0 @! q8 [2 n+ \    //UPPReset();( G% J9 H  H# l0 g6 z2 E) t7 Q3 h; ?
    /*启动UPP DMA传输*/
' X. S" r$ S5 s# O7 W9 b. q    UARTPuts("upp_prog_dma_i\n",-2);6 Y1 }) k1 d5 u) \1 Z
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ y: j! d/ V" R) x
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; w0 I- t. z/ P/ J9 C
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);  Q% s0 Q( z/ Q; t+ l4 k9 E7 \5 X
& L* r2 u) W% _
    UARTPuts("upp_prog_dma_i\n",-2);" s. g) H6 g" G  w6 ~2 n
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) i, o. Y' ?  H; O* }8 Y
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ d/ T4 ^6 M8 G( r
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! {5 {$ Z' y+ W

2 N8 c% W; B$ Z* {# n* p    /*等待UPP传输完毕*/8 M5 D# H# K" h/ G& P: Z/ q( W9 f
    //i=0;- f) h4 I7 h! Z$ y
    //j=0;+ h3 q% n+ W) }1 ~& X& O" v9 Y
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: Y) R2 n2 k3 F    {  W$ C8 l4 |1 E
        /*  测试UPP传输的同时操作普通DDR数据" _; L: G5 I% I$ t2 \/ S- K+ ~2 b
        temp=i;
+ k/ H- V2 V3 I, F7 i        i++;- R7 x9 n5 j) Y# \
        if(i==1024)0 A0 R6 u* c5 T* }& L; d5 K8 p
        {7 i/ l, d8 z3 Q2 n
            i=0;
3 |3 m2 V1 ~. c( t8 U            j++;% X, h4 [' V3 |3 c, S7 V* h! c2 n" Z
        }  Z, k, S" @' z# p
        */
2 i1 o. Y) k; m6 ^+ ]
# X! l# }$ F- q6 N       asm(" nop");
  j0 h0 H$ c7 o6 E5 c1 I4 b4 ~8 ?  C2 d
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- v# A! j" F; v$ P8 x9 j/ j
    }
2 l+ b7 N6 R8 s! Q  C4 }. g, J8 R9 E4 M
    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 [* Q. o/ N& ^4 {5 L
    //UARTprintf( "i=%d\n",i);
' G6 z& Z1 Y1 P0 l; E3 @2 T    //UARTprintf( "j=%d\n",j);
1 m. A! @8 d8 a7 L9 z    UARTPuts("Data mismatch in buffers.\n",-2);; I9 V, o/ r5 N- a$ E2 D, Z4 z2 Z
    if (upp_interrupt_count == 2 && upp_error_count == 0)  b0 z2 Q* H; @+ R6 P6 I
    {+ ?/ Y: }# z. U0 _' T( U6 j; W/ B0 J
        for (i = 0; i<upp_frame_size; i++)* d# X1 f$ d' ]
        {
- F! R7 ]/ _1 u, i0 r            if (upp_buffer_a != upp_buffer_b)
8 H* ]* n; {" }# _            {
8 Q3 p5 d" S7 k7 y                upp_error_count++;* h* l* [- f$ v& t6 v- h4 V: |
            }- K  R4 p5 T0 a/ s' W* L5 V& Y
        }8 L/ D  K6 j3 O; n
    }* F6 t: K# F- T/ \8 }* [# d+ d

2 v7 i. k& O0 [; @    /* 报告通信结果*/$ X( M+ R5 Q: U8 ]; D# w) P$ d
    if(upp_error_count != 0)
- b, o0 m: C2 U/ [9 o* w        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 g6 h" ]% g$ b, H2 p
    else9 q0 R& L0 H" b1 T9 g
        UARTPuts("uPP transfers complete!\n",-2);: M( ?5 X5 i: d. E4 b) l8 m9 k
0 _' F. Y  p' b& F% ^1 w+ B- ^& m' K
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' x& `" w+ u. r  u
    UARTGets(ch,2);
8 f6 K4 Z; P* x* s6 P6 _    UARTPuts("\n", -2);. n, k4 u- l7 i$ E/ G0 R

# Q! \- \- B9 M9 }7 Y, L  A, i. `    if(ch[0] == 'y')
+ u5 ]3 {6 S2 K% L, W    {3 M2 L" t% W0 p/ T, O
        /*打印全部读到的数据*/
2 i6 g4 P$ M% j0 S: T6 D7 i6 x        for(i=0; i<upp_frame_size; )3 V& i- z0 a  A4 r
        {2 g7 ~! F& E# P5 h" E) w
            for(j=0; j<5; j++)  u- H  O* R  o$ t' t* q6 N3 t( F
            {
/ u, D6 a+ O& {7 q  G8 ?, y7 m* P# ^                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 T5 Z2 u1 H, K! N$ r- a; V: o
                i++;
6 O- E0 z1 E. t5 D: U                //if(i >= 4096)
4 G" D  d8 T% P1 G) Y                //    break;
2 S+ ~0 n$ {' \9 S- F* Y9 J& l, w7 p- ]) \9 {7 g( g
            }) _. _5 z4 g, A( j/ s: A( j6 r0 J
            UARTPuts("\n",-2);
5 p( f  X% r) c        }* V, ?( p. s9 a" ~; x) S6 U
    }
' g8 \, J; J$ E  h8 Z
8 N; L4 V' Z2 @1 r$ Q9 n! h3 q3 t5 b}
& h8 X% p  ^: \) \
6 c* |# T8 Z! l- h+ ]

( D' P/ M/ ^5 S) H# w, A3 H) W
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。  Z7 W0 j1 h" @' K% z

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; V! W1 h4 Z, w: u% t5 u




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