嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: ?* x! J, r5 i( {( ~' m$ D8 Z
Void UPP_TASK(Void)
& l2 g8 V" v2 E1 Z; r& S5 N, m{
1 l# y8 @7 `; i" N3 B% a2 ~* t" @8 Z4 h8 \+ x' y
    int i,j,k,target_int_count=2;7 c7 D" y4 B9 g$ K; E
    char ch[2];
- d, q+ K; W% d) {& E1 y
$ J2 C6 T( e; \7 w
7 z% p9 ]( S2 k$ t/ Y. p( x4 }  ~( ^# m, P
    upp_interrupt_count  = 0;
1 D: B! @5 O5 x9 P6 H- r" X: u    upp_error_count = 0;
) y* T" x/ i2 `% {7 g8 ]; D
7 A$ z6 X+ T1 ^$ A    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 P# H3 J6 q7 c- H
    // Initialize data buffers
/ w3 e: k# d+ Q2 P$ @    for (i = 0; i < upp_frame_size; i++)- L0 }3 C% I+ {: b' J) O7 ]) ~  Q. H( [
    {% o. M, f- \( S4 s* H
       upp_buffer_b =i;
7 R# g; U) X2 z6 O       upp_buffer_a = 0xDEAD;
, q+ p$ s8 f8 }- T9 E% A; ?/ L1 _    }
* }  {8 E5 ~1 o" K( I8 ]  ~
: T; s% m- @/ T" b  J# t) y) u. R    //for(i=0;i<1024;i++)
# Z6 A1 Q/ D9 }$ }5 X% p7 I" w7 R% r    //    temp=0;
; r4 A* b/ i1 t$ ^* w6 c
: W- z  f2 A2 U* E" B) P, p    //UPPReset();
& ~* n% Y7 d% H7 f% a$ s    /*启动UPP DMA传输*/8 b6 G% L& _, i0 R7 A, d& o5 S
    UARTPuts("upp_prog_dma_i\n",-2);7 X% @# R3 }1 Y# W2 N& n+ A+ o
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 h/ d4 y  E, o* f4 d  }7 L* r) \
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 U% q: z; N; E! ]6 p* h  ?$ O. p* ?
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( |7 n1 S$ j3 U( F7 V
: k$ _5 B! Z- a  A# T    UARTPuts("upp_prog_dma_i\n",-2);
, s! ]5 }$ m' ], G9 C/ c    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;( q3 l3 `& p! e; D! N
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 W( w4 C9 |5 @; t+ L- b! l
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 q0 t; K$ K4 R; ?% D; A" o
1 t  l7 q5 v9 ^* D' w/ W0 `
    /*等待UPP传输完毕*/
7 Q# A" u+ q' p8 n' ]% a    //i=0;
3 @/ x& W1 o1 R1 h% ?9 I$ {    //j=0;
; a" j% {8 C4 G6 F% I7 t- y, c    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 y2 Q$ h5 x9 b( U) G& |6 g    {$ b* P: h3 R3 g7 a* g
        /*  测试UPP传输的同时操作普通DDR数据
, y, H6 }6 `  w# D" l6 W        temp=i;6 Z" j- t9 F- K/ z9 d# u
        i++;  m+ j6 {' v- b8 f
        if(i==1024)
3 v8 k* W2 \' ?; e% y        {1 ^: h$ ?/ |- s4 ?) E
            i=0;
# F, E, Q. J( C$ K            j++;
# U; J; B+ X$ f1 I% g* p" ?( e        }: R) Y! z' a% _) S  k
        */! X* o) f" H; `$ r
7 F% K' H, I* Q+ t
       asm(" nop");# x( ~% c' n! a1 c
# R  y# L8 w" @! h$ _( {+ C
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);  o' i3 J' V( h8 V$ j3 c# r
    }
$ ?' R# l" F+ i
# a, l3 R3 J3 \- F0 u9 m$ i, s    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  T0 f: N) w, u! M& d- m" S    //UARTprintf( "i=%d\n",i);9 L  \8 u9 ?8 A/ |- h! G
    //UARTprintf( "j=%d\n",j);
& a# L0 _' Q' k) p    UARTPuts("Data mismatch in buffers.\n",-2);
; A4 A& ^% o! D1 w. w    if (upp_interrupt_count == 2 && upp_error_count == 0)' H6 T7 P/ D2 ^& l7 Y
    {0 Z. j1 v. R, [3 |
        for (i = 0; i<upp_frame_size; i++)
0 _$ `: C8 \9 [2 i8 H5 S2 r        {* N3 ~5 @& o" e" X- ^/ ?. p
            if (upp_buffer_a != upp_buffer_b)
6 _8 K, N6 S" |9 O# b            {- ~& O; H# b$ l7 E: H' a
                upp_error_count++;, Q$ J5 r7 V$ x6 l5 z
            }
) `2 U8 u! V9 F( s$ v        }- M, r8 S; r8 I  J
    }
' E4 ^$ Z" E4 M+ t6 n1 x0 w+ G2 A- r4 J0 t" J
    /* 报告通信结果*/
7 G; }' p0 m* Y5 s$ C8 K    if(upp_error_count != 0)
; m. J1 O4 F7 l' n        UARTprintf( "upp_error_count=%d\n",upp_error_count);: o# g* f- r; v; ^5 Y, N9 i1 c
    else  O: f. ^  p, K. Q- A
        UARTPuts("uPP transfers complete!\n",-2);- W6 z4 B' C: @
! d- ^: Y, B% x+ q% |. Q5 O8 V
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' d( h2 D7 G  f8 K: _! j' H# i    UARTGets(ch,2);8 S! T5 Z+ w7 l
    UARTPuts("\n", -2);
) z$ M4 Q  [! O+ A4 p- T5 L3 h; o+ X( f5 `
    if(ch[0] == 'y')7 O( V! F; w3 T  p7 A# F
    {
- j$ Y1 |6 p# ~* i3 y, M        /*打印全部读到的数据*/
- d% |, O: D& G" s7 c# F        for(i=0; i<upp_frame_size; )
$ |1 ~  s4 F0 J9 y3 v- t' q9 p) e        {
: t$ M$ G( ]& f0 E* @1 Z# t            for(j=0; j<5; j++)5 _) f. Z7 T# V
            {
' G- M; k% `  X2 L4 \5 T6 v                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* U+ b$ c9 l# Z# v                i++;
0 W; _/ z2 U1 i/ i( ]3 o                //if(i >= 4096)# \7 a, [0 ~  B( O
                //    break;+ R0 t" y0 u: h

3 s4 f5 X; [! G" V            }) L5 G: B8 |$ S: _* f$ A! Z
            UARTPuts("\n",-2);
: M/ O7 O# z* K2 ^        }8 j' A. S- |4 M  J$ D' D$ z9 Q
    }
. c1 |  L# |( u, u4 X7 r* O) C3 T, r- v. f7 b& ^
}
% R  \1 a% {, z. \2 E9 v

4 P5 o; f* E3 N7 [) K6 _8 x/ J4 _* m7 c" m6 n2 s3 w# b8 b# k

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" a6 [" l( ~$ e& g8 y+ r+ T& t
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( e$ d1 ]+ Q$ @, ?4 S- L




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