嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& u* H+ ?3 C5 L
Void UPP_TASK(Void)
, j1 ]! M5 w9 `0 X, ]# M{9 S2 P" R7 p$ E* _% }- q

) b, j! W+ D$ z* Z, X! g9 Q4 o: M    int i,j,k,target_int_count=2;
, u% @: P0 E! C# l    char ch[2];
1 }3 u5 c% o7 T7 k/ d4 W0 k3 {' T. a, v4 e1 w% A7 v3 R+ I) {

- T7 |3 P0 n; [; K% W* L& j, E3 e/ o( x" P
    upp_interrupt_count  = 0;
) b( E' T2 {9 [    upp_error_count = 0;
. F: H0 P: K: M) i- S9 D* F4 A2 b7 Z
# U; L; N2 t9 v; `4 e$ ?8 `; y    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. K" u. M' \5 X6 a$ W! O    // Initialize data buffers1 p5 t! {3 w" i/ c1 N% d& A
    for (i = 0; i < upp_frame_size; i++)
6 x$ W" Q& |* n" {: ~, {: X( j    {( C$ _5 {: U' x5 b* @! x
       upp_buffer_b =i;) `. J7 O2 ]7 a. A
       upp_buffer_a = 0xDEAD;! `$ Z1 F5 m6 z0 g: @
    }" Y. h8 y2 |' P: K: y& x
' z- ^( ^+ S( F" G  K& F" d
    //for(i=0;i<1024;i++)
% v( r6 R5 k& L" F! V* q    //    temp=0;
5 \9 Y9 n) O6 b5 B- Y* U, |( v3 B9 h) Y% E6 U" R9 N; g
    //UPPReset();
* K1 \) w& T/ M- q    /*启动UPP DMA传输*/1 c/ V% m3 D6 X( v5 ?2 {
    UARTPuts("upp_prog_dma_i\n",-2);  w4 t% U( [. g1 {4 G- W
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 L  R3 |/ |- c6 C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 D, `0 H& b8 F' T3 c0 }    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: W6 Z, @' c& M+ A8 c9 V8 {% k
; S6 E- E7 Y' a7 [! T; u1 S; ~8 X) y: ]    UARTPuts("upp_prog_dma_i\n",-2);* F8 x. A+ ^2 C. z& |
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;$ G  f2 ^: b/ a) b& S5 g
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) n" G. M: |2 T" y6 r- p2 j    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 V. ~! n# [4 v, h# q  ~0 ]0 A" E2 U
: E) W% N2 L3 `+ d    /*等待UPP传输完毕*/
$ q. P1 b& m6 t3 m$ a3 ]$ ]6 u/ E    //i=0;) \7 n4 y- A2 p7 {# i
    //j=0;
$ n  U, |- T; L3 @    while (upp_interrupt_count < target_int_count && upp_error_count == 0). N& e# X8 r: N6 _! T) A0 ]! D
    {
; m0 g; s% ]0 F* r8 N) b8 K. @* [        /*  测试UPP传输的同时操作普通DDR数据
9 q1 N- ~) q2 Y& N. j! p        temp=i;6 f2 A; Z2 x4 @+ L
        i++;
* H; o1 [2 |- p0 S$ k- `        if(i==1024)
4 e! a+ a0 U. k% X+ f# Q8 k0 x" N        {
+ \7 W9 [/ K' V            i=0;% W. w# b$ Y& n7 T, P7 t5 O
            j++;
; c, H6 X. C0 j$ q/ a        }1 \9 C$ c: c/ k  T# r
        */
: f( r( h& f7 r! p; H+ a5 ~4 `! q
       asm(" nop");
6 {+ w+ d* n" g" v4 C/ f$ O/ {5 v! s3 Q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( h# i1 ~3 s0 O    }& T0 x$ F' i) J
- G) j% y. O. D, z% [" K8 n- n
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
6 _* |3 E1 G+ I8 S* {0 V2 ^2 x    //UARTprintf( "i=%d\n",i);
( q" _7 N% }( t. I' P    //UARTprintf( "j=%d\n",j);
, n4 `0 [4 h0 \9 G) x/ J2 t    UARTPuts("Data mismatch in buffers.\n",-2);
" X# t, n& ^6 m, U) X$ \    if (upp_interrupt_count == 2 && upp_error_count == 0)' x& ~! E8 ^4 e2 x( M
    {
% ~, ?) X: b2 X% J7 o        for (i = 0; i<upp_frame_size; i++)
& A$ L4 c, i  ^, Y3 \, ]) Z        {
( t; n( Y" Y' G+ _. z7 q' B            if (upp_buffer_a != upp_buffer_b)# u' p. m7 t" D# p* ~
            {
$ D) y, u3 E4 ]+ w! r  w. ?                upp_error_count++;0 Z; J/ r& G( r
            }
# Q, Z. s4 ~' }1 N) V' O        }& ~* D& v; e  o# J
    }
( {4 ^( i& l0 M! p
# d! U$ q" o7 H! J    /* 报告通信结果*/
' W9 g4 z4 k; B. c6 `% I3 l    if(upp_error_count != 0): }: R, h& h9 N+ p
        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 U$ q5 ~( ^' G3 K; J
    else
9 |" G9 K' J) v! }3 r4 J' S7 A        UARTPuts("uPP transfers complete!\n",-2);
1 ?0 K6 p  Z% \! Z8 @: _* s
( x* B* I1 z3 \# x) t    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
7 E! ?3 ]  t9 S6 r! r4 n    UARTGets(ch,2);% h6 A0 j3 l$ p# z
    UARTPuts("\n", -2);" {! g4 {% k/ e

- [- F0 x% d" l, E- n    if(ch[0] == 'y')
4 G$ A6 H' w5 u( m" ~, o: M    {
9 e! @6 ~6 h. G2 ~9 ?  Y        /*打印全部读到的数据*/
& d* N3 d) q# u9 _' q6 w# U" k        for(i=0; i<upp_frame_size; )4 F: k- P  o  e$ G- R
        {! x; D- I# `/ C& f* v4 M4 k
            for(j=0; j<5; j++)( r& G" u( i: W
            {$ Q3 G4 U. B2 k3 o: f' h( x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ p. A0 a( D5 E. Y( T/ n                i++;; W2 v0 W1 @5 B/ G$ n
                //if(i >= 4096)
6 k( U2 D* F: w/ |                //    break;
+ r7 r+ A% N; b" c2 T. T" Z0 ]
. h0 H2 O0 i, T# w$ |            }
- k: j. B- d6 h9 X0 r! E) \            UARTPuts("\n",-2);$ C1 l  [3 q2 b8 m
        }
/ n6 K+ c2 i% f/ @    }
# U! G- s7 _, {4 d9 d4 y1 U8 E+ n' G' Q
}

  p% s5 x3 m5 g% C
# I. y2 ~- B# ^0 e4 o6 _) X
$ a6 z6 w# E+ {/ l+ l

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。9 q6 w0 [) y1 A

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& B) j0 u2 o% t& S( M* a7 K& W





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