嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; G4 Z: e4 O. D) }$ k0 E0 `+ o
Void UPP_TASK(Void)
& [# \2 }1 W% x& h- [: t5 B7 u{( ?& `: k0 P& k  j8 E

" k7 h: ~6 [: A1 m    int i,j,k,target_int_count=2;2 g2 ?+ F1 p- W, Z$ V: n
    char ch[2];
, l: T4 d2 e1 U, L7 M" Y4 _9 h! `) O1 p/ V% J4 _$ B; ~2 M% N
8 {7 k* Z; V. H

7 B$ i. f1 Z! W7 D4 `    upp_interrupt_count  = 0;+ j: e$ X5 Y  v" A" U: ^: R
    upp_error_count = 0;
; t# M1 O6 B$ u8 x3 R  T# u9 @2 r
& h0 Z. p7 ]3 H+ R! i" N- }* ^    UARTPuts("\tResetting uPP buffers...\r\n",-2);$ d+ {* q! H1 P2 E( n
    // Initialize data buffers8 x+ q, u) L& J+ S) z3 F
    for (i = 0; i < upp_frame_size; i++)1 s* t* |- w7 a
    {
6 L$ n( e/ c  y( u4 z: |       upp_buffer_b =i;
; P, U6 p! Z4 n5 `       upp_buffer_a = 0xDEAD;
& s- Y+ P+ q: j$ Y5 z    }
+ o# N( j3 }8 D; \6 G# ~! V& A/ o& k' d6 F7 S7 }
    //for(i=0;i<1024;i++)
3 b& o% N) ?; U, [    //    temp=0;
, c, ?4 w& [6 b* f6 K0 u& u  h4 ?* Y8 z' O# k7 t
    //UPPReset();1 }, ?- t0 F$ ]* K
    /*启动UPP DMA传输*/
1 y2 L1 I8 ]( E6 C& ]: D    UARTPuts("upp_prog_dma_i\n",-2);
1 G  `0 C$ r/ M' f) y0 z    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ E8 a8 Z: A, |. D" |* z    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* j% q: v/ v$ M- }" ~1 H0 o! ~
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! I9 S9 g) B# X( }1 Y' [' L* e/ O
, ]. Y8 M$ b! ~$ C2 q3 q* P0 v    UARTPuts("upp_prog_dma_i\n",-2);5 A6 f3 @* `& A. q- H
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;8 D+ D( Z. [4 M: s
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 ~. ?5 J& z- f1 M9 ^2 J; K3 l
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* ]* ?, O) r! r" w9 w
: k8 _  J/ x. S/ O/ R, g& h    /*等待UPP传输完毕*/
. w7 z1 Y5 Z) U# E    //i=0;
* @) e' ?  K! m% s' z" {( B    //j=0;8 G( I5 r% G2 l5 V. [$ F
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! }. N) f9 ~: h, U) q' [8 y$ P; Y. n
    {' a+ R9 r# b+ }" h: b7 o0 J
        /*  测试UPP传输的同时操作普通DDR数据6 A5 D+ m- t: i0 _! |) R
        temp=i;, k( R, A- B1 P! Q. }) L0 g! D
        i++;
6 e  r6 e" R/ F8 E7 j+ q7 @        if(i==1024)
' j2 q% V- Y8 G: ]' |        {
" i8 D8 U& z1 S            i=0;5 v6 X' ?! Z" n7 W  P2 y
            j++;
3 S* W4 c: ^  H  Q        }* i2 B3 k2 i" L. u$ c  E: ^& ]
        */
) \% _1 m7 A0 D/ X8 p9 l* I" e5 Q$ e1 g4 ^" N; G3 W
       asm(" nop");
( J$ ]1 V7 c4 M8 B% r- s
- I7 I. b7 U9 u/ |: B, W1 ]  t$ l       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( r: B9 z$ ]" v    }
7 i" _9 U& y; u- e* Z
2 A# W9 |/ U( H! p% ^    /*检查UPP传输的数据是否正确 (loopback modes only)*/
; \) m1 A8 |+ c0 A, X    //UARTprintf( "i=%d\n",i);( y- I- e, G* |" N2 S' {1 f
    //UARTprintf( "j=%d\n",j);
: G2 ]  x  R3 G4 g! D2 v    UARTPuts("Data mismatch in buffers.\n",-2);
$ R/ C4 f' A  b& L& }    if (upp_interrupt_count == 2 && upp_error_count == 0): V1 ?2 u8 k! t5 ~; x+ b+ \! v3 J
    {" L4 ], o0 D" t0 ^  ~  ~" Z0 ]
        for (i = 0; i<upp_frame_size; i++)% [& g2 c. a) X; b. d6 V% ~9 ?* Y
        {  ]% a0 G6 H2 Q9 c. v0 j
            if (upp_buffer_a != upp_buffer_b)
* P# V' b9 i3 \) D2 m! R8 E  C            {
* ~) S5 w& J0 I+ p2 t2 V( F                upp_error_count++;" b) C1 y4 b/ y, C5 k
            }
3 O( _$ C4 ]1 P) @& e        }
7 C( d# o5 H$ w* D- w    }+ T* V; J% I, @+ [8 K) L  J) a

3 j  `1 p/ G7 {% }& y    /* 报告通信结果*/8 ]7 D4 n% w5 k+ \6 R" \* D
    if(upp_error_count != 0)
& h2 T5 a+ ]6 B+ ^. c        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 g' W  P' u) N# E/ I$ n
    else
0 r0 i& a6 z: F  U$ r        UARTPuts("uPP transfers complete!\n",-2);
$ v$ J1 j( x8 r& |5 Q( ~9 d# m& O( H* w6 s& i& y$ m
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
3 h3 M- a# z$ q: Z% G- b6 e    UARTGets(ch,2);3 t, l; N7 t! v4 T; n9 c
    UARTPuts("\n", -2);
5 S8 }6 u6 k% o9 _0 c; ?7 x4 Y' W
: e  B! }9 T9 c* c2 o2 m. t    if(ch[0] == 'y')
1 }' e0 r+ h6 K6 h1 d7 B8 _    {' s8 Z. ?3 C" D& [9 y9 W) X
        /*打印全部读到的数据*/
* _1 x0 b- W7 ^1 W% J7 K8 ?        for(i=0; i<upp_frame_size; )
0 z" i! k/ P( v/ R6 _, s8 [        {3 a9 d/ ~8 U, l0 f9 U
            for(j=0; j<5; j++)9 T4 m( U7 {# i# c
            {# u; |  s4 E. ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  |* j, A  P& ?5 D1 |" A
                i++;
5 N/ R5 u0 c: H  W( _                //if(i >= 4096)+ z* C5 X) ?& j4 p! F1 s- @/ @3 I
                //    break;" X$ P0 n  X: t# f

" U/ J# l, g6 S$ s            }5 \! Y! P& |% m* z5 X2 X4 e3 H
            UARTPuts("\n",-2);# d* N  D# q/ x$ p$ @- ^
        }
! ?* U2 R5 [) n4 Y& U    }+ i3 j- H7 D' J  x. ]

5 S% e! q, Y8 K}
0 g/ @3 {7 ~1 }0 V' l
/ @; S# t1 Y% a) `3 g
9 b( O4 E+ d2 ^

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# l- X( m( q( W4 u; c& R
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 Q: E8 ~4 X4 S




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