嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 O7 P: ~+ G8 ?) E  T* C
Void UPP_TASK(Void)
- B  `) h) d" d8 m+ p{
4 g& h, u+ I  E' A; V* ~4 c1 a2 w: _7 q. g
    int i,j,k,target_int_count=2;
) z1 w; [' |/ z0 ?7 m+ w    char ch[2];
0 F' e/ E9 }( M; J: U' ~7 O7 @9 b2 a

+ h& \0 t6 G. T% f; y" n. E1 E) x! @/ t, U
    upp_interrupt_count  = 0;7 o$ _' t1 k6 c  u
    upp_error_count = 0;
! b: j: G3 {8 l9 ^& o+ _0 Q: {! b
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; _/ l1 k2 R$ Z( }6 j6 I    // Initialize data buffers
) x: [  ^. A+ F$ Q    for (i = 0; i < upp_frame_size; i++)
' S/ e2 c6 D( f1 ^0 x    {
9 Y, t2 Y$ O. F5 y       upp_buffer_b =i;4 u, D( z. J: M7 d8 ]0 T  w# \
       upp_buffer_a = 0xDEAD;
  Y" `& x, Q1 |- g    }; d" ^2 c2 j" B0 o: v  H* D( t% q: d9 o
: y  t( I  A, J4 X' N7 G
    //for(i=0;i<1024;i++)
/ ]  J1 y7 Y& z' b0 e5 \9 m    //    temp=0;2 b; @+ n* ^5 j
; S5 r! h5 i. h4 e+ F
    //UPPReset();
2 K) [5 A) g( O0 ^1 C, C0 S+ E3 _    /*启动UPP DMA传输*/! }% l3 E. g; o2 ~/ @
    UARTPuts("upp_prog_dma_i\n",-2);
9 d- C3 O( E, @& G$ `- t    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;0 \/ R! _% x3 J# g& E6 S" h
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 ]. }, k$ |9 ~8 Q' N* J4 a    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, H" x6 |! f; J4 d1 B
% i- C# E/ o1 w2 W    UARTPuts("upp_prog_dma_i\n",-2);3 @& |; ], d& J4 t
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ }9 f' l8 p2 J) n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) v- [5 f) c! v: `
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' }. M6 o0 y2 M# O2 K1 }; o; F& E7 `4 H; {& M
    /*等待UPP传输完毕*/2 `. {& Q, X9 p/ H! p
    //i=0;9 H+ G: |  H7 ?  t5 n
    //j=0;% Q* N; a( N1 l# D8 s7 b6 X9 Q4 o
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: [( [# I( l& ]    {& c5 I  |* [7 b. l9 q8 T" s, {- N
        /*  测试UPP传输的同时操作普通DDR数据# B1 W- l0 ?* s% q
        temp=i;8 p7 n+ O) n" n7 S( g" y! q
        i++;
7 @7 S! R! W) u, X        if(i==1024)
7 [$ r' R! ]; \: o0 T) I; v1 v. q( h        {
7 L  F3 }/ `, [; o            i=0;/ P. e$ i) [( L  \$ |/ j& `
            j++;
& _0 n+ x: g  G* R. |: a        }
( G; y8 ^% q1 f) i        */
% _/ }( Z5 F, [* K: ?, M1 l8 C, W1 H: h  a
       asm(" nop");
3 Z; r) B( G( D! q% S" [, h
$ f. M& W2 T8 q( @1 f       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. T, T- ]; p: `% h$ T1 K' \    }; h5 M6 G+ `5 N' z

+ h: f) l( M) s    /*检查UPP传输的数据是否正确 (loopback modes only)*/
! N# p3 }( O# o+ C- W    //UARTprintf( "i=%d\n",i);
$ }5 \3 K0 G+ f- l, v" b' w    //UARTprintf( "j=%d\n",j);- o2 K& m* ]3 P7 w
    UARTPuts("Data mismatch in buffers.\n",-2);: k% Y% m! P: K, e% K9 D* M
    if (upp_interrupt_count == 2 && upp_error_count == 0)# e% W8 e8 I3 }$ {7 T, A9 _. W) Y
    {
* m. S  d) Z/ z, }$ p1 p        for (i = 0; i<upp_frame_size; i++)
- h' @) j# R4 G1 e" v        {% ^, c0 P' _3 |) K8 _  [; ?
            if (upp_buffer_a != upp_buffer_b)
' f! N: S7 _  T% [            {' t  u7 Z  H5 r+ ^: o1 p5 R
                upp_error_count++;1 J; @! C$ Z7 h; I- D0 ^/ H
            }6 h+ c( ^- x( s  l! t$ h
        }) j9 r# T6 I/ b+ i/ T1 Z. e
    }! A8 Y2 C* W. t, l2 A

1 Y' X% e. B0 i: P$ j  ]7 Y    /* 报告通信结果*/* b7 q! {+ N4 ], t
    if(upp_error_count != 0): H& u( ~% V$ U8 w
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 e2 H3 ~( {! h' K' o7 T    else
4 H! [% @. m. T6 I, K3 [        UARTPuts("uPP transfers complete!\n",-2);/ B5 {8 v3 X6 m$ T0 D' u1 v6 D
& l2 b" V" n6 ?8 E, i9 ]7 U: q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" a8 A$ ?2 _3 f; z: q1 G, X( T    UARTGets(ch,2);, O+ H. N( Z& _
    UARTPuts("\n", -2);! z, U% A$ U% i( J& T$ b! R, t

) t& e( n3 u* ^2 U, [, |    if(ch[0] == 'y')
+ n8 h* }/ q0 ~) a! [0 i! ?- ?+ Z# m    {. a5 t% u/ C9 ?7 m$ A, X
        /*打印全部读到的数据*/
  N8 V3 s: K# H) q0 [' S+ C        for(i=0; i<upp_frame_size; ). S7 y2 }! y. Q& D
        {
+ {  E, |0 u  L9 L8 Y4 h; D            for(j=0; j<5; j++)# c& x) ?! \* V2 L
            {/ Y' R- s+ p# @2 G+ b6 A( E5 R( B# _
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, G2 j: f- W) h$ m
                i++;. N5 I5 Y" j0 S2 c' W
                //if(i >= 4096); z% s, @& m  g6 ^' T4 G. f. w5 K
                //    break;0 D+ @) t4 L2 Y! g$ d

% s* Y# Y4 ^/ K8 P& }# q* r            }7 E7 l7 x2 ?+ m1 f* P+ J0 H
            UARTPuts("\n",-2);
% I4 T+ s1 {/ J* C. r6 E# [" ~        }. D5 \5 V* n, x6 X$ B3 l5 ^# {
    }2 D1 R+ i! W  C3 x

9 |: k. r. c. _+ g: E$ J( j}

8 H$ C% p0 m% _+ ^
2 }- \) \, O% b( S: i5 ]

- F0 w. y3 U, ?% G7 I+ w( z- I, o
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! e4 K/ x/ W) m5 L6 o% W
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 D- T: i* z5 p4 ]4 y% C




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