嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* h& C9 h& [" R0 y  z# K, P
Void UPP_TASK(Void): q) m- X8 ]: J* \: W  B
{' L! {% T  }! J
1 j+ H0 T7 [) I- N# e9 Z4 v, P
    int i,j,k,target_int_count=2;6 E+ Z' D* I1 k% c9 |! N. R! Z
    char ch[2];4 f) w3 o; {: V$ B  b+ y

$ B9 u7 N9 g7 U: W6 j! N9 R% D( U! ]- I: ~: ~% Y
1 S) h) E, C& h9 S
    upp_interrupt_count  = 0;' P3 V. O; I9 _
    upp_error_count = 0;! B  `2 g& H0 K0 P& l9 O- J7 m

! `& `1 _# N/ D: Q    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: j' `  X& K8 W    // Initialize data buffers2 A  N# Q. a) k5 `  w$ c/ k
    for (i = 0; i < upp_frame_size; i++)% G7 c9 m# a  C
    {4 X- F# G/ M; Q7 }. ^+ m6 N
       upp_buffer_b =i;+ P# P1 Q! l8 ~1 t  b# [+ C
       upp_buffer_a = 0xDEAD;, o* R3 m$ a7 H# k
    }
1 \, \. B7 P) E5 \7 A1 a- F4 c* T' d& l2 d
    //for(i=0;i<1024;i++)
4 e' ]* N! O- t0 f( B    //    temp=0;. l$ ]0 _  x; a% L( ~, X* K# i
$ }2 h9 D# s2 s$ Z1 P0 L
    //UPPReset();$ K/ a( s4 ~# l7 a
    /*启动UPP DMA传输*/, P, Z7 `  A0 U- R/ e
    UARTPuts("upp_prog_dma_i\n",-2);+ k, r1 y( s& x# Q8 O* L/ H
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 g# `: @* j3 M) y; W7 |4 v3 c    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 d9 O' ]1 c8 e# R
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 X* ~8 F1 |9 N  w$ g& f
$ A) `+ M- Z( E0 H- M
    UARTPuts("upp_prog_dma_i\n",-2);6 A0 ?" s7 u. E* ~" }  m( p0 I) ?' q
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) f* x* M2 ?2 @3 c    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 ?" \. X$ H$ F
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, b% t4 {" M! ?( Q# ^4 y; _$ e) l' W) Z# c
    /*等待UPP传输完毕*/
: t' [& I4 b- v. H6 a" o    //i=0;
$ W* {9 I  G5 T$ |# s    //j=0;& O& p) g$ C: h0 f0 [
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  P! ^) k/ }! y0 R8 X' V  u1 o
    {
( J4 V) h. N' @        /*  测试UPP传输的同时操作普通DDR数据
' T  h5 o7 G# L8 v+ i" Q2 T0 [$ C        temp=i;6 \7 D% E7 N& q) w4 W; x  _% Z
        i++;
: W/ z6 ?! a/ E3 g) _6 J+ j1 G8 j  y        if(i==1024)
: Q- e) v' u' u* z6 p        {1 g& j' q- k: d4 t% `9 L2 X9 `
            i=0;+ H& I/ O* Z6 d: e
            j++;, m4 O* f1 C1 W2 f' P% E
        }
: M# M& m7 I7 `3 d' b        */  t. O) f9 o% w+ ?
0 P$ d; Q7 g; d; ]
       asm(" nop");+ I& v2 M: }. I& M1 F2 p- _
# K& E2 A  M3 b9 X! a
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);+ N3 t3 k9 G& o  n, e
    }
! A( t  P% ^6 P' B- V
, h8 Z- F* B2 [" e    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ J! R: M0 H* ]2 j% o( D: }    //UARTprintf( "i=%d\n",i);
8 c& O4 u" h( I+ _    //UARTprintf( "j=%d\n",j);; [4 g9 O9 g1 E" |4 Z. i, B
    UARTPuts("Data mismatch in buffers.\n",-2);  U; m5 K9 N. G  O; F
    if (upp_interrupt_count == 2 && upp_error_count == 0)9 L8 Q; p/ |% |+ k  |5 V3 z+ l
    {! ^7 Z8 g3 p; w# L3 x! n% J
        for (i = 0; i<upp_frame_size; i++), ^/ ~% [$ a' O* j4 y2 u2 s
        {8 G6 B! y0 C$ W- d$ d7 \! C: v
            if (upp_buffer_a != upp_buffer_b)
, o5 j/ Q5 d3 o( U            {
1 |/ X3 v: S- a3 d, f7 F4 j                upp_error_count++;1 c7 H' p+ I9 r$ l* S
            }9 u0 v1 b' K- ~( v
        }1 x3 M, k0 q! R1 q0 n
    }
. q% b2 }, O1 p9 `6 \, u  a. x2 c) I. M/ \/ j
    /* 报告通信结果*/
! ?! i0 E  s" D2 S, _: g% J    if(upp_error_count != 0)  A% a( u1 L6 W: w$ U
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ L) D5 M' y& ~9 c* Z' n    else) ?9 g, i/ S& @3 r6 i
        UARTPuts("uPP transfers complete!\n",-2);
: U8 d% R: I- u; n4 z# d, {' B( w' K+ t" Y  l; [- p- Z/ J
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* \3 S, R: T2 V, S% }    UARTGets(ch,2);- @9 v6 s& X; J: ?$ ~
    UARTPuts("\n", -2);( y5 ?7 H8 B6 x( ]% H8 V7 S
! a$ W" y3 y, t$ z3 d; X
    if(ch[0] == 'y')( L5 X! Q6 l; e( e0 v* \
    {4 [  S( }9 G3 ]
        /*打印全部读到的数据*/
: ]' E% }7 L0 z& J        for(i=0; i<upp_frame_size; )1 U$ h1 ?- `% {4 o
        {5 t7 }) J% b3 E* X7 |  \1 T
            for(j=0; j<5; j++)/ Z) }0 R7 H2 _9 \
            {
" x# D# q1 Y5 ~/ _7 |9 }                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
8 I' x6 l* M9 I% a  }                i++;
: }- a) g) l# }6 Z- p1 a                //if(i >= 4096)
6 Q' }& `9 U! S# R                //    break;
$ ?* E4 |. h1 u2 W" X9 O3 I- q0 i' q( W4 J; {
            }: O6 h' l; `' Z
            UARTPuts("\n",-2);- G/ e0 I' h$ c+ r/ G# P# _5 Y
        }) W# ?' d: y# k7 F1 B, E& a. U
    }
; o- Y* h0 T6 ?; i
. l4 ^6 D3 \8 v" f  k}

! U8 G- K' N. `0 C
6 `. R7 k1 i" V' p
% e3 Y* T( S+ }

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- w- n/ _, G% |6 G' t. \9 o
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) y7 {! G- ^! Z- Z# A, n# A





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