嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 h. [' V; ^4 f0 Q& K
Void UPP_TASK(Void): J' h& A% ^" ^% c, Y
{' ]  ^( R; ?' G$ p: K4 C
+ Z+ u+ d4 R* R* q! [
    int i,j,k,target_int_count=2;8 P% J) P1 L! t6 G0 E6 r" y
    char ch[2];
+ H- W& F3 R9 a! ]* u! q0 i* c
# ^6 ]$ X. ~$ ]5 J) D7 O3 T( E0 p& q& l+ l! L" O
( T! w- z, s- @# i6 J+ [$ D2 [" o8 v
    upp_interrupt_count  = 0;* Y9 p* h% k! U% j
    upp_error_count = 0;) L' r" e2 u) X

1 M7 z# \: u3 f- j. e6 s    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; Q% T9 ^# ], w1 T- c    // Initialize data buffers! u, N6 n, u8 J# e
    for (i = 0; i < upp_frame_size; i++)
6 H( ]& B& g9 m6 c2 e0 O    {0 V$ v$ i) c, u/ i
       upp_buffer_b =i;, L, F( ^: C2 _# I5 I8 K6 X- u6 n
       upp_buffer_a = 0xDEAD;
; o& }  h4 m' j3 W3 d    }  x: M! ?! f) S: g0 B
7 F- U0 X6 W" c0 c: A
    //for(i=0;i<1024;i++)
' U: e1 r* m' D  s; N7 u  ^1 u    //    temp=0;
' _8 ]' F% \! O  x5 V7 U" I5 k0 x1 _
    //UPPReset();$ T9 Y5 _( J. ]7 D7 ^6 n
    /*启动UPP DMA传输*/! u, b; R* W2 n; N
    UARTPuts("upp_prog_dma_i\n",-2);) h1 O' R5 h$ G5 _+ T
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;3 B  a! r+ \0 Q# G5 @
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 z0 I3 w2 d& \" \    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: y  M; K. H& H% x* z

* r; I, w8 c3 H7 u( \+ E3 {    UARTPuts("upp_prog_dma_i\n",-2);  U# i# `! O7 a; s4 I- D8 ~9 Q5 F- Z8 o
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& Y) j0 W+ E1 E7 b7 b4 e6 A
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: {% E5 O9 \- Y7 R4 N8 h( }4 [; J
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) u0 @( V7 H: b, `/ F
4 w  b  @  Z! f6 }6 n$ u4 i3 T    /*等待UPP传输完毕*/
# d# H' [- d1 y& ^& R7 N* @    //i=0;
! P# e) G; O. U) B9 l! E    //j=0;& H* l* J6 h% U. S) Y$ ?
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ U" b$ _; J/ L    {
: j  A6 n) {4 q7 }        /*  测试UPP传输的同时操作普通DDR数据
' M! K7 L& K4 Y7 s  f3 l$ E, }        temp=i;
- }  B5 n4 v- c6 P6 Z2 C0 Y9 L: \        i++;7 y! H' Y, t6 x
        if(i==1024)
" O+ h" |; C$ B: N6 s        {# M& y4 P" X% g9 Z4 o; L
            i=0;& }/ R- R* q. n# n; _& W, G" l7 X
            j++;0 w5 k. @- ~0 L$ v5 U0 J0 d
        }
% V$ _* D( n" y$ p7 [( k% I+ ]7 C+ L        */
7 ^2 S1 p$ {* o
* a0 P& s. f1 |  K' T4 y       asm(" nop");
* z" A& l4 O( d; `5 Y8 h" H1 G- k5 k7 n0 {9 _+ o0 k/ S
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 Z9 T! d6 V! |8 W% u2 k    }
9 G' b7 U0 j2 q2 G. ~5 e0 c/ K
" o6 d. O* g% L1 z0 a    /*检查UPP传输的数据是否正确 (loopback modes only)*/# `4 R! ?9 @" s+ z$ r: H& j
    //UARTprintf( "i=%d\n",i);  ]1 D7 ?! }9 e0 A, Y/ C5 o$ s+ i
    //UARTprintf( "j=%d\n",j);
6 v$ r% g+ b! p- L/ y    UARTPuts("Data mismatch in buffers.\n",-2);
$ `* }; ^6 D% D    if (upp_interrupt_count == 2 && upp_error_count == 0)
" P6 E7 S, _9 y- \6 E    {) q. _% _, r6 e+ u0 r0 t* |
        for (i = 0; i<upp_frame_size; i++), G1 U; O0 F  ^, E2 a7 o  `  h' S
        {1 g3 z, P+ o: n0 b# u3 B6 l
            if (upp_buffer_a != upp_buffer_b)
& F% v+ s" l. V, [- G6 x2 @            {2 @2 o3 U8 E$ j
                upp_error_count++;
( ~/ g* b2 v+ T! K2 _            }
5 D9 }9 H  e7 a7 N: s  m8 f; a        }
8 I  |" a: I( K0 m1 E& q    }" c0 a/ M/ {! @1 ~% {

: n# \! u. z9 Y. Z1 A! |: Q    /* 报告通信结果*/
, K% w; z* @7 p    if(upp_error_count != 0)
5 u" X0 [% x3 y! l        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 c$ O5 V( X4 e; @7 W
    else
1 Q9 d) p2 L. o/ [& K$ [        UARTPuts("uPP transfers complete!\n",-2);
$ _$ |1 R4 A7 }7 W2 o: T& f& u" s4 p( ~7 h
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& N5 ^1 R: `3 o/ {+ e, }. q
    UARTGets(ch,2);
* K- u' R9 `2 b  T& {    UARTPuts("\n", -2);$ B, N' [2 u: ^/ z: A8 W+ }" o: g6 f
1 v  @+ t, g/ I% R# h
    if(ch[0] == 'y')
% `# y5 Y. {4 a5 c/ ?5 v- @, X' Q/ U    {
) W+ |  a+ b8 w) B9 q0 B        /*打印全部读到的数据*/4 ~' F, _  D1 l' `4 d5 l; t2 d1 X
        for(i=0; i<upp_frame_size; ). A  q! k1 I: G9 P- N- D6 c5 h# g
        {
% {1 N3 c' C1 a" _% Y            for(j=0; j<5; j++)
2 N* w' v9 e, n! e0 n" Y+ F6 m: }            {) u' ~0 a1 q  v& o4 v! y0 n
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  L' {" ~8 S1 j# x
                i++;
/ Q8 s# Y2 k7 Q& f( ]                //if(i >= 4096)+ u4 R) E: D& m! ^
                //    break;4 [, ~5 R5 r# l) X
' x+ i( R/ m5 i+ G& U
            }. _. V8 W" E2 ^% f' U5 U1 w" u
            UARTPuts("\n",-2);- U& V0 j0 A: I* @% }  R; [2 c! k8 b
        }' M+ y! |7 a+ @7 N; P: P+ x5 C* j9 C
    }5 ~+ j+ E3 U. I2 ^1 Z( U. P4 b

. k- ~' l+ x: M}
6 d4 a4 X) d* g# E7 M  c
" W7 s9 z+ _" M4 i" E1 M

* Q0 ]6 {" W/ g* r
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 ^7 y' M' L4 e) C3 A* [3 S

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, E0 z0 ?5 e6 f; B- B




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