嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
  d( a: b& F2 \
Void UPP_TASK(Void)
$ ~! l5 K* _/ H8 Z* G{% Z" f7 E% e% _( u2 ?

$ B2 y0 r$ a! O# }    int i,j,k,target_int_count=2;6 V) i5 T  Z. J- \- W  M8 N9 w
    char ch[2];
0 u" d& T7 [7 p$ p: }0 s, u1 B1 V$ M0 q/ L) ]- L, q$ U
; z* O% @3 n( ?

5 F3 J$ W* B2 S( v2 I# R( M' T7 B6 @4 ]    upp_interrupt_count  = 0;0 S! @, a/ g- H2 _
    upp_error_count = 0;: L5 Z4 ~" C6 C0 l9 x, f
( [- J: @; E# m- k0 l
    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 [( m6 g1 @; N6 X/ v
    // Initialize data buffers
0 a& f* H( _9 e: }  |) M& h& f    for (i = 0; i < upp_frame_size; i++)4 i6 }" h9 y1 r& U
    {
6 M9 l3 T1 t. {# p+ S       upp_buffer_b =i;. u- w( s. Z2 a6 X& Q, l2 o! z" ^% _
       upp_buffer_a = 0xDEAD;0 S# Q5 ~+ g5 T( i/ O: J8 Z
    }
& B3 ]* L# d) S6 X& j$ K9 ~; e2 k1 h" G
    //for(i=0;i<1024;i++)
+ H4 N- d$ ]5 G& i! g# j, A$ G0 D    //    temp=0;  E/ B0 Z/ t; r# o$ `$ b# Y
$ y- o/ ?, h& p
    //UPPReset();
+ ~/ X( m# V1 b" W+ |! [    /*启动UPP DMA传输*/$ h' R* C+ ^! g
    UARTPuts("upp_prog_dma_i\n",-2);) k: x3 z( |3 n
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" w* O) |1 Z8 D- H. z- @3 A; X
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) F; ]% x0 C' B# p6 |9 }
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ E9 J% M& [% k/ F& d* f5 u: z% V) e

* S  k7 w0 X$ ?  F8 U. J" q& |    UARTPuts("upp_prog_dma_i\n",-2);
" w) ^8 x8 x9 t% y    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  u6 K4 k% [0 r8 n4 A: |! }/ N7 z. n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- v! ]3 B6 V- i4 g+ s# Q) o" V2 g    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, }  j- O, z/ W
: a/ i: ]9 S; m" o1 U+ D. c: J    /*等待UPP传输完毕*/
' u$ b' g2 S/ ^, V: T2 K    //i=0;( x1 p9 a1 Z5 E3 B, Q, }! `
    //j=0;
. X5 G" k, j; R9 o$ U4 G8 K7 p& h5 A    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' f$ L. m8 Y, e+ L' {7 q" u" h    {& R& a+ Q( C+ K& X3 h& y7 C
        /*  测试UPP传输的同时操作普通DDR数据; p/ k' Y# u" Q5 Z) x- B8 x9 g2 q3 D
        temp=i;
# q  V3 \$ |* c0 }        i++;0 y) q& r3 e; ^) }6 N$ B7 b
        if(i==1024)" I9 X0 Q8 m0 d! |; t
        {5 l9 p& [6 g: @" Q
            i=0;
  F+ n0 ~! f+ c            j++;
. ]3 t! a! c& @+ n3 G) O5 Y        }
2 H( A0 t' K; N9 ?) ]        */
/ Z2 Q& k  U/ t+ p4 J9 |- A; X; B+ R% N; W# z0 Z( h
       asm(" nop");
% l$ P' P$ c: h  z" M( ]2 ?# d5 i# s
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 {) Y7 [/ \8 O" F4 D    }6 ~4 l/ m2 }! x& V& v

$ Z# p. Q  g0 N    /*检查UPP传输的数据是否正确 (loopback modes only)*/, D; K: |6 [5 G9 i
    //UARTprintf( "i=%d\n",i);
7 X# f+ {" R# e, K8 r! |5 ^    //UARTprintf( "j=%d\n",j);
1 v% E! Q$ D: K6 i5 S: K$ q    UARTPuts("Data mismatch in buffers.\n",-2);; o, G, t8 v; ?/ Z, I+ U) }" B
    if (upp_interrupt_count == 2 && upp_error_count == 0)
2 C( C& \3 q4 _+ g4 \    {
, O0 N! ~  o/ @1 ]8 B; a, [& l; P        for (i = 0; i<upp_frame_size; i++). U6 h: q" l3 I8 Q8 |: d# {  L
        {4 x( t7 Q- C% u9 a8 `5 B
            if (upp_buffer_a != upp_buffer_b)
% J! [: e$ q; j) H            {
4 Z4 O! F( ?. m3 p+ S5 c                upp_error_count++;' H, {4 e. B3 N9 o5 {
            }
0 k$ j4 [( F) J7 s' y4 H1 u        }1 Q6 ?; m3 a+ m6 n1 Y
    }" R; i# d" f; g7 l( n- u& B
# D6 Y* S1 ]0 a8 _
    /* 报告通信结果*// z( T2 i( A/ `0 h7 |
    if(upp_error_count != 0)
6 ~# P" B6 c5 X9 a( C        UARTprintf( "upp_error_count=%d\n",upp_error_count);* u1 h0 ]6 t8 t( g
    else( h  v& I" P, N/ \* o- x$ ]# S
        UARTPuts("uPP transfers complete!\n",-2);
, x5 O: h" }7 k: x- _- r0 T# _- N, ^+ l1 \7 l
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);, P8 L6 G/ Q; A8 A* [* n$ E5 t
    UARTGets(ch,2);. p" o0 X" V3 M5 X# p
    UARTPuts("\n", -2);* e! }9 r' U' n

- K; K" ^! H1 s- L    if(ch[0] == 'y')
3 d" k/ u& |$ J$ E; ~  t; C5 p$ f    {) j% ^6 E" Z. l) ]$ u4 D& ^) g3 i
        /*打印全部读到的数据*/' D! e! t$ M  T6 y3 m+ J. e
        for(i=0; i<upp_frame_size; ). i* K% z$ x' e2 e4 @7 N
        {8 E7 u# t% L4 s+ o. P) i% ]( A
            for(j=0; j<5; j++)- ^3 [/ w; Q7 _, }2 B' }
            {) C  e% b4 G: o
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);$ B% H& T7 L4 W# C7 k2 i) n
                i++;
3 o' |6 i6 ~: a( y6 o5 y                //if(i >= 4096)8 [+ k9 `6 |% r
                //    break;
7 \- j8 }2 k" S
3 p/ y+ d# q; T4 C9 a% w            }- F  A# d5 D% t5 y& G2 ?# j2 J
            UARTPuts("\n",-2);0 k. X6 L' _5 U4 ~5 L. @2 c
        }
: ^: y. S% i) g) {+ E3 A+ ~) T/ i2 b    }
* U" T1 F4 ]$ F& ?: }1 ?% f2 r$ x* z: ]& V) W
}
( T8 ^  X) ~& V8 j. T$ w

: W8 W3 D4 a6 f) c+ M; Q' I6 U3 J( ?% G

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。9 ?* J/ Q$ K8 n7 w- B) v+ u

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* g1 }  S/ B% ?! m0 ?1 x5 c





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