嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( G0 ~& I. ^5 q. C
Void UPP_TASK(Void)4 i. V4 E# C7 U1 O
{" y; o& n  s  ~! s  W( c
& J7 y7 w  h1 E4 ]/ j" W
    int i,j,k,target_int_count=2;6 Y4 K, }& ^" [/ A
    char ch[2];
, y: n5 w, b" c! e% C/ X& i
! j, j9 r: b. V- ~
+ a4 C  k5 ]2 [! e6 w; j8 X; j+ H: w7 ?" v3 ~% n* N; D' p/ j
    upp_interrupt_count  = 0;
+ K3 |9 {. O- y    upp_error_count = 0;
' R6 n! G0 w1 g/ B* m- T# \' c3 K: k" I" h0 W8 g
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. B& A; ?: P* `/ w    // Initialize data buffers
4 P) L6 g# p# `; W7 Q    for (i = 0; i < upp_frame_size; i++)
5 H5 s  O) F  H8 P    {
/ y/ z1 k1 u3 l4 o( ]       upp_buffer_b =i;
7 `+ b3 r6 D* E8 M% B5 b" d       upp_buffer_a = 0xDEAD;
- t5 ~: A* R1 }! M  B. g0 ^    }
6 Q+ Y6 o. F5 m4 ?9 G
$ j5 ]6 ^+ K( W    //for(i=0;i<1024;i++)( ~% c- L' ?; _0 b" P" J$ W
    //    temp=0;
2 f0 M4 r5 R) R
0 m0 `3 G/ v  }  A1 b    //UPPReset();
$ w4 S/ f- {7 A, }) E    /*启动UPP DMA传输*/
! X: Z$ E% ?1 U- s    UARTPuts("upp_prog_dma_i\n",-2);8 \: b) B% B: V4 P
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 Q& u# K0 |; J* _- ?. k
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' U% _- H5 z0 Y8 L/ D; v    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ F; s8 V5 ~. s) I
. @* ]# ?, @/ Z7 Y    UARTPuts("upp_prog_dma_i\n",-2);
' E  y+ _) a2 r, k0 h& a+ G    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, e+ [) n/ R6 A9 ~4 X/ t* o
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* e% o" C% F- Z
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" v. ~6 y* A# |" w7 a7 ?6 w0 j% `
2 C( u1 b& n/ h  V    /*等待UPP传输完毕*/  K$ r) m  E  l! f/ X8 l" C
    //i=0;
9 @1 ~$ u$ J3 q: D3 u7 k1 G    //j=0;$ _: K  P3 X, B$ b
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% |3 U  I' G2 b    {' ?7 L5 ~7 i, T) j1 e
        /*  测试UPP传输的同时操作普通DDR数据
  b6 X' k1 W: N/ w; r        temp=i;6 p0 N. P1 ^/ B) z# X3 L. b5 `
        i++;
0 f3 V6 _3 J2 Y. D4 m) n        if(i==1024)
0 D# c. j; m3 }7 T4 ~" C# I        {5 C5 |( N5 I% F; |6 G4 n
            i=0;
! q" n0 a" r: y: _) Z            j++;5 s$ h1 e" k" g* U/ J: c
        }
1 p/ C1 _6 Y, I; K        */
, `# ]$ P! [, A
. p9 O/ q" F! q8 a% ?& K8 E       asm(" nop");% h, [3 q) ~; c( v, u! w. m0 t/ r; [
8 d) t# v9 e% e# {( B& r
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# T' w, u7 z  }1 l) V: H    }
6 Q2 {" k6 g3 c- R" G5 u% G8 w( v8 Z. i/ y5 k
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( T+ u2 _! a' F2 B+ W/ r, P
    //UARTprintf( "i=%d\n",i);# R2 {) g# m9 l. |9 p: T5 c
    //UARTprintf( "j=%d\n",j);5 D9 @* z4 \: u" ^
    UARTPuts("Data mismatch in buffers.\n",-2);
. V# v3 g  w3 |    if (upp_interrupt_count == 2 && upp_error_count == 0)
/ t& Z1 Y) C4 p2 @, k    {# c5 p' @6 _( T: H# }. [/ O
        for (i = 0; i<upp_frame_size; i++)
( h* p. `3 G8 }7 \        {
' Y: T$ q$ G( U9 q3 v            if (upp_buffer_a != upp_buffer_b)8 M* C3 j1 M/ H( i" V; U- a
            {
" z* f6 [# E/ Z1 f                upp_error_count++;
& Y4 y0 N2 x$ V8 I( s' c* N            }# T3 `4 _0 A. k3 j: ]
        }/ I! h9 f% S7 d# S( w- W/ o$ y
    }, p( v( m# B+ R8 G' [* x
8 v( F) R! b% N- c. j
    /* 报告通信结果*/7 j  \6 i3 O! [, _
    if(upp_error_count != 0)4 }0 j: t; o, t$ s, D0 l2 ~
        UARTprintf( "upp_error_count=%d\n",upp_error_count);  M* A& d: G( C7 q3 H& Q
    else# X5 v9 h  }& M6 Q' [
        UARTPuts("uPP transfers complete!\n",-2);
1 I8 J2 @  o! X% U/ g8 @: F! N$ b! U* ]
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  T$ ?# ^2 I! T) ]$ Z2 }4 _
    UARTGets(ch,2);& Q3 G; C8 j0 t- M
    UARTPuts("\n", -2);
" ^' ~* T& Y2 h; k
# ?3 q; p! i/ T& n: z( L9 ~    if(ch[0] == 'y')# ~/ P& Z/ p+ c  g9 F; h
    {4 U! ^5 |- ]5 ~- T9 V
        /*打印全部读到的数据*/, J, v/ p+ J  J# h. {
        for(i=0; i<upp_frame_size; )
# R+ }# t# A9 P5 g        {% R# }; ]: U) ]2 K8 t% k
            for(j=0; j<5; j++)& U0 l: [3 B' a( M
            {5 U& L: s# j' r) I; R) s0 I( y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ v2 e0 h$ V, U8 X1 {8 C8 Q                i++;
; `2 [( G7 y+ u$ V  U3 B/ m4 G                //if(i >= 4096)
1 z' c3 `0 `! K. R) n                //    break;
$ Y; l8 ?! u4 ~4 k
0 R1 X: M( O1 ~# @            }
9 u  w  r% D' [/ M0 i+ E            UARTPuts("\n",-2);
7 y- b/ z3 L4 q; ~, P6 Z        }) m0 ?2 L% o- r% j# D
    }
( x- ?- C6 m% u. Q' B' X' n5 \! ^1 P
}
3 K2 k* e6 x" |
! s# @  Z) M2 ?
6 ~2 B  y0 [; e$ ?0 ~

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* c0 T( r( Q; f( r. Q9 G4 ?
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 x' R* g  l% \( l; K





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