嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( b# f  f/ O7 |4 M6 j! C  h
Void UPP_TASK(Void)
2 d; d- f( E6 K{. N# I. p2 b3 x: I" K. i
0 t* j$ D  B: I" [# |
    int i,j,k,target_int_count=2;' h' v5 \! k& H2 j6 @* H
    char ch[2];
: L) n4 R3 W- n5 a
9 C  A% X& |% H  z
6 L( H) L, Q2 ?6 {- s  s; j9 e% e. ^& n/ S
    upp_interrupt_count  = 0;
* R: l% r: p1 T( _* Y' n! T    upp_error_count = 0;9 z! n7 X6 h/ b7 y
4 }  C' [1 C0 ?  _2 `
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# m4 t1 F* u+ \( G2 ~    // Initialize data buffers% V0 e6 a* ?7 `9 K
    for (i = 0; i < upp_frame_size; i++)& w; Y7 o$ |# ~6 [9 G, {
    {
6 a3 J( f" e& k* {       upp_buffer_b =i;
' w% h6 G9 b9 X% \6 @' f       upp_buffer_a = 0xDEAD;. F. w9 i* d% H- \
    }  H# p+ ~" y% c7 o+ B6 H
) D$ i2 ~' B( B+ Q/ n
    //for(i=0;i<1024;i++)2 q5 h# _- }/ i& w; T- g' s2 d
    //    temp=0;
) Q3 R6 r! @/ T) f2 {1 c, {7 g/ j& N6 c0 ?# }3 h
    //UPPReset();4 j, p# t0 k- J. f( [% P7 D
    /*启动UPP DMA传输*/
' v- F  g7 @% R8 K/ p, A# K    UARTPuts("upp_prog_dma_i\n",-2);
+ f; ?3 r: w) i4 n  e" G    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 l6 p6 k& k  J( [. _8 X    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 j! V2 K. x, Y3 g; \' y. `# D" }    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' I. m' p7 `9 O2 G4 J  Q& C; z

0 k& n. X- g" a6 x3 C8 R    UARTPuts("upp_prog_dma_i\n",-2);6 _: n+ t7 s& C9 i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. \: x. t9 X1 C( k
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 {! E# m7 u8 `9 ?+ C    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' {0 A/ p' g, A! C
4 Q% |' C9 X( q4 s: D( f    /*等待UPP传输完毕*/
: b0 [+ n. A' Q7 R: ?5 K    //i=0;2 G$ q% U, J) \: }
    //j=0;
/ I% b. a  {3 r    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 y  A' C0 l) O, s    {  ^3 Q7 f  r4 {( j+ y0 D! C1 y8 b
        /*  测试UPP传输的同时操作普通DDR数据. P# `8 w, ?; c& v4 q" c
        temp=i;
& \! t, o+ Z; }9 C& a        i++;+ j; p8 h! A  B
        if(i==1024)
  o1 i; K3 {) j- L6 ^- q        {
$ E& l% a- L! J            i=0;8 [  r& ~) ?3 E! i& K. F
            j++;- M% @' y' R$ q
        }: g8 V. {6 n, X3 J/ h
        */4 G( T2 ~& W$ j5 o. J

$ n) C- b$ W  L: ]       asm(" nop");" S+ m2 Y$ e. D, ~8 i  e! U9 V

* t, O0 O/ ?' _  H5 E       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);. x2 D  B/ b$ D! j& Q
    }. J3 P; W- W4 o) L6 M3 Q& ^
* `* R9 l' h. W8 ?( r3 ?: @" d* p: c
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# S$ ?  _  c/ P" F    //UARTprintf( "i=%d\n",i);0 j  t. x5 S( k& Z
    //UARTprintf( "j=%d\n",j);7 I) H. g7 z3 x
    UARTPuts("Data mismatch in buffers.\n",-2);
8 m# ~7 c- n2 l* ?2 v) w    if (upp_interrupt_count == 2 && upp_error_count == 0): h. C, T3 @" g+ l
    {
+ _% d3 J! W0 ^, U; G$ o: V/ A9 {5 |        for (i = 0; i<upp_frame_size; i++). E1 [" W+ a" R$ u& V6 B/ r
        {: {. q1 ?, B6 F0 w# o" J
            if (upp_buffer_a != upp_buffer_b)
: v) p" A2 q5 B* y; |            {$ R5 F$ \: x! c+ _! Q7 d$ R2 e
                upp_error_count++;
; t) S2 \! V+ k            }
6 f6 _9 {, F' {8 `        }/ D4 B/ V) }" ]4 t" f' n4 [: m
    }) Y! m$ d+ z) T. ~5 ?
4 _( U+ ]& q- A5 V. U& f
    /* 报告通信结果*/
2 k; \9 B$ P( u5 l/ O    if(upp_error_count != 0)
- k8 p# d" \$ e( w        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 B( Y( [3 F4 u5 ~5 Z: K    else% o- C& ]. r4 j* H& M! K. _! n5 p( U% X
        UARTPuts("uPP transfers complete!\n",-2);
4 L- j7 W" Z3 d. D
# y( s; y4 _, E/ M) ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" N9 b# Y% z, Q4 p9 s3 p" E    UARTGets(ch,2);' n/ z. n- |6 e' m4 {$ Q
    UARTPuts("\n", -2);
. w% {  B4 z0 ]( u& @8 F( {& y2 I) ^! P/ N; `
    if(ch[0] == 'y')
( N$ a, }. F) }" U: K5 d) h    {9 x! x+ T4 v; {0 o- ^! T8 p6 {
        /*打印全部读到的数据*/
" u( r) t( O1 L  c' ~0 K        for(i=0; i<upp_frame_size; )
/ d/ H3 _  N* M( G5 Q        {: K( A+ P. B. e. o' ~
            for(j=0; j<5; j++)
! K1 Q, m. s& u7 E9 z6 Z            {
0 |  h# G1 {( d                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 ?4 y/ ^4 `: |! ]3 ^                i++;
2 Z* d* U  X/ P+ {$ X% u                //if(i >= 4096)
7 p! f1 D& k  C3 ~. Z% k0 `                //    break;+ L+ Z  @8 ?: z0 g, ?; `$ [
% L" \: }' v, K* c- [6 A( h- x7 ?
            }
* n7 n$ t- R7 k2 J5 B9 I) F            UARTPuts("\n",-2);+ Z& }8 P) u0 i0 ~# v5 \
        }
& s5 |' t3 C  R: r    }
/ \6 Y$ q0 c: k& f; r# r% O1 @  K- y* m
}
4 ]% Z! b1 U5 `) j

; f9 u* o4 h0 @% k$ G& X  v1 z2 K" J, L5 y- ~) D. q. t! {9 e

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。0 X  S% [# `& T, ?: E  j( h) K

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) s' D9 o1 R6 H1 ~# ~/ M




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