嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' r% w) [9 m& A- c) E# ^3 ~
Void UPP_TASK(Void)+ t* f" A* V. O' }& r0 W
{2 N' c' K$ R. E$ s
3 F. z- _1 N7 D2 {0 A, ]. q0 c
    int i,j,k,target_int_count=2;4 d' }# p, n( p9 {3 u& s0 q3 Y% y0 d
    char ch[2];
- ^3 N3 ?- |% v; W
3 N% b; d; W( N7 y0 }' v( i) z
5 v* L6 C* H7 m) e/ [6 W  o# g& Q# ^: M
    upp_interrupt_count  = 0;
+ s4 ?& S3 V. ~" K    upp_error_count = 0;, h; W% M  c* e9 @5 U
: d. P) w1 D- E; [' S4 u4 V* s) Z
    UARTPuts("\tResetting uPP buffers...\r\n",-2);# t$ f7 y8 C6 Z. G7 u4 ]  m; y  i+ B2 U
    // Initialize data buffers
$ J. y: ~% e: |( c    for (i = 0; i < upp_frame_size; i++)! `; X# U9 r( n- P6 j
    {) B$ G9 C2 t) A9 d# I6 T& B0 k! j
       upp_buffer_b =i;2 l- K* `" ]" o# C# o* Z  M3 r: u
       upp_buffer_a = 0xDEAD;: O3 f) s2 E7 }! }* g( f. x3 g
    }
& j, ~5 h; U3 Q3 K" w/ L) d; _: V0 p7 L6 C- _
    //for(i=0;i<1024;i++)7 Q: O  _" s+ \$ a7 _- P
    //    temp=0;
. s# q: D4 ]6 z4 t
. w0 R# D3 r, z( ^3 f9 R    //UPPReset();: w1 U( m9 A' u
    /*启动UPP DMA传输*/! t" `& `* U1 x! ?! r
    UARTPuts("upp_prog_dma_i\n",-2);9 Y' E  _$ a, `4 E) Y: c
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
  P) G7 u8 z0 q4 @. {, w    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! O4 h# e2 N6 n2 A3 J( V- a7 s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);* {$ G) ^; r+ I3 A: h
+ e9 Z  Q; ~; ?  w
    UARTPuts("upp_prog_dma_i\n",-2);
. e$ Z6 h& G1 N1 Q  u- t    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% Z1 }& M$ R8 c; `9 m+ ~
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! V& p) \( [! t3 t. N+ T
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);' }. G  n+ O# n9 D; }3 Y

  {! l$ I1 ^4 R7 C! u$ k    /*等待UPP传输完毕*/  ?2 B4 |8 N/ G" E) I+ a- Q
    //i=0;* p8 y( Z1 I) ~% g1 q& t3 O' f' [# K
    //j=0;# g$ O( v( f% d+ c+ d6 G
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' h6 _. I3 }. H0 j
    {
' z% W# i& Q4 f9 R        /*  测试UPP传输的同时操作普通DDR数据4 U. v! e2 V( `
        temp=i;. E# O) c' L, ^5 w$ c+ X+ C
        i++;7 |! Z: @: k* z3 Z; n4 p
        if(i==1024)3 _5 h& |/ a' b9 O% k& p2 i
        {
( e# Y# U3 ^, ]+ ^5 D& X6 h- N6 X1 J            i=0;6 B1 X/ N% c2 \
            j++;/ U4 u2 s6 U9 P/ f. n, P$ m" u
        }% S1 O: I. |* w& Q
        */0 Z$ c4 x- a7 B
. F4 N( |4 I* n& j; a8 J/ I  I' V% M
       asm(" nop");
& J, g& ~+ N- R5 ]' n! B/ T7 ~( i/ j1 [. x3 s, j
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" e4 e& @' Z) m
    }0 B! w& S% Z2 e! c: F# r' ~" n

. Y6 p2 h* x% k    /*检查UPP传输的数据是否正确 (loopback modes only)*/: }2 v( e- _/ \8 `3 K
    //UARTprintf( "i=%d\n",i);6 x! Y9 Y9 t2 i
    //UARTprintf( "j=%d\n",j);* ^$ y: O! i& [: z/ X# Q
    UARTPuts("Data mismatch in buffers.\n",-2);( f/ o% a8 m1 @; R3 B
    if (upp_interrupt_count == 2 && upp_error_count == 0)6 o2 h  X+ ]9 J# q
    {
( z; |/ Q  U/ [* q& I        for (i = 0; i<upp_frame_size; i++)
) c2 ?- C8 ]7 g4 i3 O        {' h1 x- r! k  N& V* `
            if (upp_buffer_a != upp_buffer_b)4 ?, a- Q" W9 ]7 \, C
            {
4 e* ^1 R$ n2 Z                upp_error_count++;# F3 N) \% e0 s8 \% ~) m7 I( K
            }
  t; T6 {) U0 h6 A: \% Z        }; b; P8 S( S' ~! N' V# w3 v, @7 t; g
    }
# z) \/ U6 x6 V3 A
6 Y6 [. p3 ]% V2 a' ?& f/ ]    /* 报告通信结果*/
2 u" e! _$ n( z    if(upp_error_count != 0)
: z7 L, D  p8 H% d; D        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* p! x4 P1 |6 b7 e    else  e; x5 ]& _; ]4 g, |1 m* y
        UARTPuts("uPP transfers complete!\n",-2);+ ]  n& y& y( \/ K9 r+ o- O
+ \( v/ p. c; U  x
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. v8 T# T6 y. p$ }3 k' M* q1 d
    UARTGets(ch,2);
3 i9 y# p0 q5 L! m6 h+ J7 G    UARTPuts("\n", -2);
) N2 U; s3 Q1 o4 n  Q; M+ `. C* Y
    if(ch[0] == 'y')2 c! m$ P5 g1 P2 M; y8 c0 r
    {
0 e7 p+ b. |& s/ @/ l. C        /*打印全部读到的数据*/
$ E! D, v% f$ _+ g" {4 v        for(i=0; i<upp_frame_size; )
( A  o! `; R2 O+ M        {6 o2 I4 Y" P' y) c) l! k
            for(j=0; j<5; j++)+ S1 [; t! C6 B! ^7 F: p. T% o" i2 N
            {
6 V; G9 X; }  O4 z                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 i6 U3 h1 A4 E- {
                i++;/ P- B% d6 o! i9 @- E! E
                //if(i >= 4096)& J; [0 V. ^. m. V2 z5 ]7 U- H
                //    break;; u( G, [; R$ S
, p! d( W8 |% h2 ?  p
            }
- q& ]7 D! Q; M/ Q2 Z            UARTPuts("\n",-2);
9 n! u; J' {2 }        }5 w6 M. F5 N8 z
    }
2 w7 J3 y  e4 H4 S4 K8 ]/ O8 `: H- o  L3 z
}

5 O; _8 }+ W5 H( f' l

& b* S; B) z. I4 x% I3 @# r) d6 l' ]$ u% |) B) r

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 N! \) B1 j  l. y
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  N5 w3 u; x5 V& ?4 h. b




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