嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" O# u7 b  M; E
Void UPP_TASK(Void)
( W. S" y! l: {+ Q2 _3 u7 A+ y{
( s4 m  S- P9 b2 q' _' F4 E( L; v# D0 V* e) D( w3 d# c
    int i,j,k,target_int_count=2;  a  R2 L. T, C- y3 R1 B9 h9 `2 ?
    char ch[2];) S) w; y5 V! @. S+ s- v$ ]
2 L7 ]. G; N* y7 X; _2 y
- r% q! f$ P; ^% _' G
$ H' W" h1 V1 {2 l& E
    upp_interrupt_count  = 0;
7 e  I; F6 B3 K) d3 P    upp_error_count = 0;
  Z8 D' ^, a6 _. p& w6 u3 P& z7 b- z8 ]" P0 E* i$ ]6 R
    UARTPuts("\tResetting uPP buffers...\r\n",-2);# ~' q, W. Y% z3 |. j& `
    // Initialize data buffers: |- f0 G, F+ M
    for (i = 0; i < upp_frame_size; i++)& G# E8 S9 t7 m- v
    {8 u* l1 d8 J- e+ v7 V
       upp_buffer_b =i;
) v/ \+ G% l& g# I       upp_buffer_a = 0xDEAD;9 v) ]# K, _1 i/ ]$ A
    }
9 P) k) j5 d0 m& g. t- X4 G: w5 A+ j- A! l7 A1 o& V; e
    //for(i=0;i<1024;i++)' h* e, {, j* p$ _& y! G
    //    temp=0;" u4 C+ k; }  S# J
, d& E8 Q# {5 }4 g; X" k8 U
    //UPPReset();
: W9 E2 R* u5 F% r8 U* }    /*启动UPP DMA传输*/* D/ M: a# b+ [  b- T/ ]
    UARTPuts("upp_prog_dma_i\n",-2);. b4 n, t" l1 {; v' m
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: k+ e# a( S+ D- N8 f- a    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 I4 t# U6 [; l' k9 b* T! J# b    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, s1 ^( a8 J. K% U3 t, [% x: r4 x+ u6 a& c& m# C5 q/ n! p4 N) z" z
    UARTPuts("upp_prog_dma_i\n",-2);
0 d* ^. B$ ?" U$ e* _    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ P7 k, w& w% y7 P' G2 E2 p
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! |2 F8 s# d6 x% c3 u3 O7 ^& I/ {    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* _$ G* c, T% ?! c# |0 d7 c

0 ^9 U, x6 m3 J; b  W    /*等待UPP传输完毕*/
+ |0 G1 y0 l: t; e& r    //i=0;
3 ]0 ~5 U8 i6 j3 ~( h    //j=0;! g+ z, r0 s: c/ J( U3 A" T/ Z
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' _6 X+ `; q* M& `0 N% \: T    {% q, I. l: Q& b1 t9 A% Y
        /*  测试UPP传输的同时操作普通DDR数据
4 O0 l6 Q! M- _9 Q. x. Z; K* F        temp=i;$ f. O1 ^. ~# a: N. y
        i++;
; M5 {2 Y4 W/ K; M        if(i==1024)8 w) c) v1 L) s: W6 e2 D+ B1 C6 _; C
        {, d, X" ?3 l! G& I4 z3 P
            i=0;
# O  r3 J  c7 {, W5 H$ N0 x3 r6 S            j++;7 Z8 v7 T4 \; J! _
        }
* `2 z  k/ ~9 Y$ g" f- @5 q& T8 S2 C        */9 e( X) g& j8 U- u% H! `9 u

* g, A; ?1 a9 G9 z       asm(" nop");
) e4 G4 P/ g* a7 \& P% E- k) Q- I! @1 n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- p% U' W: O& Q' @5 g
    }; o, j( D2 G6 d

8 z7 B8 K4 I2 B/ X    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ u6 \: ]0 E2 u# }+ h, m1 X* R" U    //UARTprintf( "i=%d\n",i);3 s5 I7 y2 D% F+ X' H- c
    //UARTprintf( "j=%d\n",j);7 J0 Q; R3 O$ l6 S" A6 q
    UARTPuts("Data mismatch in buffers.\n",-2);) u+ T( {1 z1 p) i$ L2 H. c& G( m, {
    if (upp_interrupt_count == 2 && upp_error_count == 0)% e8 F/ a$ B% ~; A
    {2 j/ p0 b5 {, g  `/ Q- u. f" e4 K
        for (i = 0; i<upp_frame_size; i++)
& ?% s! O& O3 ]& m" y  [0 c        {
6 z$ Z5 \- t7 D5 [1 ^            if (upp_buffer_a != upp_buffer_b)3 W& w$ S7 }" v
            {
$ Y* d3 S5 o7 G( [) _# l4 m1 v                upp_error_count++;
+ n7 O* z9 R* l            }
! C: N2 v. U$ c( Q' e        }. q' v! e2 M4 \' Q* B
    }
! Z( h& v7 U, j/ R
+ ~. ]2 }+ J/ y: m    /* 报告通信结果*/
/ ]5 u. @% s0 W7 y3 K( @2 ^    if(upp_error_count != 0)
& @; _9 ?5 Z" e3 J        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; _, O6 D$ _; @" h' K- a; z    else; u4 \3 p/ |+ ]1 ]% b
        UARTPuts("uPP transfers complete!\n",-2);
) m& A9 n8 p6 l; `* H5 Q8 m
- h4 T' d' P/ e) h: |    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
4 D3 ~3 m& z+ c8 P3 m    UARTGets(ch,2);
3 C& _1 T& }8 V1 J    UARTPuts("\n", -2);5 A+ z7 Z6 H& s$ D0 B

) \  T+ G, V% t1 q* `! h    if(ch[0] == 'y'): h+ g8 c4 v3 l
    {
: g0 U7 n4 K2 m* {: w/ i: g        /*打印全部读到的数据*/
" u3 z0 K4 I& h6 j0 c  e        for(i=0; i<upp_frame_size; ): F; p$ H: M! d
        {
! a2 \; j$ o6 ]/ y3 A. M- j            for(j=0; j<5; j++)# |4 ^9 c3 Z9 N+ y. p4 P+ o
            {; s% U4 M, A# E& N' f+ C, w
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. A2 g0 _6 @6 j; d
                i++;) g1 U: A5 |( Q6 j
                //if(i >= 4096)( Q6 U% W5 ^* j
                //    break;
& @  Y8 R* |5 P
( f2 {( U8 y) D( J6 ^2 m4 C+ z4 I6 r            }# E1 M, [% M* e8 I
            UARTPuts("\n",-2);
% ]+ t: p9 `1 p/ y" l7 [4 }  l        }
2 I2 |/ X% T9 z3 V. F* g4 I+ T9 O    }
/ v" p* Z3 P: ^( p% r0 D2 O0 M7 I4 L& I3 u4 m( s" e: w' [
}
" N% G1 l( A/ K' M3 ]" V

. ]! K: B' ?" ]# a" L5 Z# _3 I7 i. [7 o* e, @3 p. ^

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" U' |8 X% B' H6 D9 o: i# J4 c
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 J/ H0 S- y) t9 j




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