嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 i( w: [4 y( R/ C2 u' R: ^
Void UPP_TASK(Void)
- f6 W  B  u7 I; }( Y$ }{
5 Q- d; Z/ o: g  y3 a8 Q: z) D' E/ k$ }7 `* ], d- o3 o2 }# Y
    int i,j,k,target_int_count=2;( r7 @" s6 M+ ?! @: E" C
    char ch[2];' X1 }! k2 @' ]. t! h

; g  {9 n3 ]$ p+ P; ]6 H: C6 p9 C& l. Z( a5 k7 T: R4 m
0 P1 J; }4 ]% \# E( `
    upp_interrupt_count  = 0;* A5 G" L2 d; L. a- I! H0 t' f7 H
    upp_error_count = 0;% i) U0 o$ U0 Z, E# m
. R# N) m) q$ t& k) ~
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 L6 o' U* ]9 x$ P( U    // Initialize data buffers
0 l! i3 h5 A( D# J5 G    for (i = 0; i < upp_frame_size; i++)
, T0 G" ]2 s: E, G    {
) f# @$ }' e% \9 d) k8 d       upp_buffer_b =i;8 n3 `6 }6 m, ?7 D, \# T
       upp_buffer_a = 0xDEAD;# }. ~! r( w2 h* C
    }6 T+ H& }' ^. v* q( H
7 n5 p+ K5 c  z, W& d
    //for(i=0;i<1024;i++)7 M7 I9 n( j& ?
    //    temp=0;7 u3 u% u$ F8 e/ m$ A) m

  Q1 F6 G" f4 c7 P    //UPPReset();' D1 S; T4 Q, M0 g
    /*启动UPP DMA传输*/
; [6 M' j4 @/ f) C/ m5 F    UARTPuts("upp_prog_dma_i\n",-2);8 k" v0 @1 l* R+ M3 W& V( R
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 x7 {& w( T1 ^
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( L- W; ~0 a9 \, R7 ^    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 N4 H, H6 C9 w! f3 V
/ g) h/ i/ I5 ?2 j    UARTPuts("upp_prog_dma_i\n",-2);
& ~5 D, Y  M& U- }    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 M% l9 N' z+ m2 x/ U2 |    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 D5 T: q+ [  V2 B* J0 v+ k
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ e* ^  H3 L+ G

: u6 P2 c% J3 F    /*等待UPP传输完毕*/  |. N3 d' U: K! g3 R( F7 w
    //i=0;( p0 Z5 d" A8 Z; T# z+ q5 W" b' [
    //j=0;
' M; H( g3 l% A- }$ D    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ U- g3 L- G- {7 y( k' E8 k    {
  L1 G" v% Q# O, X9 Y1 {        /*  测试UPP传输的同时操作普通DDR数据
$ ?2 v; F, D% J8 i. i0 z3 g9 H        temp=i;
- J9 Q$ e8 `3 J        i++;
- [! }# L# `& ?, ^' L        if(i==1024)
1 {0 x  {( B( V. P3 t7 B9 c        {
" z6 E6 r) }& }2 ?            i=0;5 c$ C) c4 z5 z  N0 L/ d0 t
            j++;, o  ]: q  G' V, o' ]
        }& C; [% k$ p2 p+ Q# P/ ]
        */
% c! h! \! G* J( }3 s' I+ E8 F, P1 l3 t8 B9 X
       asm(" nop");
  D  h$ f6 f" `# e" Q' q. Q& Z! n/ j
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 R$ y$ {- o  o0 k- h# D  n
    }5 I$ p' r" t& {6 T9 A( m" T

* Z+ n* \$ I* U& x* Q  G    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ d0 h! k2 u0 Z; t% C, z) N  u9 x    //UARTprintf( "i=%d\n",i);- M6 O7 L; @" Y! r8 y1 L
    //UARTprintf( "j=%d\n",j);
) \& P7 F, k! w3 o    UARTPuts("Data mismatch in buffers.\n",-2);# I8 i, n! q4 g. u6 V4 B3 ]
    if (upp_interrupt_count == 2 && upp_error_count == 0), i4 V  i9 j# ?" h% e3 m9 @4 G
    {) }) S+ m0 b; T  L1 _
        for (i = 0; i<upp_frame_size; i++)# q, B2 X% p/ Z
        {
) K. O4 D! P# P9 L( {            if (upp_buffer_a != upp_buffer_b)2 F( J5 Y" r" o; S) W9 y
            {
+ j8 O: }- r' L' W                upp_error_count++;% B4 f2 [$ v! {- c
            }
: X  I6 O4 i$ X. @! H        }
( l- M$ {0 q5 P, D) u    }
0 m4 f0 _- U3 i: q) ]- Q7 w* j- _% {
    /* 报告通信结果*/
' F1 M+ ]* t! C% m* U! r    if(upp_error_count != 0)
/ H6 N1 ?& D% B( d; b2 a        UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 A6 u1 R8 z0 m    else
. k! d% D& ~! ?        UARTPuts("uPP transfers complete!\n",-2);
. H+ K4 }2 ?+ D: T3 ~% w! p# G8 W( C" O* f8 d
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: p# ]/ u1 _! p/ S: O
    UARTGets(ch,2);( ^, \; ~( j4 j0 i
    UARTPuts("\n", -2);
5 L" j# n- W' D3 s9 G
8 P7 Z4 N# B+ X9 K    if(ch[0] == 'y')- q5 n* E) E* D/ [& r) c/ C
    {; b# U$ e' V6 i, i
        /*打印全部读到的数据*/7 S6 f" h- N+ B4 W( O
        for(i=0; i<upp_frame_size; )
3 K+ S/ U, [+ n6 ~( R        {
* c* M9 p9 J6 W3 T2 G            for(j=0; j<5; j++)
0 v+ Q4 u! f4 F. T7 ?            {- R8 O/ n2 N- o* ?$ k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 K9 e; k3 P& r4 [) F
                i++;
. o- u8 Z) |# ?$ Z( g4 a) j                //if(i >= 4096)4 I# F/ \' F$ g/ c
                //    break;
  t0 \2 I+ K( s1 O+ `  n9 F8 B$ s7 i2 k& k8 e4 H" z  u
            }8 ?% v2 q4 O: t) H/ q# f
            UARTPuts("\n",-2);' T% t: @; _9 {: C
        }
5 X2 _5 {; i1 o" _/ k    }9 w. L  u7 ~0 T' \2 E

4 a9 ?8 p% W, s: ]& K, z}
$ L- M% T4 O# _1 I- m1 b

% T9 {( h7 b% j5 \6 M. @5 Y9 v% S3 d8 D- j* _* Q; R' n

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( L$ b6 d8 w4 j7 D8 q# z

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  J0 O! f! u+ N1 q$ ~




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