嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! Z; ^) y2 |2 n  ?: N# \0 @% g
Void UPP_TASK(Void)7 X/ p- @5 f; [6 O. F
{
, J4 ]$ m1 |8 R; R& C# q
2 ~5 s, [" J: d$ x) @    int i,j,k,target_int_count=2;' s. R( J% y' ^- T- ]* K& e& w; W. O
    char ch[2];9 A$ w0 f+ _7 Q8 |: a% |

8 O: d, V8 ?8 a
- t3 J( Q- ^. Z+ j& i
; P5 l: l1 u) |6 W) j  y/ X5 W* L    upp_interrupt_count  = 0;1 H$ J' G! d5 O5 [/ E  c- A$ `
    upp_error_count = 0;8 b: U$ L3 Z3 {0 M! I
+ i0 U( E, v( B. ]+ ]6 }: r
    UARTPuts("\tResetting uPP buffers...\r\n",-2);% I# }9 R$ W; c' Z. K6 M2 V: h
    // Initialize data buffers
1 a2 ]8 \5 R$ k& V! C$ i, c    for (i = 0; i < upp_frame_size; i++): z2 \1 n4 I3 V" k( k0 p
    {
' m0 E5 c: _- }& U       upp_buffer_b =i;1 O" \$ p3 o2 C4 j, A
       upp_buffer_a = 0xDEAD;. V- Q6 O% n+ o/ A
    }
: Y: X1 y% R$ H, ?; q! C& s' F2 Q% R$ i& }2 H5 R  t7 K6 G
    //for(i=0;i<1024;i++)& Q- m0 Q. t6 o+ ]& g
    //    temp=0;
+ N: ~9 A( _! ~( k6 X( A9 i$ ?0 x3 X3 Q; t; Y
    //UPPReset();
4 ^. S# x; [, ]( q    /*启动UPP DMA传输*// A, n  R0 r8 U+ x: t: a
    UARTPuts("upp_prog_dma_i\n",-2);
3 j# j& _5 c( M5 Y2 o0 F    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 t9 v* k3 ^% P3 e
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ O+ @  h7 m$ P
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  z- e3 k  S. ]: M9 v+ X. m5 _3 Q' F5 C. F
    UARTPuts("upp_prog_dma_i\n",-2);" Q& s9 Y% P* z0 z4 Q8 D7 ^
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 d! c$ M$ V0 g2 p3 R
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& l. h2 a5 {# Z    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; i5 K; a& f0 M; d2 v, N
, R, \" w) u( a7 r
    /*等待UPP传输完毕*/
3 l& b  x, C5 }( ?    //i=0;
2 c; }$ G+ R4 U# p2 ^7 m( Y    //j=0;+ t1 M7 C; E& v
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) q) N( M4 @: B( j" [8 i    {/ H" l, S3 F* c! `& p" i' Z1 S
        /*  测试UPP传输的同时操作普通DDR数据9 R9 Z- L8 _" d/ @* X, a
        temp=i;
" g# [* l) F# }2 ?        i++;" |  G" j! i% r. u0 `" S
        if(i==1024)- A, [# M: J# w# z4 [
        {3 h- v' s8 Z  b
            i=0;
5 o% h* o% ]7 u! q! `            j++;
7 L8 F$ \* y6 f5 j        }
+ k8 s* m6 ]: c( Y1 ]1 w) a( g        */
- H/ C* n  z& \" q/ \
) ?# y# G$ k! [+ @' T" H* a       asm(" nop");
6 f# l" p% k5 b: ^- D: u* ]  y6 A6 ]1 Z9 K; P
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 \5 x' V/ [; s9 c( h. _. _# y9 t    }
2 R$ g8 z- S; T0 q+ d
4 J( B$ M2 y5 y# l    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ ~. J! J* d5 r9 q& X
    //UARTprintf( "i=%d\n",i);
& L% Q* A4 Q% d: k    //UARTprintf( "j=%d\n",j);
0 ]! l$ z6 e$ h" l4 l' o    UARTPuts("Data mismatch in buffers.\n",-2);
: Q2 R- w: d& I8 V6 l& v$ h    if (upp_interrupt_count == 2 && upp_error_count == 0)
) c/ x8 F6 c; `- M4 ?7 W- o9 l    {
$ w  y0 H8 J; `/ H3 \, c* l7 s        for (i = 0; i<upp_frame_size; i++)
& [) @  L, l* t9 h; [3 |        {9 \. n5 Q- n# R1 q, q. ~2 g
            if (upp_buffer_a != upp_buffer_b)0 V5 N: |& b3 q! G- D) ]
            {) J- a4 j! ]4 m  l$ I! V3 S
                upp_error_count++;
* U1 r4 P/ ?; i1 J+ E+ C5 N5 _$ G            }
; H7 N3 |, r! D5 W        }
5 P# X% t1 `2 ~* h$ |0 w    }' ~, k8 L6 e- S# y, K& j! O8 Z7 y

" s+ l  l+ y/ I' @( k6 c& g    /* 报告通信结果*/6 ?3 H5 A7 o$ f( I% B) t) X
    if(upp_error_count != 0)
5 X2 r" z- n) Y% e1 q        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 ?/ j9 v+ n9 K1 A; U    else* k9 p& S' J- `4 c. H( z( V, H8 V
        UARTPuts("uPP transfers complete!\n",-2);2 n6 e- q" g+ o# e7 S; z$ L

, O' c8 p# {7 {" `1 u    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# b) z, M  L/ ^/ g$ }7 G9 ~    UARTGets(ch,2);
, r8 A/ C. h1 A  I$ Y/ m    UARTPuts("\n", -2);
' P: v& t: Q3 |  h- k% X5 w' V1 o4 [. y6 U" q/ l
    if(ch[0] == 'y')
* L6 k. u3 c' B4 @7 y3 U3 m    {& a% u6 p$ z# R0 M  X
        /*打印全部读到的数据*/5 b# |/ Q( c$ F6 s" l0 i# G
        for(i=0; i<upp_frame_size; )
2 H  w3 z/ A. F" G; P        {/ i) M2 i6 ^+ c8 \7 ^& K3 {
            for(j=0; j<5; j++)
5 a8 ^2 R& W, c) y: i' [+ G            {# A! g5 L$ G' M5 ], n
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* y+ _5 r+ C% Z4 U+ F& a, ]7 l                i++;- @, g9 T' r; P8 m; `: N8 V
                //if(i >= 4096)2 Q; p6 [6 L) r& n6 Q
                //    break;
0 P$ x5 E3 `. ^3 G3 u& P
) K! [1 d. Q' f! H            }
# N9 g3 a2 _- C- C9 H            UARTPuts("\n",-2);
! C, i+ c! a& ^        }
: `# S* K5 }7 p) E6 e3 a# ~% J    }; _5 d! Q2 u" j6 N! f0 ]

2 K1 J/ B$ h4 G* i/ O6 F7 Z}
; b* x3 V1 g$ g# q8 |

  r+ J2 p& ]( c) u1 t/ W* P( F" J. r# M( b

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% L0 `) G; {7 S" t: n
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ R# s* s; e% m




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