嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 I' S: N4 m4 b" e3 }, N, g0 [
Void UPP_TASK(Void)
1 u/ s9 v, R* M4 J0 c) J' m) `{
, H$ M- S+ h, R% r0 ?$ U5 V1 H' p8 J$ Z: H; x: @. L' X6 `/ @
    int i,j,k,target_int_count=2;
3 ]! S7 ]2 L4 i' {8 I4 Z    char ch[2];) p" l4 x1 o8 o

3 p1 l* [4 s2 X7 E4 o2 w* z7 O( {# P: }8 Z6 g& ^
# ^8 }1 O; V- z
    upp_interrupt_count  = 0;
$ O$ S; v7 l8 m! o# l7 U    upp_error_count = 0;
: }% N# `9 \5 K' E+ R' y+ r2 `9 n- a3 r
    UARTPuts("\tResetting uPP buffers...\r\n",-2);5 n# U2 M, I" _. i' B, T( k
    // Initialize data buffers7 G- K2 |9 |. a" J" ~9 Q
    for (i = 0; i < upp_frame_size; i++)
: N* p4 x; u2 t1 j, L    {
/ v3 j0 l& _& ~* s' W       upp_buffer_b =i;
. {2 B9 E- r  K0 N- a       upp_buffer_a = 0xDEAD;0 m$ z0 [+ k* l5 l& R
    }
; c9 M' [6 p  d# A9 k7 O0 T' P% K9 B; z! t2 a
    //for(i=0;i<1024;i++)) _1 q9 W& |5 L6 s+ n4 ?5 D
    //    temp=0;. r! e9 h1 _  h* S

) ]; |1 e) y& V% J    //UPPReset();4 R7 u; U  N" U/ h5 v
    /*启动UPP DMA传输*/8 s8 G1 O4 _( k
    UARTPuts("upp_prog_dma_i\n",-2);6 Y4 v) r9 K' @3 p7 n' }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& h! z2 V, c4 `$ }! C
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 o8 y* ~$ P% D* Y  j
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; ^2 {0 P& c. {4 |

) q6 y# j7 n7 R9 W9 S' ^, j    UARTPuts("upp_prog_dma_i\n",-2);$ {# p+ C5 H. H8 B" t" ^" D5 x0 |
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" m- @4 ?. N  O7 T. R    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( O: q3 p5 O9 h9 o5 m# j* Q0 t( r
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);& v9 n: T4 ?! g4 r; |

8 b, C% E9 C$ o( V) n    /*等待UPP传输完毕*/+ w$ Q, l) W4 `
    //i=0;
7 Y# k, s, O  x5 o( F    //j=0;
" u4 |! S0 ?0 S/ S* j7 g7 x2 l) N    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% }# t9 t- n& w    {
  J" z" T, h; A9 P        /*  测试UPP传输的同时操作普通DDR数据
/ l8 k- X7 ^3 ~2 u, `$ F& G4 {        temp=i;$ E; W6 K3 k, Y% v
        i++;* A; n1 {% W5 b
        if(i==1024)
! W2 Q3 d3 V0 a( l' L        {# Y$ W; C% U% W
            i=0;' `% W( L5 z( T
            j++;
+ @' x: Y" B( C. O" F        }- e6 e9 x4 d- z9 H+ Z( u
        */
% g! l; J! V1 G  D$ g( Y' ]& {& Y% G
& @6 s' Q5 [0 N9 f8 ]       asm(" nop");& m+ e8 B8 t% I

$ Z  D/ S. Z( {$ v0 u( R       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 o. Y, q* y$ `& @& e/ b    }
' [; A1 \; a/ k- V9 ~% i2 `6 z8 x$ m9 ]- w/ v: s
    /*检查UPP传输的数据是否正确 (loopback modes only)*/: t! |2 F0 H" T- i4 S; f
    //UARTprintf( "i=%d\n",i);) M% f3 Q2 N* A0 g7 w  C
    //UARTprintf( "j=%d\n",j);
* U6 O2 Z( r- N1 u8 ^    UARTPuts("Data mismatch in buffers.\n",-2);& p7 U% u0 Q( V4 {6 |* ]
    if (upp_interrupt_count == 2 && upp_error_count == 0)
. d& e& I5 s. w. R- p# V    {. L; ~, F7 |8 K9 ?4 X
        for (i = 0; i<upp_frame_size; i++)4 M( \8 m& M4 D8 ~; F
        {' ]& O( {5 f4 f9 Z' X# |# {% \
            if (upp_buffer_a != upp_buffer_b)
" k% |$ v7 z+ E/ q" g            {
% d! w! j3 k8 S5 q9 R7 T9 ?" L* s! H                upp_error_count++;
( s+ C# b1 g5 T2 E. A/ B+ `            }
: S* D8 z" Z4 C6 @2 m3 _        }4 A1 @1 B7 d# j3 I% E$ H6 V2 W0 h
    }
) T! B' Z2 ]* j
" B6 B4 D3 G6 `& R    /* 报告通信结果*/( C( C3 A) P( C/ V; @% B
    if(upp_error_count != 0)" k2 B9 q" P% `5 }: i
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; g% \# L3 O+ J- y    else
" O- A  }) a& O* i- X        UARTPuts("uPP transfers complete!\n",-2);
+ q; L, N) s* ]! d( d) S
7 ]+ W7 O7 F3 @! M. p( c' c    UARTPuts("Do you want to print all the data?(y/n)   ",-2);( t! B6 P7 ]! `8 [( t- t; z+ X
    UARTGets(ch,2);" [% R. K6 j! p% O
    UARTPuts("\n", -2);
$ z+ S* [7 H1 i  Z+ ?: v- ^  S( h* \) t$ s8 F0 x
    if(ch[0] == 'y')
# o, O( i+ z# t0 l- j0 h    {3 Q/ O# N* i8 O) j4 {
        /*打印全部读到的数据*/
  @/ q$ g; A: W" ]# H; l        for(i=0; i<upp_frame_size; )2 e+ {; C; `( C5 A" C% b
        {5 f4 Y8 r& u6 I5 T  N+ A
            for(j=0; j<5; j++)
( ~; [  \/ C2 _9 Q6 b, o& Z            {9 a! z) V: _+ ]& n8 S6 q  j
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 h0 L) U4 t' ^+ J
                i++;/ m- W! w0 K, [; I8 B. v& D
                //if(i >= 4096)* a' a1 C5 k. u3 Q
                //    break;
; @5 O3 s8 l" T
9 h  E- ?5 S; @4 S, [1 k8 R            }
7 E' {' s8 S+ ?' f0 h9 q. J' c            UARTPuts("\n",-2);
, l6 s  ^# ~! u4 e5 ~3 K* n        }0 @% g8 h  }0 v3 [' r
    }% g: f3 m- C9 ^% Y: W

' l( F& c% u( A- q1 G) _}
% W: a: V6 p) H, X
* t: n& E" W; ~4 j1 ^9 I# ?: M' |) N! l0 @

9 X1 H3 C' |' `7 d
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) ~' _" l+ C! d% j0 u; Z, V
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! l7 G  K- z: k" _, N1 L





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