嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ Z8 V' P, @' Z+ ?0 Q1 y$ J
Void UPP_TASK(Void)7 r) a5 q$ ?% E
{* e3 P% [. V% W1 D( t# N  J4 v

  w! U- j; j" e* o1 k1 l! q; o    int i,j,k,target_int_count=2;: ?/ S9 m! M( F' @, n) T2 H+ E
    char ch[2];0 F" A; Z# i# ^

: z3 n6 S) O/ U8 J# X: a6 _9 i+ k2 ^3 s  r1 T
2 e8 m' T0 Y! K, ?
    upp_interrupt_count  = 0;
/ t6 H9 {4 |5 [& Z6 M  b    upp_error_count = 0;
; {3 C5 ~7 w) y7 \8 q4 [) ~" s$ S# m0 B  o* ]2 J0 O% D# ^; H
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
% o( ~. @( Y1 t' r    // Initialize data buffers
" Y" `/ N/ a0 i2 X$ u9 v8 {# H8 b7 D    for (i = 0; i < upp_frame_size; i++)
. u4 B1 b& ~0 G    {
6 S3 M& H9 O6 v' c$ ?       upp_buffer_b =i;
- K- X% e- b* O( U6 q, i/ ?6 ^       upp_buffer_a = 0xDEAD;
1 Y. z6 w, {; @+ y2 C: j/ n# ]" N, h6 n    }
' q0 ~, I/ P9 a+ f3 r6 O' o, s- I4 d, T- B$ X$ F: \
    //for(i=0;i<1024;i++); u3 j; Y) w6 O( G# I
    //    temp=0;
' K& y3 W) U& j! p* |3 U; z' F
5 a, m3 A+ Z; h% t3 ^) n% c    //UPPReset();
' ?7 N7 @. V9 o7 V! V9 U    /*启动UPP DMA传输*/6 z; }( @4 [+ v4 D3 S( D( M3 c
    UARTPuts("upp_prog_dma_i\n",-2);
9 Z" o2 G( _  p) c, s& \    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 g  P* V, A" X7 C" g1 A+ x: L
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" z) m. x* B) L# U9 K7 j) L    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);! a- u, H0 J+ K* F. g  `* \
0 o2 y4 y0 Z* |; u& W( c/ }
    UARTPuts("upp_prog_dma_i\n",-2);
$ T' L) h! W* R, {9 P& O    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& Z8 H1 H1 E3 b3 l8 Y" T    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: X' C# v( c1 E8 f  d    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 D! U" E" m9 N# A' E$ _% s1 d
2 D0 }8 Z6 E5 C$ n- r    /*等待UPP传输完毕*/* S6 n1 U( `5 c; }
    //i=0;# V+ U0 F. }- Z/ t
    //j=0;
; l5 {$ `1 A6 B9 T" U0 A    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' O# c' {3 c, ?- `    {/ S! C' F. |* H& G3 A3 f5 A
        /*  测试UPP传输的同时操作普通DDR数据/ v+ S" B. a2 r
        temp=i;
; b: v6 K! n6 X7 z* L. T        i++;
  A. a$ _1 j. B6 T1 Y$ L        if(i==1024)
0 M0 H2 l; J/ U. g        {2 i, x/ h+ I. h) o8 N4 L
            i=0;
3 N5 L$ U# q. {! t9 P            j++;+ \0 ^/ N  B" X. y' A
        }7 b0 p6 ~; i- \
        */3 }" w$ d1 ^2 E  Q* h) `

6 B) ^) Y; h; R1 F6 d( y       asm(" nop");/ f3 D, W3 H+ L0 i' x

9 L" N# j8 v3 s- v3 h& b; f' ?& e3 e, w       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 c+ z; @8 G. V: h  m+ l4 k    }4 p% q  A0 a% j8 ?! Q7 J

! \, V& z0 f2 F- P$ Q    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# k" t$ ?7 v; ]4 K% P8 x2 ~    //UARTprintf( "i=%d\n",i);
) s  n% e( m& x# l    //UARTprintf( "j=%d\n",j);
# N" I: O3 [9 [( e    UARTPuts("Data mismatch in buffers.\n",-2);
; d( e7 ^  _& S- O+ s" g    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 \/ ~8 _! c# ^$ Q) `$ c' L    {0 H3 y2 |% i: G6 W  }& s
        for (i = 0; i<upp_frame_size; i++), R3 ?# s4 f) j* Q+ y
        {. X9 w& J* K6 m- F
            if (upp_buffer_a != upp_buffer_b)0 b3 x$ Q+ j6 O# ]- \3 ?
            {
7 U( a& v' h2 G( z$ V                upp_error_count++;9 Z, Z  V" f# s; }* N5 N' |* _
            }' w" s1 d9 }8 y
        }
7 y6 y. h4 U( h) i3 L  D    }
3 `: C1 R+ h2 v/ Q2 R9 _' y# @0 ~- r
    /* 报告通信结果*/6 ?. M- Z3 J1 H4 `
    if(upp_error_count != 0), ^3 C8 Y4 M7 s9 W
        UARTprintf( "upp_error_count=%d\n",upp_error_count);7 w  F2 R- k+ [$ X
    else
; V, `' P* R0 }! {        UARTPuts("uPP transfers complete!\n",-2);
- K4 X" Y5 q/ q! @! A3 j7 G, x: Q& p0 E( s
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) B$ c" t7 w* Q! o    UARTGets(ch,2);! Q& n8 P: y4 W1 l4 j
    UARTPuts("\n", -2);
. ]0 ^4 z7 i# i) j2 |: ~% g* d9 o2 c4 l( H4 {
    if(ch[0] == 'y')
4 I7 w: F) H9 N    {
9 A- W3 X, P; j0 z        /*打印全部读到的数据*/
, d+ P0 h$ {2 A/ k) L        for(i=0; i<upp_frame_size; )( l* p  W5 ]1 u' I, {: ~
        {3 f  h, e3 W* G, U7 |! P
            for(j=0; j<5; j++)
& F1 o- `/ R: k% {1 Z1 i0 M            {
* h% d& p: w! G# a                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% ?0 |5 _5 `5 `3 j7 O" N! P7 ^$ J
                i++;
: W& y5 v3 I% h9 l4 W                //if(i >= 4096)/ w9 v2 S! I) m# N
                //    break;
( q3 `2 s( X6 [- F& F
$ A- i2 B! p# ~            }
/ d' g5 x3 M9 y2 L) b3 z            UARTPuts("\n",-2);
. R# ~$ \: p% E; S& ?        }5 |8 e& o' Z0 r
    }3 ~# ^* e% j1 s" Y7 g

; u3 w0 i; N+ C}

$ H' S& W9 M0 H) E0 A* s
3 q0 V8 m; N5 k+ g" h

. Y/ W0 \  N2 N8 ]0 q1 n
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) [# [6 c' P( O. T, F% t! {
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 U9 `$ n) ~! C




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