嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 U0 h9 x7 j* E1 a9 e1 _
Void UPP_TASK(Void)' L. F* W( D- N/ e% a" A/ K# }. f
{$ e! c0 _/ o7 c* t" Y7 E! L

: d( `  c2 P/ J: l6 @    int i,j,k,target_int_count=2;
* P# m5 D& s( t* T    char ch[2];# B, j# A$ l3 Q" f) w4 ^6 R5 L
3 j9 L/ Y6 P! q1 M/ f2 q$ `

8 q+ n4 A) o5 \0 _( a
  Y' \# @5 z4 n5 Y) q    upp_interrupt_count  = 0;; h  G% p" A, }" `8 E/ E
    upp_error_count = 0;
6 w8 k/ _3 H8 B. e; M+ u& m) R# q0 u  T  e4 l8 d
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ Y+ ]/ n% _( c    // Initialize data buffers
/ o$ P) y" C9 e2 Q$ ~    for (i = 0; i < upp_frame_size; i++)
, F1 j* I; @6 P9 Y" h7 ?    {
) a9 k% }. A; X+ p- }  Y; H0 E; U1 U       upp_buffer_b =i;+ T* u" w/ v6 e6 A$ u0 P
       upp_buffer_a = 0xDEAD;
7 K2 J5 C9 F* i: S6 Y' @. g% A" [& h, O    }1 I! k& P* ]* A. N- ]& W

. `, u$ p$ c2 w0 Q: `) ^; L, p    //for(i=0;i<1024;i++)
$ @( d! |8 p/ |$ ?    //    temp=0;
, Q. R5 y( f0 \1 G( S8 [7 P! h6 Y, Z/ g! `
    //UPPReset();
, i) m6 N& I1 H& L3 ~; l    /*启动UPP DMA传输*/6 Q: {6 `) z4 Y6 g: Y
    UARTPuts("upp_prog_dma_i\n",-2);" F; A% }* y2 Q7 l7 {
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& f1 V, n8 Q- M3 s, w7 L
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 z4 `5 ?) K& R0 o
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);! @7 ?) r. \* p& U) r
/ Q, i4 }4 t0 ?7 A( c' z; e# l
    UARTPuts("upp_prog_dma_i\n",-2);
) S+ |0 X) H; c4 t6 I5 Q0 M: [    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ B/ n" Q! Z' L3 W- l( Z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 J( d$ E( P" w. I! K* ^    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% M7 L/ V$ l8 ]* o9 V* l6 ~8 t
6 s( ^/ ^0 i% [$ W1 K% U
    /*等待UPP传输完毕*/
! ~" T8 A6 {. z    //i=0;$ K4 M" m* W; F% a
    //j=0;
- }" p- q% \: I# h    while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 _# u) n  N8 |% p- Y
    {7 ]) A. i0 ~6 P4 Y
        /*  测试UPP传输的同时操作普通DDR数据
' N' n& I2 a+ }8 [! M. V# g8 Y        temp=i;+ {. e$ a% A" t1 C. P0 C5 s
        i++;
0 o7 H8 I8 u3 I" S2 @8 b        if(i==1024)( r( M# l# R, I5 ?; ?
        {: x/ U! k! @. K# b9 b6 r: P
            i=0;
; j9 n5 x( C' b            j++;
5 \) d( y1 V8 q' u  r+ R        }
9 }7 X8 |3 Y7 |  g" h        */
  i+ S' w3 Q5 A. p- {* R: H9 J1 ~% X4 N% O0 }: |) c4 ?
       asm(" nop");
; [& d) ]3 E6 s0 q$ z6 v! g* q, M5 E
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 F( `; p' l0 B" _# L8 L3 ?# j9 t
    }
1 q; g  T0 k8 @4 l9 d3 N5 i% K* g: `) ?$ @9 G' G5 U
    /*检查UPP传输的数据是否正确 (loopback modes only)*/- m- q7 K7 T3 a; J: v7 n. T/ z% P
    //UARTprintf( "i=%d\n",i);9 f+ s4 O3 E" X. ]6 f4 _
    //UARTprintf( "j=%d\n",j);
- E% M2 e( v! b! S+ C/ C( S    UARTPuts("Data mismatch in buffers.\n",-2);
+ q" T; ]5 f8 G) P) {8 V( ?$ \    if (upp_interrupt_count == 2 && upp_error_count == 0)% k# k# |3 T) D3 G
    {
# v: j; E* y3 g2 }" S1 N        for (i = 0; i<upp_frame_size; i++)
% v4 D* \2 Y" l5 S6 \4 w        {2 {* ?% z* j' c! _/ |% ~
            if (upp_buffer_a != upp_buffer_b)
, W3 d% ~3 h9 c            {: K  w  K* g) J& K% B8 j8 z
                upp_error_count++;
# \) g: a: b0 t; u4 j            }
& D6 j% U$ v, v) x  ~5 h        }
( v  e. {# V% O$ e; t& Q6 V* S# r    }
8 ]9 J/ s* J1 f% `  v3 b
6 J3 {2 a/ \$ B5 D5 V# i2 k    /* 报告通信结果*/
/ \' y8 |5 }; v: C+ K    if(upp_error_count != 0)- B4 V1 J0 ?2 l1 u/ d$ ?3 u
        UARTprintf( "upp_error_count=%d\n",upp_error_count);: A' Z0 G9 @1 T
    else
$ T9 O5 h( a7 ?* p# l9 r- d  Y        UARTPuts("uPP transfers complete!\n",-2);  m# N- J1 e( b+ z( P% }
, ]. _. G8 C: c% f
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  s! P4 _) t6 }. _
    UARTGets(ch,2);
# T& u6 m; n9 X9 |8 U8 j" x) E    UARTPuts("\n", -2);
3 {/ E: Y5 V* E4 s
; J. O. D3 F  C    if(ch[0] == 'y'): q3 h8 a, h7 `# G
    {' j/ g" ?* u1 f& n0 d5 I& w! c
        /*打印全部读到的数据*/, i3 t9 }% G  C3 b
        for(i=0; i<upp_frame_size; )
- J8 O. P) [$ ~; T9 p        {1 E$ Z" H: I( P- b" N. k  t4 p5 M) S
            for(j=0; j<5; j++)& J( {3 F4 w0 i4 ^9 [! a4 ?; ]
            {7 f; F5 I- m/ }8 M8 S
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);1 \( x2 H! P( {% Q/ I3 \3 W1 U: N
                i++;; H$ T1 u7 ~& A: A" U( I
                //if(i >= 4096), d% B# `% N# E
                //    break;
8 Q& g% G4 u9 P+ @9 @* F; z9 |
. k' a; k- @# n4 g0 v5 d% y            }
, M8 V; S. n- _0 f; S            UARTPuts("\n",-2);- R8 N" ^6 j. I4 j# u! _! n1 K
        }
$ ^3 P+ M3 g2 _$ T! d. F    }
9 b; L/ j. Z2 J: k
9 U3 g- H% ]( P# a- b}
! [# D6 ?" S9 i. t: I2 Q
" a& e0 c# O; p; D- J" `* E

" ?" E( D7 {$ r9 J. G- O& ^
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 E' ?6 G/ O6 e2 h$ [

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) ]' f( E5 R$ {2 v




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