嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 I- g3 V8 H- W2 ~- j
Void UPP_TASK(Void)7 d4 h9 [. w& V4 K1 {" r; E
{
9 h* `  p9 Z4 A% r5 Z7 V
+ D5 H& d( U6 M8 r/ [: T    int i,j,k,target_int_count=2;
# \4 j5 r, e0 x; [* j9 H: e- K    char ch[2];
3 W9 T* _9 \2 N3 a3 c/ R- z) e& {' u4 j$ l4 S. X" K
1 ]& F& A/ x3 x# u# X$ z5 O' Y8 `

( j! n! \. y8 H6 P  w    upp_interrupt_count  = 0;  t5 I0 m; c( b* `  C. v
    upp_error_count = 0;
: s, E: e( P# f) g% \& ~
" ^4 u' @5 M; c) |    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 J0 j1 A( p. W8 a% P) [2 m4 G* b
    // Initialize data buffers  J  t" D9 E- [: G5 \
    for (i = 0; i < upp_frame_size; i++)
$ Z$ `! }$ U. C( i    {
" W4 P" D! a+ d       upp_buffer_b =i;& y6 `4 h5 d0 q: u+ m1 U
       upp_buffer_a = 0xDEAD;
$ _$ `2 k) I) R2 `/ E; r    }
+ p4 {, w: {6 M) t
: Z1 N( J( A* F7 D4 Z% F    //for(i=0;i<1024;i++)
4 v5 f7 Z4 G6 ?3 K9 \6 D( s    //    temp=0;
+ |' v5 X- u, V+ r" D' a2 v, v$ k# r7 t6 `2 ]
    //UPPReset();; t& E4 Q! e  M4 i( L6 A1 r. t5 d
    /*启动UPP DMA传输*/4 o. [7 r5 B/ I: v( c( l% S
    UARTPuts("upp_prog_dma_i\n",-2);
6 P& g/ _7 M3 V4 t$ ^4 ^. M    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 M: s5 i: x$ H  l; U) b4 K    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 @  R( {( N" C, R) b' X) W6 ^
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 |% r9 b8 b3 z4 d. C* C0 z
% E& M: W1 c7 {) G  t6 d
    UARTPuts("upp_prog_dma_i\n",-2);. q4 R1 B$ z5 H
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 C# m0 K" w8 t& A- Y; L8 g    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 J5 ]3 ~# B0 w% F+ u    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 T# o! E! v" x* h" p6 n

/ q. F& k; z9 I" |( D    /*等待UPP传输完毕*/9 \5 U9 q& m4 n9 r5 U/ O
    //i=0;
" h1 l8 F/ n% S# F. c8 m7 m3 P1 L    //j=0;8 c" Y' M) N$ v1 h
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  W6 H; w# \* _' H+ T    {
1 {' s9 o0 [7 G# r; h8 a' @        /*  测试UPP传输的同时操作普通DDR数据
& r- I4 l  K. |, H( k        temp=i;4 Y7 M# U* o, z7 x4 {) J
        i++;
9 F! K; i3 R2 w        if(i==1024)% y: L: }3 d/ d# T
        {
) |' T% \" Y2 S+ f            i=0;
0 i/ C! r7 a" R3 e3 P) q% T            j++;
" }6 D1 E; a7 @3 A! q4 K        }4 P+ j5 v) q& O6 n
        */* J# ^7 K  q" A6 Z. U. G- h- r

2 ]) b( w6 T! g       asm(" nop");
" j8 ~5 W; g& c! y8 J) Z$ N1 }# ]4 `9 y0 `+ g9 L
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);$ ^, _  p6 ^. v
    }* [; J# _) E0 H  T

1 O' P" y! Z: }! H1 e# T    /*检查UPP传输的数据是否正确 (loopback modes only)*/% T- w- f  B8 q6 [
    //UARTprintf( "i=%d\n",i);
$ I8 l7 e2 W! [. s    //UARTprintf( "j=%d\n",j);% E9 W$ Z& n  }6 k( x9 ~. ]/ n
    UARTPuts("Data mismatch in buffers.\n",-2);
6 F3 _, Z, k) n" L5 N# n    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 R& e; K5 K9 [' b' V7 e  b    {" P/ @$ Y3 g$ [0 g9 `) ^" t- K
        for (i = 0; i<upp_frame_size; i++)* i5 z& m: ?1 G$ H+ z( `! [. \
        {8 f3 u, ^' e; t: r4 w. }! C- B3 e9 ]& J
            if (upp_buffer_a != upp_buffer_b)" M- B. j, A/ z
            {
5 X0 D9 f, t) e0 h                upp_error_count++;4 c. N. ?$ W* h
            }
; {" |5 K& t% E" t, H0 f9 R0 ^        }
& R$ @0 E# E: M0 b    }- M2 i) j3 m3 W0 P9 @
: i/ F: G' K) i2 C  E
    /* 报告通信结果*/7 Q2 F7 l* i6 @5 b  H5 |2 E4 D0 ?
    if(upp_error_count != 0)4 j+ J5 V+ Y) N: x# F0 O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, B5 ^- A% h, \! C& n6 x2 ]% Q- G    else
  d% {& X7 y" j        UARTPuts("uPP transfers complete!\n",-2);3 v4 _7 p% H2 U3 I2 S! h
: c, r! [9 b5 {; K
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
. d- M; I, u4 x% z) p    UARTGets(ch,2);
1 o: l3 `! ?2 }* f! N    UARTPuts("\n", -2);) f2 ~! u, v5 W! W- n
% W! s% V5 l+ _$ Y4 I4 K
    if(ch[0] == 'y')
+ E2 Q. n: p2 L- q, k5 w    {
3 q. [% F# W- X, Q        /*打印全部读到的数据*/
' ]) q2 q! P9 X        for(i=0; i<upp_frame_size; )( e) y' \" _) i( C
        {
% n( C, u" V5 H: N+ B            for(j=0; j<5; j++)
- z" K, W* a2 U9 `* e) ^            {0 U, |, f. ]& A4 F) M* E1 Q
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
3 D. d4 j% i- C3 D3 V3 [                i++;  n5 i8 j7 ]$ A5 v
                //if(i >= 4096)( _% C. _3 Q5 R  |
                //    break;
1 D2 U# R9 w" a! y+ ?, c0 \) j' Y$ w$ y5 k: A8 v" ?/ e
            }
% R. ?5 s6 B* C, G" q+ [/ Y/ T            UARTPuts("\n",-2);0 S" b: q( F2 h( ]- g4 m" Z+ \% Y
        }
+ ?8 _3 h' j% a9 j9 N    }
( Y$ U7 Y6 \, j5 V& ~( \9 V* G
& L/ d- }& N! Y7 c4 z1 `}
7 }& D8 q" A2 ?& L# z/ q

. w$ j+ S& _+ O6 ]8 N7 ]
& a$ l  o% E, T; Q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* e/ t% ?2 m3 t( W
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) L$ l2 V% J/ p& D




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