嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 r* _) c1 O* a9 o
Void UPP_TASK(Void)& V- n* c  P6 G# H7 u! r3 [
{' ?5 f; B; U$ {  H  ~

) v2 L# o* ]# y0 q+ [# `" i    int i,j,k,target_int_count=2;
6 M0 w! p0 |% V0 y    char ch[2];
; o& b% c- p" b+ }% g  [2 M) b5 D0 T0 E7 c

! j7 b' L+ X4 `" f7 z! T
0 S6 g) a8 l9 B% ]    upp_interrupt_count  = 0;
' e4 Q$ w* d# r& ^: w) M: T. h    upp_error_count = 0;3 ^3 f; \" y' ^6 ^; l

, j( ]3 e0 Q8 y/ x, T* R    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 F9 [' w4 m0 F, n0 y& V
    // Initialize data buffers; S4 r9 X0 q+ I) v
    for (i = 0; i < upp_frame_size; i++)
; r; S. Q1 {4 @5 w- k! n    {
, R, O3 t" T+ f: e       upp_buffer_b =i;) ^4 U# i% K+ J3 U- R/ k  c9 {; k
       upp_buffer_a = 0xDEAD;) w  l0 m2 B( S6 b
    }, z; @5 W6 z$ d% o" l, W7 u

$ N% E+ O5 U8 ^' }( W    //for(i=0;i<1024;i++)5 i! ~1 }) T1 O; _
    //    temp=0;9 N5 A1 p8 c; S

# t* m; |) [. K# N, G; n+ l    //UPPReset();7 b& w/ Y9 Q# V. |4 c/ D4 ]" M
    /*启动UPP DMA传输*/( o+ [$ f8 f" B. ~5 W$ @
    UARTPuts("upp_prog_dma_i\n",-2);2 C- ]8 x" h  _. z0 y
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  }* g% b7 D# l
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# B# R, [8 i9 v! I( L% `    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);! \! ]( n4 l) Q; \1 J
1 K& Z2 \* r' e, U: l( a
    UARTPuts("upp_prog_dma_i\n",-2);, |, N9 t% P/ M' d
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 Q7 l; H: T8 U0 P% o
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" `2 f/ J, w* r  ~
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);1 }) k9 N8 y6 S* [

+ n7 T7 v1 h* Y    /*等待UPP传输完毕*/
% U' ]5 S( q; ?4 s) X$ a! x    //i=0;
, F$ ?5 d. j" r+ c3 ?7 b3 w    //j=0;
. o% ^+ w" @- [: y, Y* L. e: D" J    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ i/ [+ P5 p/ i) L
    {
+ X" |0 f9 X( h; D, E! I( t( _        /*  测试UPP传输的同时操作普通DDR数据
4 C. a! @# m* ~+ Q        temp=i;
/ Q" l/ ]& o( D" D% h  R        i++;
& K: g1 L4 G* |* j+ n) [        if(i==1024)8 C, `. H* k1 o0 q' I: u( T
        {
3 v; R0 i# `& {! a& @            i=0;
' }( p) q& {+ P( ~( q) X. q- t) h3 h( r2 w            j++;+ g, X; T" k/ n6 t- q% p
        }
& ~* @  k. t9 |        */& [; _* [/ W, x. U2 C* M, {7 T

+ C* m$ l/ J: O7 [4 X$ f* a       asm(" nop");
. [3 b9 C* h2 x% {: s# B; s1 c! c7 r0 t0 [' B+ v0 ~3 n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);  T- h& _# o0 J5 p
    }
0 X9 R  d7 ~4 X- W$ ?' t: F3 z! |: h
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 y' u3 B. }! t  C    //UARTprintf( "i=%d\n",i);
0 g! n6 s! ]) Q    //UARTprintf( "j=%d\n",j);
5 P/ H& E% h$ E: `* y  U( d    UARTPuts("Data mismatch in buffers.\n",-2);8 g3 j' X) L8 |
    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 [( l  E0 R$ X5 K: c; d& d    {
; Z' ^+ J8 i5 t0 k1 Q        for (i = 0; i<upp_frame_size; i++)
/ Z$ b8 [* ~6 j1 `  [& E  ]        {
) b) c$ I3 a# j% N            if (upp_buffer_a != upp_buffer_b)$ Q' l8 S& `, N: g  @+ ~3 F, N
            {" K& c( v* E# g
                upp_error_count++;
) [5 W! ~; \8 T            }
) Y! ~% {; L, p" ^  T% f$ {' r        }
9 p( Y. C# I0 j. Y1 |    }
# s% j5 B  e5 _) u( `! a' m0 m& `
    /* 报告通信结果*/
. m+ j% |9 h3 X    if(upp_error_count != 0)
; C; Y9 }6 H( v+ r        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' s6 o5 `  L! C    else" U+ C( T# Z+ T6 [8 y( X4 k
        UARTPuts("uPP transfers complete!\n",-2);# s. J/ J  O, H
1 M7 a: s+ F. D- [. l$ ~. R& _
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: J( d2 \' L1 z- z  M; l) I    UARTGets(ch,2);# d3 N4 l1 M+ j9 b* \& L
    UARTPuts("\n", -2);
) D% Y1 K- a; k1 ^6 p$ S7 p8 s: I' Z" s; o5 t1 I
    if(ch[0] == 'y')
; Z& f9 C/ y4 N: X    {' j3 ~; K; |* f% k- j8 q
        /*打印全部读到的数据*/: w# V5 [9 e5 Y7 o4 z
        for(i=0; i<upp_frame_size; )1 w! z$ \* O7 d) }6 q6 i
        {
6 L3 J7 d7 Q& K- O& G9 _+ U            for(j=0; j<5; j++)' h+ H, C2 g* x/ M) f1 ]# N
            {7 b8 ?8 w  ?% P( `+ \
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( d) Q2 A  @3 N" s. m$ J: [. R                i++;5 n6 `+ ~' ~, }2 l* |" E
                //if(i >= 4096)
4 `* `1 D0 h: w" h( B                //    break;6 n7 n  R$ Z8 h9 b- d2 W4 [
6 }# ?7 ^5 a0 ]! M) |9 T
            }3 M8 Q; b/ w, h5 }6 x4 J
            UARTPuts("\n",-2);5 W2 y9 v; z& \! N/ x
        }! k( t9 w, u/ J; g3 h
    }
8 }6 I( h4 [9 \8 ]  \1 J- @- p& j/ H! @8 K; C) c% H
}

- N. ~- B5 e& C* k/ x
! ~4 l4 O# F; g+ z% \6 E

0 f0 j4 k5 ], g4 g, p) {
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。0 H1 A; z! F$ d

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) Y, ~& h, z( x% C





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