嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, i0 r  B- P: q) R/ u9 o
Void UPP_TASK(Void)
+ K, R( _! p+ \5 S0 d4 c{
+ G; z0 {) {9 |6 s6 D2 i( K# F
' T% t+ a2 Q* ]* Y9 N3 A    int i,j,k,target_int_count=2;& j" z, d- ^# K2 }+ O
    char ch[2];
' W: T7 c; G8 H
' C4 R7 ]/ l7 U& i
2 l) J: V: v4 N6 J% b# s7 q4 @# T0 x6 L( l  a3 r3 F
    upp_interrupt_count  = 0;
8 t# F1 A: D9 q& k    upp_error_count = 0;( U- {7 J3 v( d$ X

* I/ E  h1 R# C3 e: Z4 [: w    UARTPuts("\tResetting uPP buffers...\r\n",-2);( `) @* U' T( i! a3 T; o
    // Initialize data buffers6 l. a0 _7 f' M7 q0 Z9 I# c
    for (i = 0; i < upp_frame_size; i++)
: w3 Q! W! F" `2 k( g5 _    {5 R, [- p* e) O, t0 v+ G
       upp_buffer_b =i;
- z' `. z& j% ~$ ^, W: ~) J7 z       upp_buffer_a = 0xDEAD;
, H2 q% {( \$ Q% [    }
8 d, a; Z6 {. t3 l( B1 Z. F. ]" x% y* B& s- X  M, ^
    //for(i=0;i<1024;i++)
- i# ?/ G3 T) a" ^' ]+ `4 ^    //    temp=0;
) l4 E7 c8 B8 j! K7 G# e, M* ]. H  l5 z( }' k/ _/ k+ A& B+ {1 p
    //UPPReset();
0 k$ Q% F7 Q* [; f    /*启动UPP DMA传输*/. e7 @! f0 V* @* v
    UARTPuts("upp_prog_dma_i\n",-2);) R" i3 Q/ d6 C2 O5 s; P
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 v/ ?7 _4 {/ O* C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 \, [1 {& q% i! m% S    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; q! S2 B0 T$ O8 \8 W9 w0 l7 ?4 o( m: ?. J
    UARTPuts("upp_prog_dma_i\n",-2);- ]: j6 C% U& i) |
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 C8 A3 E8 i. D
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 q9 n3 ?% U( G* U3 t+ S: |
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% v5 d6 U* A1 W# T, n/ H6 p* l- E8 I: l+ Z/ D0 R$ l; }
    /*等待UPP传输完毕*/6 R; |$ s- W6 L/ |
    //i=0;
$ z& i, B  o) ~    //j=0;
3 B. ~; }) Q5 L. a% F    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ E7 I) u8 f8 t6 F. Q    {
1 B# x) Q, t! [        /*  测试UPP传输的同时操作普通DDR数据
% V# n! |) Y  a, a' A        temp=i;3 }. \; ]0 E; f3 ?8 m
        i++;4 k, D1 O% s4 K( }! N. S3 R
        if(i==1024)* g& i0 i9 |( C
        {) F* M# O+ s* y, y) _
            i=0;/ n8 M" T) X. [! ~9 s+ T+ F
            j++;
0 `3 d0 d9 [8 f4 H% ~+ E        }3 P. `/ Y4 |, K6 b
        */
, a, u8 _8 r( I& j  w, m: u2 `% I
  k# x3 I$ k  `; o       asm(" nop");
) G" M2 O) A8 U* U7 m: ?0 {
/ D6 E, b9 G7 P4 s. C2 P       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ r% X$ i; v& `0 o0 u$ _9 G    }2 l2 J  `' x6 q! P* b& A5 j' s

  z" _4 k, v" z2 x6 B7 O: N0 j: o    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 b9 c. Y: t- m$ I    //UARTprintf( "i=%d\n",i);  k3 a  l: ]6 @0 E- ?( |7 G, C0 Q
    //UARTprintf( "j=%d\n",j);, }1 ], i3 q# b. u% q
    UARTPuts("Data mismatch in buffers.\n",-2);  m. n7 u* S$ t$ Q& X( G$ c
    if (upp_interrupt_count == 2 && upp_error_count == 0)
" ]0 P" E1 \/ d( ]* R9 }( y    {. ^7 f2 t4 K  U) ?9 d9 k6 o
        for (i = 0; i<upp_frame_size; i++)
0 w, o; D4 M& b5 S        {
  y1 ~1 F4 A9 h/ d; [: R            if (upp_buffer_a != upp_buffer_b)
0 M  t  `% t1 `; i' i) t( S3 C4 n            {
' ^" l0 _2 ^$ _/ w                upp_error_count++;5 n0 {9 Q5 D+ X) q* ]0 x. s% `
            }
' ^) g: _/ h& [9 V+ z; R9 W# l1 v        }6 {$ p; k& D* M- V
    }
/ C: P$ S7 H7 _: w! w( [2 c' j% [
    /* 报告通信结果*/4 I  u& ]: r7 k! q
    if(upp_error_count != 0)
3 F8 `8 r5 B2 R7 z/ o! f6 @        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' t* S. S, \! n    else6 M4 B* p1 k" m3 E' ^
        UARTPuts("uPP transfers complete!\n",-2);9 e4 H# e' k3 q1 J

6 ?6 |4 y* w/ ?6 z' |" c4 ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);" T( f' T. J$ B1 `7 {  f8 d
    UARTGets(ch,2);7 W9 n6 n) X. {3 J: H& J; q% w
    UARTPuts("\n", -2);
  R$ [" c0 H$ ^: e8 e) m. `; J) a; v  @  H0 M
    if(ch[0] == 'y')
4 _+ {- R/ B1 I7 {    {( e7 m8 l: U/ m. E
        /*打印全部读到的数据*/3 Q6 w& u* Z; e! h
        for(i=0; i<upp_frame_size; )
2 A8 V: f. a! J: b, R        {2 C2 w  m% Z$ F
            for(j=0; j<5; j++)  @8 Q6 Y; a4 U: N* u6 o
            {
" X# D0 T+ }$ _: y+ N5 {& _                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# x5 [0 `, o5 X. T4 }                i++;
0 \) O( I4 _4 u                //if(i >= 4096)
' W  i0 C$ R9 \5 G                //    break;
) U0 S' u* B3 N* M( w! z! }; e/ v, ?
            }9 `7 e( U* x* ?/ y# D
            UARTPuts("\n",-2);$ x: G' ^6 N# N5 f, e! i' D3 T
        }
# G, F# Z6 Q4 ]( |+ @0 R0 ?9 V- P5 A+ ?    }
& r- o, X# H# s1 ]' X% d  T9 k+ [4 _- d/ T" q# G% n
}
! i8 C4 Y; P/ u

% O8 b. A# F4 e" `8 g& Y8 r% O5 }

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. _! R2 q: N9 j3 W

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 Q! L6 ~6 d$ m* G




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