嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 y1 i6 \+ c+ v2 E
Void UPP_TASK(Void)
" U, s; x$ o; `( m( N8 k: ~{5 y1 a3 i7 {" O) F- c: _8 S8 p) m8 j

: O4 M+ M+ K- K7 K    int i,j,k,target_int_count=2;
9 C9 Z7 {1 i: q! c, Q8 {    char ch[2];
+ ~0 r" G, x& ?/ B  a* g5 O9 c
3 Y3 O" K: T9 ?& A( ~' L) _2 G, i' G0 _& c1 l) h
  r% C# a; i& m; o3 m
    upp_interrupt_count  = 0;
& i; }( R4 N- H# L    upp_error_count = 0;& o' W; X1 z# g. q* I
6 G6 k. c6 l' c# w/ K" V, |# h
    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 C1 a% }( M. i
    // Initialize data buffers
2 }6 X6 _! g0 \1 |9 V4 }6 s6 v    for (i = 0; i < upp_frame_size; i++)
  G6 o- T! n" r    {
; [5 ^; B/ G% J' G       upp_buffer_b =i;0 X3 e# j, t0 [5 n9 C' }( j
       upp_buffer_a = 0xDEAD;
1 g0 \" E: T# W% ]) t    }+ G0 E9 y  n- C& {+ Y" j: q

; v0 Z- }+ q( w4 k; G    //for(i=0;i<1024;i++)
$ N' N9 _! e+ y+ b/ B    //    temp=0;5 e2 p) m9 i- q2 v  `$ t
& S; B# k5 x; N& y" C) N+ W* Z. u
    //UPPReset();' ~; [6 o# g  n" _
    /*启动UPP DMA传输*/
% N2 {/ R1 e9 @+ I2 R! g* _+ P, H) r    UARTPuts("upp_prog_dma_i\n",-2);( u1 Z& X7 s! Q# p6 P& u% u
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;2 e" Z# B  Y* v( b* S' H
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 f2 O5 A" G8 E# Y    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 i. a  h* d& f

) T% _5 O: ~) {9 g( S! B7 G' ?! s    UARTPuts("upp_prog_dma_i\n",-2);' w! T" P  A% T2 X
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* s8 f0 u2 J! t6 S: p1 t1 g    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) b* A8 V4 P* s) S
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ _+ a' N* }' i- z
' k  A0 D7 o3 Q7 v) L. l    /*等待UPP传输完毕*/7 I) F* @# W+ f$ x! [
    //i=0;7 a: i, Y$ @' E0 k, v% l
    //j=0;$ A* L2 \+ n" h1 C/ F
    while (upp_interrupt_count < target_int_count && upp_error_count == 0). P3 j. r' X# z2 v4 M# N# Z
    {
: N8 `9 M# [5 {0 U5 H3 _        /*  测试UPP传输的同时操作普通DDR数据
1 L3 [; K! w! }) t" `        temp=i;& @, }( I0 r  r8 z8 V4 V0 K" W
        i++;
8 y0 F4 n, ~  h" v! U) d  _        if(i==1024)1 \1 G' U1 R8 D8 t( E7 y1 l
        {
9 ?- K$ a( ?& G/ S; i3 z% L$ e% w            i=0;
5 ~( d6 U! g7 ?! B            j++;( y  {, Z8 W/ f2 Y( L4 z+ C
        }
* ?* d0 E3 z% H& \5 @- p& x& N7 N% v" A        */% k* x8 d0 W6 G

6 J3 q. \8 J, \% Z7 G       asm(" nop");( d9 Z2 @4 [4 r: w) U% u* Q

+ O& |! a# g% e/ Y' b% R, W/ U       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% C  L+ L7 d3 M6 W! m% X5 |    }
8 d" v* o3 W* t# [2 U2 z9 J/ u( Z; I+ |# X, n
    /*检查UPP传输的数据是否正确 (loopback modes only)*/, I: t. R; g  y+ ]* ]) m
    //UARTprintf( "i=%d\n",i);
& o4 m' N7 c8 _    //UARTprintf( "j=%d\n",j);9 |2 u7 U7 z/ k* V! k% A
    UARTPuts("Data mismatch in buffers.\n",-2);  T2 q* F7 D! u: ^
    if (upp_interrupt_count == 2 && upp_error_count == 0)* V* n, f0 \5 |
    {: p& S+ W8 Y8 _7 g8 w9 f2 q# A
        for (i = 0; i<upp_frame_size; i++)) \1 j9 \- s# H, V# U9 |
        {
! g3 N, t5 l- c; _2 G            if (upp_buffer_a != upp_buffer_b)
: c9 Q2 }) e( x7 R6 A; V            {/ @; \  A% S6 B0 V9 u; e
                upp_error_count++;
. H, ?1 R$ B! b8 d* t4 l            }
  t  q3 s" T0 Z* F; P. R6 I        }0 V6 U; T. s4 J! O
    }
; A3 S8 S9 S" s2 t
8 q; Y/ a7 y2 t+ v: b  ]9 N; A    /* 报告通信结果*/* D# m  l9 q# v7 M$ B! C- @6 w5 F
    if(upp_error_count != 0)' n% D5 W1 a; E& e) |# H1 z& v& ?
        UARTprintf( "upp_error_count=%d\n",upp_error_count);' T& H! y! g% u
    else
' c/ B0 E: u$ F6 [# [6 i9 Q8 t        UARTPuts("uPP transfers complete!\n",-2);, P( G1 u  [* @
& l& Z, T: t: V5 H7 c# B
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ j5 p; [6 T9 \3 t8 g: ^) d    UARTGets(ch,2);
+ n' a. N0 i  K- V" |# x( _4 F+ w  B  ?    UARTPuts("\n", -2);  i+ V- w% S, |" q
# U8 n3 P8 Y5 h  m5 p3 W
    if(ch[0] == 'y')" |" i8 Z, Y0 ]8 h+ ^' Z
    {
0 I; y0 `. [" R1 N        /*打印全部读到的数据*/
" e) J5 N8 g; P; y        for(i=0; i<upp_frame_size; ). Q/ \' N5 C( z4 e
        {& E$ ^7 Q! ~4 c' V; q
            for(j=0; j<5; j++)
) H( ^  D7 P& T9 P3 z* I            {: d6 J  T- H) d. g' a% B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& W4 z; \" u9 K) E  j8 p6 u! \, g
                i++;
3 B# p' k) p( t4 Q* q2 T                //if(i >= 4096)
) q) w$ D* j- d3 w6 e% f* }" D# w                //    break;/ R. E" e) a5 y+ c0 f
) V$ B9 f/ z8 U% e. l
            }( W/ ]9 t) r* B1 V- Q  E
            UARTPuts("\n",-2);9 U( W3 L! _. n5 B4 ^. m
        }
+ E! F: G5 V( V2 }# F. R$ ^    }
' I) m* D, F, f: M% L3 w5 S! `; k4 m* h& U3 l
}

8 ~+ {: J4 n2 P& k

' }, X. S  g8 f" d. @0 L0 T
, K$ ]1 t3 R. m' @$ f" y! i
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 H1 ?: V  ?% f8 p, K+ Y9 n+ V
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' A, T- B! W" b" m' p6 m3 t




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