嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% Z$ `' o( g* c: T) x3 A* I4 \
Void UPP_TASK(Void). O$ g$ W+ k& y, K9 I/ B; s
{- q' g) X% l- B5 a; m" z1 n) z
8 \0 y, y6 D2 k
    int i,j,k,target_int_count=2;* h2 w3 P2 `" G
    char ch[2];
* M* z! N) i( w; B  D0 U8 y
0 }; @0 P: a( j( I+ U7 V( k
4 K2 v5 }/ y5 J$ n9 j* o; O$ h7 i: |0 L8 z" a
    upp_interrupt_count  = 0;$ |% X, X* Q6 y( e: v
    upp_error_count = 0;! s- ~8 @9 G7 M" F$ P: i$ h

# K) @* O& a2 B' E+ O( `    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) `, H  @+ C; X) \' D- a3 b    // Initialize data buffers& n( W) O% }2 K. R
    for (i = 0; i < upp_frame_size; i++)
5 x7 C( ]/ ~5 N/ F    {
7 t* z, O  U* j       upp_buffer_b =i;& [3 K2 Q5 x( a' u$ O
       upp_buffer_a = 0xDEAD;( ^% v- J/ c8 d+ y7 l( x
    }* ?2 b9 C2 E: y

" G/ ]+ o" y! r( g) l) a    //for(i=0;i<1024;i++)7 y) d  I& M* p
    //    temp=0;' T% r9 g+ r; ?+ o

# {4 W9 e1 d3 G. n( o) ~, L$ p! G    //UPPReset();0 B8 f2 G3 ^) n
    /*启动UPP DMA传输*/+ K  u3 ]* x$ Q. e$ _5 q, r' b5 D
    UARTPuts("upp_prog_dma_i\n",-2);# I* l6 x7 _- X* N5 p
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" K9 }% `2 T8 `0 N$ ^  |. C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ m) r  s& N' D    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 P* {# ?& H- }  T  s+ ~0 v9 ?; U
5 ^. l3 u% d* o( W+ S
    UARTPuts("upp_prog_dma_i\n",-2);
, `. q+ N$ G# P    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% E$ ~2 k$ B. \4 H  R5 o6 ~
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 G. v* _. p7 _    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ i  q5 |+ @+ D+ W! j

( H3 a* b) Y# }, n9 E0 @% Z% N    /*等待UPP传输完毕*/9 \$ [$ H! |, ^) D
    //i=0;
$ u$ u1 ]" \! j6 w. v    //j=0;2 ]7 L* x- c7 M0 Z6 r: m# J
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- ~  g7 f. y+ r9 i7 f5 s4 q" \( T
    {7 v) B, s) B' X$ v- y; }
        /*  测试UPP传输的同时操作普通DDR数据2 I% v: j' q$ S/ B. M
        temp=i;
- u  X7 {! v8 V8 ]- {        i++;8 K2 L/ i5 n7 I* p- A) f/ ?
        if(i==1024)
* d0 S, ^7 [: i' R        {, \4 A* p4 V, M3 T  s- a
            i=0;
' Q% t9 ~  y2 h4 _+ o9 |            j++;" H$ Y* v! C. ]1 i
        }
9 z$ E9 h% ]( {! b        */, i8 Q" j8 ]. C4 F6 ^9 u
7 |- S0 R. X* T
       asm(" nop");; |5 x; j  q6 u1 J, e. q
( t% o5 i9 A. @+ Y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 H1 T1 d- a+ W/ P8 x2 ~    }
6 y3 }6 X1 g- Z& O# V
2 \) J9 m5 a! ?+ Z" f1 p# r8 x    /*检查UPP传输的数据是否正确 (loopback modes only)*/* L9 d2 ^& @! X2 ?5 V% T
    //UARTprintf( "i=%d\n",i);5 ]2 _+ w6 f% U6 x* @4 a8 T
    //UARTprintf( "j=%d\n",j);+ H8 ~* I6 r+ G
    UARTPuts("Data mismatch in buffers.\n",-2);
2 V9 x! j8 o6 f+ Y8 f& f    if (upp_interrupt_count == 2 && upp_error_count == 0)
: |6 |  X2 ^; Y1 U$ L" W    {
% A. T* b( P7 u        for (i = 0; i<upp_frame_size; i++)# t1 Y1 R# Z, N0 x" o5 t. ?
        {
! @( N# H4 F" y* O. f            if (upp_buffer_a != upp_buffer_b)
) Q+ i7 O* |& I7 l# f            {
" p9 {: J; J1 G* D" A9 Y                upp_error_count++;# b: X% _) U1 t! @" I2 z# d
            }6 p7 `( b2 p- G5 [7 y
        }0 n4 B: k2 `2 W( J" F1 X' u
    }
" M) P* j4 n. m7 i8 P& S* I2 h9 W/ G0 f$ D8 c/ {) {
    /* 报告通信结果*/5 m- B3 M$ @+ l$ A2 t
    if(upp_error_count != 0)
4 z* {& F* i! h4 Z        UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 [4 t- q  F3 t8 }% v    else
8 V& y1 t  [8 G) |0 H& X' `/ r        UARTPuts("uPP transfers complete!\n",-2);
! m+ c4 t( S1 c3 J& `3 v- T, U' K0 V4 ?, }# C6 G( [
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 h8 J! ~3 I6 c( F% E- T; |$ O- b1 t, h8 c1 V    UARTGets(ch,2);
! P* a$ H/ @4 Y& M" l( L    UARTPuts("\n", -2);
& e$ K" E% U0 @
/ B( a2 X( F) O/ J5 Y    if(ch[0] == 'y')
3 j* f6 O1 l0 o- m" V    {" l9 L" T* O9 D
        /*打印全部读到的数据*/
$ z* |" @+ |0 Z4 B8 M        for(i=0; i<upp_frame_size; )
; G) N+ l& r4 m) |' T        {2 H/ o7 S9 ?9 W2 R+ p
            for(j=0; j<5; j++)
! ]3 v1 X2 y& K' m; O            {
# z; ^( n. z# X# h: n/ _+ A! |                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. w0 v0 I3 S% [# v# D
                i++;. B# y. v5 o% ^( t9 S& c0 t
                //if(i >= 4096)
( ?, p/ g+ `" ?0 u* e* `6 ]# K% M                //    break;% w# q, r5 e& X3 d

9 X( W6 A, ?/ O) q6 R% |, K2 S            }% G% H8 }% l  U3 Z$ ]
            UARTPuts("\n",-2);# `; c5 ?/ J  a# ^7 D8 j
        }
7 p# q0 p2 h/ U% j    }
2 ~8 D4 L1 k) N. K4 p2 q  k3 q; s6 C# p" |" z. V
}

! H8 `$ R, s' j: @0 }" h. y

  D0 }3 a9 l1 M3 l% h* [/ z6 f/ P
; _- _6 Q% ?. n; q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* H' W1 ~4 \6 F* ]9 d2 G5 U* ]
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% Q% T; S* @. J7 I. O5 Y





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