嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 g, u8 R  U: z; i+ A* q" m
Void UPP_TASK(Void)
& X& U4 `% S4 [. U{
5 w3 a6 x" h+ W* y3 @. `1 y/ ?' X" S2 V# V# Z) R
    int i,j,k,target_int_count=2;  \4 I" }  d' n  W
    char ch[2];3 U& V8 d$ i; Q* \

* v) y) B. N! s% `" v+ f
- E- T' x' S: u) w8 S. i& s" F; V: k$ u  ~
    upp_interrupt_count  = 0;& G% R5 a. ~0 z( z/ M: k
    upp_error_count = 0;
1 [" L. B" t( S
) b; ]- b/ v: ^/ s3 H# w) O    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* Z: d  |4 K: D    // Initialize data buffers; }) u% y6 e7 p$ P1 r7 k* p: T6 q
    for (i = 0; i < upp_frame_size; i++)1 u5 l1 ^& M, e7 W: t1 \/ |% `! ?
    {
: e1 T1 S% a7 V8 |7 z/ j       upp_buffer_b =i;
, x* Q# @. F* `% M0 o. G1 }' ?% N       upp_buffer_a = 0xDEAD;
* r9 r( A. T, N+ u    }
% b2 t$ c6 W, z: C! u- n7 @! z) E6 y+ w, X
    //for(i=0;i<1024;i++)9 G" U" v$ @  ?9 W' q) U4 H0 |7 ]
    //    temp=0;, E1 j  Q  i- F6 Y- d, O  b: H
8 [. h+ x' I' h! w" a& m" b
    //UPPReset();
# O4 Y: v/ V9 U) y2 x    /*启动UPP DMA传输*/
& r, \/ w# I. L2 U# l, g( H    UARTPuts("upp_prog_dma_i\n",-2);! T, x) d+ A5 w2 ?/ l3 @( s) N
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ l" v) [2 |" U7 f! S
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% Z* o7 `& r/ ?- T/ {& @    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 h  Z5 J8 Q% Z( ]+ \% `
" G; }; E* r# ?" W5 o2 Y- w( g/ u    UARTPuts("upp_prog_dma_i\n",-2);
; {4 ^# X, R+ W5 |6 x; S1 D( U    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 c1 k1 |% b+ k, B/ e- X' M    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 u/ P/ A( {& G  n. Q$ X. a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' N% U" U5 b% P1 A
4 Z6 b& \2 V: i* F# C    /*等待UPP传输完毕*/: M3 ~7 C% t( O
    //i=0;+ d; v& v1 A$ i  `$ r# Q
    //j=0;8 p; x9 P) ?9 @/ E' ?
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: v* h* R$ z: c3 t( l7 N    {
3 O3 H7 w6 u. k) }        /*  测试UPP传输的同时操作普通DDR数据' i! X" W6 w$ B+ S) }$ m
        temp=i;: c) r! D- i1 W: r/ G* f+ j7 R
        i++;
# |( p' _7 B1 {$ ?5 t, N        if(i==1024)7 Z) B, U# g% c* k
        {
" w  P6 T" `: X4 T; m! Y$ g7 ?            i=0;. y' U  X. \. Z' N, A6 G
            j++;* ^5 \1 o. O9 @" u0 F9 i
        }& D) ^) \+ I2 O$ v) Z$ r3 ]
        */" M3 [8 Q' C+ q+ R

$ p+ U3 n- E, X4 _, J       asm(" nop");3 ]+ s& ?. ]3 u, d
! A2 F: G  s# w& ]# V8 V- d. l4 M
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- z3 I. m. @8 z
    }
+ i' h& s6 t. o+ P5 y) i' R4 A" t0 N/ T% _1 o2 k
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 y* K7 @: X/ `/ `6 O! q    //UARTprintf( "i=%d\n",i);
6 S& Q1 W" p8 t- }8 ~( T& P    //UARTprintf( "j=%d\n",j);
" ]9 L1 @8 o9 p+ S    UARTPuts("Data mismatch in buffers.\n",-2);
5 f: e( d# C" f$ J( ~9 ^* p8 f; T5 Q    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 a0 x) A9 Y, [# e+ g1 a    {
0 L7 z. b$ ]. ]! e        for (i = 0; i<upp_frame_size; i++)9 A. D" |: N. u. _" {& _
        {
" H1 T5 ~3 t6 M& n            if (upp_buffer_a != upp_buffer_b)
* D' D5 R8 z" p; a5 [. C            {3 |& H+ O; g9 f
                upp_error_count++;% g! H; ]: V. Z3 b4 E
            }
0 A, b" F, b% x/ ]' o( o5 F# Z5 w        }
0 S8 v! w: h: M* \& s    }
6 u# S* Z3 _7 J8 U: E4 n" Y$ P% x) _/ _! }( C  z3 C
    /* 报告通信结果*/' p  }0 j! n) I  Z) p% F
    if(upp_error_count != 0)
% e5 U0 ~  t0 x8 \        UARTprintf( "upp_error_count=%d\n",upp_error_count);
& g  b, A1 C/ K# z8 ?/ q  x; r    else
2 o/ P. I/ [  D' Q0 L" K        UARTPuts("uPP transfers complete!\n",-2);+ F6 z8 x9 s$ }. Z" Y7 v( D

, y! j3 j4 {; Y6 T  ]2 x2 {* _    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
7 x0 V4 |6 n& G2 y, \6 V    UARTGets(ch,2);" a1 t4 s: X0 m; W
    UARTPuts("\n", -2);& X2 @. k8 t& {: H3 G0 x

) e0 i; h& t  K+ Y    if(ch[0] == 'y')4 P) L; m2 l+ l8 c4 N6 n* e: Z- w
    {. k7 ?9 C+ }0 }& Q' m
        /*打印全部读到的数据*/
# e: a! d3 o( r  j" v        for(i=0; i<upp_frame_size; )9 F1 |4 N/ h( N" E/ ?
        {
- q& @- \9 N) Z* @- f: U            for(j=0; j<5; j++); K4 q) o$ O" ]$ }! }& P6 n; |
            {
9 Q% D6 i* Q. B                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 p% Z# @. l- u1 P* V) B9 b
                i++;
. A( s- c* r2 |  _4 g3 {                //if(i >= 4096)- c2 p3 ]' Y# }) x- f' Q- F. e* }
                //    break;
& K2 d8 v  T. t$ }- T: [; n% K" Y1 |7 A# p
            }
) @6 q) O+ D/ {: y8 S( u            UARTPuts("\n",-2);
0 C' Z$ I/ w2 f: U/ m  O# X+ f        }- j5 b  ?& G- ^
    }/ Y1 N7 D. W5 |3 R% }& z3 w+ b  ?
1 d; j; s4 [* F9 a
}

+ ?% ]/ v6 N9 C7 x2 a  y4 H

) f; g5 d# t- S% V4 }* {8 B: N3 p# a7 E$ L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 v/ {+ A- [: T! ]

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( J, x9 u7 _1 e- a





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