嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
  ^* w# b! D4 l
Void UPP_TASK(Void)
  `2 V4 X) S! u$ R* a6 W$ ~9 k{
1 b0 @5 R& N; n% P6 k  T* ]$ d9 o# j9 t4 d  k
    int i,j,k,target_int_count=2;
! z8 c% `4 `7 {- h' c& Z    char ch[2];
4 u5 K" I" @3 o
' |+ Z' I# q, ]. T
7 ^% N7 T$ e) |8 z
+ H" J% i" u4 Z& X* v    upp_interrupt_count  = 0;
. t& H7 ?- e9 r# V8 R  J( A" D    upp_error_count = 0;! U5 Y" d' K) \- h3 D) L) q

! ]3 J$ k/ C9 j2 T; g* x2 n. u    UARTPuts("\tResetting uPP buffers...\r\n",-2);. n0 T+ o; F* W' ^9 x$ v
    // Initialize data buffers; G/ l' a: u8 ?% V8 O
    for (i = 0; i < upp_frame_size; i++)
6 h! f( \. ?  E. K    {
+ x5 X3 L3 p( b5 _/ j- S. _       upp_buffer_b =i;
1 d7 m% `- Y2 T2 P* r& ]1 j' U       upp_buffer_a = 0xDEAD;
- X% l2 K  I7 t( |/ i. j    }( J3 o- z3 V# r3 l% _, T
2 s" }2 S, M0 `( h( c: L
    //for(i=0;i<1024;i++); S- y! C* l: N2 _
    //    temp=0;
$ r9 A$ d, x* K- i; y6 n$ V% _# M% O* r! e  D9 O7 R; i
    //UPPReset();9 q  e5 B+ M+ z0 Q4 t
    /*启动UPP DMA传输*/7 C+ ?  j. @9 z" Y- H. x5 i
    UARTPuts("upp_prog_dma_i\n",-2);
( l+ x! T4 n8 Q& ^7 O0 p+ J    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;; E# ~& J+ |6 r1 V2 F) _
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( j$ y. q, r0 |: l
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: E2 s8 w# |3 F" ~2 A( r5 T6 `2 m0 u, S' q/ W% ]( L' `* O. A
    UARTPuts("upp_prog_dma_i\n",-2);8 ~+ `# W' ?9 p* W
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 c9 H3 c2 Y0 D% P6 _
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 y( ^: B( w( p* T6 U7 P- k    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) m, Z. f* O5 i

+ _% Q7 _& N- ?4 l4 R5 h    /*等待UPP传输完毕*/- D7 Z2 @4 R9 h( G7 v, A' a" i0 M
    //i=0;0 i, U; [  s2 E1 l+ x9 X
    //j=0;( \$ A1 M- H8 ^0 t/ F
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% s1 L* @9 x" p6 d$ r/ i! W% F    {  @3 U( ~2 Y$ _3 T0 Y
        /*  测试UPP传输的同时操作普通DDR数据: r' N  x1 o- m( J
        temp=i;2 ~0 a% r9 |# \; l3 D2 K
        i++;
# x# K( n* ]1 G        if(i==1024)3 j: v" @$ r3 X% U
        {
7 ?5 {: z- p# E* L            i=0;
+ y7 ~  w( y& m            j++;5 W  O* w3 C% ?% A$ Q
        }$ @# U9 i, b( w3 i
        */
9 O% V+ H* L0 L+ i! v
3 e( C+ ~' Q7 Y& a6 g& x       asm(" nop");
1 W: ]& W/ Q' J2 h4 s' ~, F! ]5 D
( J5 R( n, @" u' j! _. n& u* L! i       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 K( w5 r2 B9 m2 w" W, }8 R: K7 H    }% @; m1 G9 z- `* Y* u
0 d& W  [1 o& O% g
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 {6 z7 U& H) O5 t) F; h6 V    //UARTprintf( "i=%d\n",i);8 Q9 @+ J- O; Y3 F) y
    //UARTprintf( "j=%d\n",j);
* u0 A9 o! j( b! r  u) E* `4 [    UARTPuts("Data mismatch in buffers.\n",-2);9 u' x9 {! ~( Y, M9 _$ Q4 a3 C
    if (upp_interrupt_count == 2 && upp_error_count == 0)+ _2 f# p2 Z, W' {/ ~' _
    {
; ?( x8 x$ H4 L  P& i5 @        for (i = 0; i<upp_frame_size; i++). U* x) B' ^7 l& m
        {% `' `1 Z1 p6 L$ j6 R3 i
            if (upp_buffer_a != upp_buffer_b): Z6 I% z: B3 X9 F( N2 \  \
            {# \! u. x2 O) {5 ]/ k
                upp_error_count++;
, k$ E: d. [/ [            }( c! Z  m; D7 w- e/ S3 t+ ]+ t8 P
        }
# e; ?, K+ F: Q/ V    }- L+ u0 A* a" S$ K$ _% H  O5 x4 [

. G% @2 q& I7 }6 G    /* 报告通信结果*/
$ A; n5 D; F" w    if(upp_error_count != 0)
7 _. {8 u7 V6 n' z% p3 Y2 p        UARTprintf( "upp_error_count=%d\n",upp_error_count);
  _* r2 f' A( ~    else
3 v; Z0 H/ Q1 A& z" R        UARTPuts("uPP transfers complete!\n",-2);; W( ~5 O2 v$ g% O3 p

! E# E4 T- S& k1 W. ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 U. k# u  K( k$ ^. c1 m' l    UARTGets(ch,2);
$ C' J8 {5 P. s5 h0 y4 d+ T) H    UARTPuts("\n", -2);/ p  F( {  G: _5 U2 n, D% y/ H; b
( ]0 ?0 j* c! n  Z) f1 e: P  y8 |+ c
    if(ch[0] == 'y')
( e; |8 h( l) \3 M( N    {
& e2 N4 T2 Z1 A. E% ]        /*打印全部读到的数据*/: K# d  I# N  d, M
        for(i=0; i<upp_frame_size; )
6 M% f: t; M7 k3 V! B        {
; k/ ?3 g0 F$ l: r- v8 Q' P            for(j=0; j<5; j++)
& ~% n4 Y# }0 N. t+ _* l            {& h5 v0 D% H  Z! l& D
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);$ u) Y# B+ v  h1 ?" K! T' h$ h, }
                i++;6 X  Z1 ~: x. [4 o
                //if(i >= 4096)
. e8 R2 O/ z2 D3 G4 B, {& L7 C0 ]                //    break;" Y  b$ {/ j4 L! \
5 A6 P) \' Q) E% s% V6 N, J
            }
) I9 N, M' Z' z7 O* l5 T$ V4 l$ K            UARTPuts("\n",-2);
4 S% g3 y/ A6 B. E. O% ^7 K2 d2 d        }
) g$ p9 T/ j: C) d* a    }
, C- Z+ m! j1 A4 n4 Y: Q! H) U7 Y8 W( j$ L' }$ h
}

1 ]3 p, s7 e$ U( e' J' |" i
  A' f3 W/ H" x+ A) S) a7 Z
6 V: y  f: [" b2 j) {- z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 X& J* ~( T( Y: w% [& r% ^% `$ s6 A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 o4 |' b! y4 @+ g9 ], U6 {




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