嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 P1 M2 S- i  W: B  B% O3 ^
Void UPP_TASK(Void)
0 \2 n; ^* y; z{
# `3 v4 G: ?2 u2 g3 k. W5 \, r; b( y8 W+ K  `+ W
    int i,j,k,target_int_count=2;/ [7 |* r, N9 ~# ?2 S3 d
    char ch[2];
" ?( q# v/ d1 H$ U, n  t8 k* j5 b' s( g, L' D
8 f9 A, ?, e, r
# Y9 A- m: q: w# f
    upp_interrupt_count  = 0;
9 p0 F) z0 E9 J1 L2 k$ V2 @    upp_error_count = 0;& A9 X- c0 k5 h5 \  k
8 `' D% V( r2 U
    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 K* K; z9 j* g- p/ |5 v/ g
    // Initialize data buffers2 T5 o& x& H7 J' F) R0 J2 W' J5 i
    for (i = 0; i < upp_frame_size; i++), m0 s8 s$ @/ z$ n
    {1 V3 `" S6 Z/ n  Z
       upp_buffer_b =i;, d/ B- o, F  b1 m# n
       upp_buffer_a = 0xDEAD;
/ |( j- y4 ~, l- S    }
# G3 O8 t# B8 R" d- J  r+ c2 V- i; k6 `
    //for(i=0;i<1024;i++)+ c& C+ D: a. ]- p  H
    //    temp=0;" y% h( h6 N$ N# q/ P2 f7 T: P

- n& W+ l9 F3 n    //UPPReset();
6 s% u7 R; v- U2 w* Q5 y8 |+ I    /*启动UPP DMA传输*/0 x, Q+ e  Z0 ?9 v4 o+ h) T2 d
    UARTPuts("upp_prog_dma_i\n",-2);$ M7 o8 P; a/ d- h+ c9 O& X" G
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) \! l' R7 i( _/ ~! r    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; d# u  j) a2 M& Z; e0 f4 H! _- |. P    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, E( m: p- G  I+ F! S; `
- A7 u; B/ |' w, x. P( ?+ J    UARTPuts("upp_prog_dma_i\n",-2);
: I) e# U/ h/ @2 S: g; B) |    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;" ]7 u( Q8 W; Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ }9 ]0 F, ]! `+ q  n    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 Z( e5 W/ j' s6 c
; T. o" {6 ?5 S8 P" n
    /*等待UPP传输完毕*/4 r* x& q3 L+ G( J2 S! s: [
    //i=0;
2 u. f1 N; E* t# p8 |8 r9 m# X    //j=0;
6 \4 n: A, t& a: _+ g    while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 _% Z. A$ U4 L
    {. z6 ], Q7 i( _$ c- m$ _9 q, a
        /*  测试UPP传输的同时操作普通DDR数据
! S9 w( |5 i: v8 `: z9 w; L4 [. E        temp=i;
1 |1 s+ p: w* n# c, |& Z        i++;: ]/ }/ |: F- U$ v
        if(i==1024)
# O2 a2 T$ _- i        {
1 J) x( @' N- w7 G4 k            i=0;- x) t1 R6 l& R: ^; B' a0 X
            j++;& E7 z! o4 P2 O1 I
        }$ S2 f0 l1 m0 I3 r, s7 F4 c; l
        */
7 _  B9 k  W- K0 y3 M7 M
+ F; X# S8 |; e. n       asm(" nop");- n4 R% A) x1 R, H5 h( a0 h7 q0 F
) Q4 N! y) }6 o" p3 M# Z8 }
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) E% K  f8 E7 y/ k
    }
9 k% _% O$ `2 N% `: w
( I  a0 j, j! n& K    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& D6 c1 ^! {6 [6 W    //UARTprintf( "i=%d\n",i);4 O# ?9 J; H* o/ Y, {9 V
    //UARTprintf( "j=%d\n",j);
# O0 l3 u: D2 b    UARTPuts("Data mismatch in buffers.\n",-2);
8 m. `, o1 T7 ~/ a$ D' H% r    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 t1 P% V; N6 T$ x3 O7 }( K    {
% x3 `) e/ J: |1 I* D4 P        for (i = 0; i<upp_frame_size; i++)" ?, z; p9 I* V7 A+ ?+ r) y
        {
3 M/ ]  I( s5 s: m& j            if (upp_buffer_a != upp_buffer_b)
7 T' o. K" m) C3 b6 M. _            {: u4 b" Y+ H3 o' D- ?
                upp_error_count++;9 X% B3 p& }" w8 \; J
            }
# Z! A5 K: N/ B) S        }' o! z7 I1 B3 U1 k8 {
    }5 J9 F$ m* S1 @) ]8 E
% `' Q. m. M" ?/ k
    /* 报告通信结果*/. M0 d9 T* X* ^2 |' t+ w+ J. }
    if(upp_error_count != 0)
) U$ b$ f. [- X( q% R. q        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ j; N; u% H" ?4 \5 r
    else1 L- q4 q1 V$ ?8 L  B4 i3 n
        UARTPuts("uPP transfers complete!\n",-2);6 h& D- G& y5 L4 {; D; A
- c6 [% x( i2 q& c. N
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& h0 n) Y% u2 Z+ Q7 m. ~2 A    UARTGets(ch,2);
! w; R. E, a" Y" B8 g; \4 Y7 u    UARTPuts("\n", -2);
! V/ f4 K$ d& ~$ @% l' L
+ Z# C: ?, e/ [    if(ch[0] == 'y')8 T8 o. o/ I; t7 Q
    {
8 L3 W- @2 U3 V) \" n        /*打印全部读到的数据*/
) r: ^5 m% g; M6 G) a        for(i=0; i<upp_frame_size; )
: \& a4 i* m* q        {
: V7 U7 c, h1 I5 ]4 Q8 G6 t$ k            for(j=0; j<5; j++)
2 h2 m' |) |& h1 C            {
7 k) L* K5 g0 \9 i3 F% g& ]7 {                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) L8 Q& U$ S6 T5 k4 o) I, q# a/ g                i++;# g" O4 H( T* ?" |5 `
                //if(i >= 4096)
8 y0 a& j& Z$ S" v; m                //    break;  G$ |* W- z2 Q' R- {- O
7 B# H1 R4 e0 N( R0 b' _$ R; ?- E/ \
            }
/ g; P4 \; \- ?* b7 x! `# D& |+ F9 I            UARTPuts("\n",-2);
& N7 C( I/ Y' W# y        }! }2 A* }6 v* b2 X
    }
& p7 m$ k! t0 i  ?6 _1 w6 I* w0 {
}

9 m2 x0 [: ~4 P  r/ r

  C4 r) E( S# X5 z; ]% C4 k6 \4 p# ^- ?' A$ t

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: ~8 T  p3 W: r" n0 ]$ \
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( a; m5 w% I( i" L! M; |+ W8 \





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