嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- Y/ p) u8 g% j- o1 m8 F
Void UPP_TASK(Void)- q8 I. S, g0 y$ f- K
{9 v; R' o5 t( v3 u3 }: W
* x9 p+ e2 s' X/ X. b, d8 [2 [
    int i,j,k,target_int_count=2;
) l+ n0 N9 @0 ~& J. I1 t. ]  m    char ch[2];; t- d! b4 u! p: b6 T; N: i% u9 {

) m7 l- m( t" E; |% b1 j% M) q* s# o7 G+ o. U  ?

6 h0 e3 h3 {' ?- A; b    upp_interrupt_count  = 0;
+ v' z, H/ J* y) x& V    upp_error_count = 0;; c. x$ P# S- l" X. [+ T7 C' d
  {7 K1 l' n/ q5 Z
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 d% S* }8 `/ o2 e& t& U( F    // Initialize data buffers
7 X  \# \) W7 `1 t5 b% h    for (i = 0; i < upp_frame_size; i++)
9 w1 U+ P/ J( t4 G" Q    {3 z/ H: s2 h0 Y" w! h( e; g
       upp_buffer_b =i;% e0 Q% C9 _- d
       upp_buffer_a = 0xDEAD;
" T+ U! C  U  O  C) G0 D4 `( ]; o    }! v. ]" N6 D3 \* R" A# \' N. l

4 F6 P% F: e1 i) I    //for(i=0;i<1024;i++)4 x3 n7 f/ W6 ?3 g. i1 y/ r* Y
    //    temp=0;
% l* V! S2 q/ m$ L, C6 j$ N. @( a  ?# _7 {% S4 V2 G, n
    //UPPReset();
& k' ?8 q, Y. D    /*启动UPP DMA传输*/
) U) ~; @; i7 H% _' ~    UARTPuts("upp_prog_dma_i\n",-2);
- S5 q' d) ~; L8 F. _7 u    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 {5 E6 O& |8 ?- P
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 Z6 Q7 r5 Z% F$ h: J" V  [+ u/ N
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 ~) Z+ ~+ E5 F8 G- x7 k5 K, e
3 h0 {8 t1 F( A7 p$ d6 G7 B7 O; \    UARTPuts("upp_prog_dma_i\n",-2);3 R( y) P7 I! j3 g9 B+ X  @* @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# k1 G0 G6 q. s% \* J( g
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  e, q  M. G& j5 O" g9 u& k+ m
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: A$ m+ w  c4 }) ~& B

3 P# p6 v  t# N8 O2 A$ h    /*等待UPP传输完毕*/) ]) U8 t9 C& }6 S. s
    //i=0;8 I% {) L, w" n1 g" \0 r- k
    //j=0;
1 r# W- q5 X! x5 x    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 @) C6 P; H$ \8 i    {: Z' W' T( r' j# C/ ^( @, K
        /*  测试UPP传输的同时操作普通DDR数据8 q" ^( x, |* B, m  f' @0 F5 G
        temp=i;
1 {/ Y+ S, n, j+ |% }9 D4 {. L% b        i++;. Y" x7 v+ o' R0 ~2 U1 f
        if(i==1024)
! b7 L/ n5 j7 ]6 X2 a/ r) p        {( E* i1 h1 y) R. p2 ^5 X
            i=0;
3 o6 C0 f) q, |& R" z$ u  ^4 J            j++;. c$ T% E4 C5 ~- B
        }
- I, X) J" q# J% J6 p- j        *// }2 J. O3 y- F" O8 o; @. i/ U8 _
" b/ _9 P4 z8 ?8 x" W
       asm(" nop");% `2 ~! {* T; Y4 v. ]3 t

0 {5 S3 x: X( S' N' d       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  N4 E1 X. ^8 B( M& h1 F    }4 P! n( }) O0 b$ N# z
: x% N- A( H: M
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
, m5 H; c4 n1 ]9 z9 [8 U+ q    //UARTprintf( "i=%d\n",i);9 d+ R3 ~$ ^' @9 I! J$ Q# C( R
    //UARTprintf( "j=%d\n",j);  I! L( i1 y; a0 A# J. Y3 O' K
    UARTPuts("Data mismatch in buffers.\n",-2);
0 H) p/ G5 p: q6 J! u; U    if (upp_interrupt_count == 2 && upp_error_count == 0)
+ |1 j3 F7 s/ k6 v) w7 q" |    {0 X" _1 h) V1 s+ v- x3 _  f
        for (i = 0; i<upp_frame_size; i++)
0 W2 l. L- ~: j        {. G! ]' t( W* ?5 u3 [* }9 i, x
            if (upp_buffer_a != upp_buffer_b)
9 h# R2 q( p) E- D            {
. d# L% _' ?2 f, C* ^2 l  l                upp_error_count++;
8 `& j/ }/ Q9 [. t8 W            }( F8 w# k0 |" z: v* H$ j
        }
5 m4 S9 g; F6 n& W) V    }' N* t6 B8 |% H4 y
* x' ?& t' o# V+ ^; f6 u
    /* 报告通信结果*/
- a, L5 r& s% ^; Z6 d9 n    if(upp_error_count != 0). y. G. x! ^3 l% `$ E% j) h
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
- d; S( I  o* K    else) @% c! h& V) F5 j% ]) a
        UARTPuts("uPP transfers complete!\n",-2);
/ Z( h: r9 o8 }2 S6 Z7 a3 B, j2 V! s/ p$ L% O
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);1 e+ |$ Z2 K7 r& v! ]9 m3 o" P
    UARTGets(ch,2);
! X5 y8 D% k' k2 D; m2 p. I* L    UARTPuts("\n", -2);! I  T& y  m9 Y, t& v' ~
  Z0 S  c6 U4 d1 I$ F5 T, Z
    if(ch[0] == 'y')
+ d: i+ H# B3 A% x1 r6 O    {& [2 x1 h0 f7 q+ S& q5 G0 v
        /*打印全部读到的数据*/
& U3 ~* P0 a/ R* s6 |        for(i=0; i<upp_frame_size; )6 D" W* n; i) D3 L: K
        {
- Q: T6 _: t3 N9 I7 j            for(j=0; j<5; j++)
* z7 a8 z3 V* I6 N! b            {
6 \8 f: e; T9 x                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);; T% S6 p& F' a. F* j7 i
                i++;; ^$ A; C# x% m7 q/ U
                //if(i >= 4096)
# @% c, }) B$ `9 ^                //    break;
, P2 p, c5 x' c, Z6 ]( t2 u
6 }, a) _" Z( o            }, q6 F) [: ?# G; \! Y7 ]1 n. K
            UARTPuts("\n",-2);
* V, u3 \0 s) u0 }, g        }/ g' S9 |3 G( d! T, {3 {
    }& K' J( F) {& H

, w2 R, V! k+ a( |6 y& z}
: E/ _7 X0 t5 U6 l5 v, V
' m3 q# f1 {. \5 L; l" H4 _1 }
/ J/ Z& Q! l. c. f! Q

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- o) l3 F0 _; \! \, y
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 S# H# o9 E1 X# f7 z! o6 e




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