嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* I& {- l8 h" U) n1 J' s3 _
Void UPP_TASK(Void)! h( X( Z3 Q3 [; C1 ~
{) Y) K5 t% L, X# g

$ S$ C1 v3 r# s4 F    int i,j,k,target_int_count=2;
4 Z9 W9 Q/ ]' a    char ch[2];9 k) m: i" {& e% r( I4 v, `& H
' T/ g' _3 ?' z3 [& h& g% I9 j( P7 U

7 @7 ]7 l6 R( ~" [
0 Q+ D# o4 e# }; S" t! H* Y    upp_interrupt_count  = 0;6 P3 b! c7 G3 G  F
    upp_error_count = 0;, E5 J* s# D7 p& }3 Z" H
( }2 t3 m. c3 h8 H* K( Q
    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 y+ j1 {( d, g" o
    // Initialize data buffers
. x- E! G# B& p* }4 r2 Q7 q- j    for (i = 0; i < upp_frame_size; i++)' R- F7 O. B6 \6 S# ?0 k! R8 R1 p
    {
' o7 K' L  W" @5 q. |       upp_buffer_b =i;
; Y# E8 v) a/ T0 D  |# O. q: G7 D       upp_buffer_a = 0xDEAD;
1 @# e9 ^* O6 Y8 g' H: G7 |    }/ ^4 K1 G) F* E3 R" ^6 o% t

% ]# ~. C+ C8 C0 p' [1 y    //for(i=0;i<1024;i++)3 X+ Z$ }6 H$ J0 L/ t$ ~) D0 Z3 ?
    //    temp=0;
* Z6 p: e/ Z. w. ^: H- M  P4 T# R6 @2 S' \* c
    //UPPReset();
) S' T8 ^' h5 T, N% e  M4 N    /*启动UPP DMA传输*/
. {) a& [/ S/ E6 u) k' _    UARTPuts("upp_prog_dma_i\n",-2);; w. r; w# O2 _6 k+ Z
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 ?1 R/ X  R. x; k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 z( D" o" D) ]0 V+ c    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) P3 B4 ?$ k0 ^) x' E  ^
6 p$ s' |/ u, {( x( w1 ^
    UARTPuts("upp_prog_dma_i\n",-2);
: }- N2 a0 R5 U: T3 ?1 s    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 x! R- X4 |' p
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 ]# M8 ?+ X0 l* @# K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! l8 }+ b1 A- f: M% ]' q( C& }$ K& o( k% b$ i. R6 ~+ t
    /*等待UPP传输完毕*/" u& u$ R  z( }! ~; m
    //i=0;4 B6 a( e6 \; y% e# y
    //j=0;
1 U% k- ~$ w; ~$ o    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" t6 K$ a$ M% ~* s& g. C    {
# l( C* Q2 c7 a& g# W, a        /*  测试UPP传输的同时操作普通DDR数据: [' }: z3 e. \7 D8 _9 @5 s
        temp=i;7 D8 y4 U$ `" G, q: K( ]
        i++;
- a( k# ^( L4 }  X# y) \        if(i==1024)
8 t2 c9 x2 F9 r        {+ j' R% n! S+ h8 U) Y
            i=0;
, W/ w0 n, H2 f5 S- [, l0 }            j++;
. r" s5 ~. k- h" e( ?+ ~        }
7 c9 R: F% Y* l& j        */
, O+ a) l  c5 @6 b2 ?& v: H0 I$ m- r. y) {
       asm(" nop");
5 E5 ]4 I% L+ M) l, N, |. \. N2 Q! ?+ u
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. y9 _' L& A4 e/ f    }
' q' B* a* x* L$ `( E# X# e
' b2 p, |0 ~: A5 J2 w: `* s) _    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ \% N' x) l- r0 [1 f# s, k    //UARTprintf( "i=%d\n",i);) L* s4 Y3 w. J& I8 _) ]
    //UARTprintf( "j=%d\n",j);- n& T' ^# w8 o; v, D+ L+ P
    UARTPuts("Data mismatch in buffers.\n",-2);1 r. |  S4 p; h* l$ O! \
    if (upp_interrupt_count == 2 && upp_error_count == 0)
: c: z& T1 q  F    {
8 s( j: P7 D- G  q        for (i = 0; i<upp_frame_size; i++)! h! f* r6 w% ?3 r1 y2 E1 m
        {
' u% b! M$ ?$ d6 g2 b. W            if (upp_buffer_a != upp_buffer_b)( T8 |2 q2 [; e+ Q3 C7 X& ]9 p
            {
, ~7 v: c: a! V, z' s: \( f                upp_error_count++;' n2 J& F& j4 s; E
            }
& U4 A6 `' ?9 F" l! T5 x7 c        }
7 z% F3 U1 Y6 C# H; [    }
7 d7 j+ w: ~  H& X% z" \: d# R) f7 `+ w1 B& p2 N
    /* 报告通信结果*/. ^( a; M& t9 |0 @0 j
    if(upp_error_count != 0)# u& a$ ]9 n+ n; A8 L& Z  @
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 r0 W" S3 s8 B" X3 A5 l# ^    else
% q; O& J9 o+ p# R5 W        UARTPuts("uPP transfers complete!\n",-2);
( ^! d) N' ^9 I2 O9 I9 l. N+ [5 `1 A* j3 P2 b0 d; X$ ^. h  x! w8 m
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);+ g3 c" f, W: w. C2 ^, R) k" E
    UARTGets(ch,2);
! A3 T8 K' s/ L. r6 N' Y    UARTPuts("\n", -2);
$ L6 d  G# Q# p1 W0 r9 A8 N
6 p, I3 m% F- e1 X0 m6 Z    if(ch[0] == 'y')) K( M2 q6 S- \: `2 B
    {
( g; y2 \, H: G9 t- t# q9 X/ D        /*打印全部读到的数据*/
- y5 T1 R1 V& C- D; ~: W5 g. N, h        for(i=0; i<upp_frame_size; ). `! M: w4 V+ w6 [( z" e# P  c
        {0 c# w8 }2 P) Y2 v3 W
            for(j=0; j<5; j++)
- T# c$ ^; W6 `4 W; m8 o* t9 _5 Q0 k            {: l' f$ {0 s- r$ h* d1 y( Q7 H$ e
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
3 r4 }: x5 D# N$ O1 l) s                i++;
) g9 m- F! L% v! s0 q                //if(i >= 4096)8 A- c; v) e7 e9 ^6 f* T1 H
                //    break;
# I. S) n0 K) o7 Z' n" p+ l) r% N, j2 M3 r3 N' g
            }
  r! D4 {$ _1 V! K4 ~( f; u            UARTPuts("\n",-2);+ `+ h3 Q3 x) E5 q- O, p! [8 W
        }- x/ L! A$ x% Q$ q* \5 }
    }
( f9 t( C9 H4 P4 o+ W4 ^, K6 X& w6 @, R
}

! Y; i9 s5 V. y$ Y

9 }, Y7 h2 S1 V4 r. E1 c( n$ d4 o
0 {  E2 N& c+ a% A% M8 O' f2 i
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" v5 z% Q2 m% {8 |
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 L+ {. x- U2 v( I) U. T





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