嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' Z- Z/ {: _+ m) |. C% b3 t
Void UPP_TASK(Void)
- C  N2 ?8 a7 Q- f  ?2 ~. @, t{) C, D! K; Q9 e- Q% I+ L  j( p

1 ~$ Y* h3 r, x! B5 P2 P    int i,j,k,target_int_count=2;
; J$ v# t: U; M0 I1 v, q    char ch[2];* W, Z" ]) J4 E, D
* b& b3 S% e  a) R

6 S. n* ^/ _/ R( w1 k, L% j5 p/ Z
7 [$ h3 m9 x" H' A6 c    upp_interrupt_count  = 0;8 x5 J- U: j3 h3 J! k9 r- R
    upp_error_count = 0;
9 w- a1 {. ^! _! a1 y$ u/ B8 P' A8 Z+ l# E/ O$ H! F" A
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
- O3 Z8 b# b5 _0 Q1 o0 l1 V6 n# s    // Initialize data buffers
* |2 W& K/ F9 c: K! U. E6 y4 A" f0 R# \    for (i = 0; i < upp_frame_size; i++)0 ?" A- U; B0 X  w+ }
    {  B$ ^, ?2 {4 h  w/ ~7 c  ?. D; h" B
       upp_buffer_b =i;$ u5 c, L' t0 m' O% r1 t) h8 _- Z
       upp_buffer_a = 0xDEAD;, k+ i0 J2 X4 I3 e3 K4 C
    }$ s! J; P+ @4 A8 T& I1 ~
0 R3 H% r% t/ T% X4 a  n% A) `
    //for(i=0;i<1024;i++)
1 q1 ^' ^5 w: k    //    temp=0;
7 i. O. N' E6 ?6 h7 W% v7 N+ a/ C% q2 z/ x. u+ Y5 K
    //UPPReset();
. s; \6 J  v- M& D# S" e7 J2 ]    /*启动UPP DMA传输*/
3 n) g/ m1 {( ^) q" W) X! @    UARTPuts("upp_prog_dma_i\n",-2);
' ^' Y! S. U3 V' s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 J+ J0 E. _- v9 v7 o+ i    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 b* {5 H# |/ I* N6 X, c    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& h6 C3 y# X! n7 ^2 F) p+ u7 g$ F
1 H' N' K/ P1 ^0 q
    UARTPuts("upp_prog_dma_i\n",-2);' l: q" y3 e" Q3 L
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  B- j0 r, M- x  S; B! S
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 i- M/ Z# U; M' j* d
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: Y5 C( c- X7 o& [$ f' Z
6 @# I- _& d' B  q+ o
    /*等待UPP传输完毕*/
+ E) h; t$ g% t1 n: e    //i=0;* o# N7 s" |0 e! H: b
    //j=0;
+ W' d( @( \6 A    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, {) f! m. V7 w4 v0 Q9 }    {
, p) Y: T/ N0 o) d3 h        /*  测试UPP传输的同时操作普通DDR数据: W/ o8 z2 H$ _; S2 M/ a/ A0 O
        temp=i;$ r; n2 H  ?* f5 s' j& {2 T
        i++;
7 D6 F# L  q  r/ O% q; J+ B' S) f        if(i==1024)4 m  p5 x7 h! L. X
        {! E2 b9 |- F) T; x' V( f. T. Y" ?
            i=0;
# M+ ?: F8 c! C% [- \% Y9 E8 \            j++;
: x" [( P5 P7 N        }, m# q3 _$ y! c+ D, N9 j' F8 l
        */
1 A6 u9 z7 N+ M% {# N0 G! d
0 e# F) O0 m+ W& v! V  \       asm(" nop");
. Z. ^1 v0 z. k4 [. c6 @6 L/ L5 D
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 H8 V1 {( u) q7 G4 y1 S6 k$ V
    }
2 ~7 N! C* }! v9 o) R, S% l/ L2 R3 g3 m2 {
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( J! h# q1 x0 |8 N, e( t
    //UARTprintf( "i=%d\n",i);
# W/ N/ ^9 L4 V    //UARTprintf( "j=%d\n",j);' L8 Y' k  M+ x) K, R/ Q
    UARTPuts("Data mismatch in buffers.\n",-2);
6 D& T! x. p2 P" _; d    if (upp_interrupt_count == 2 && upp_error_count == 0)1 v. H# h* e% u4 E; j$ y
    {4 B5 h  A6 G0 m. f4 M& W/ v
        for (i = 0; i<upp_frame_size; i++); C: K" S! v7 g) z1 n
        {+ B0 r7 c0 {7 Y% T& B. E( \
            if (upp_buffer_a != upp_buffer_b)
+ |# O6 k0 @' g- i0 A7 r9 H4 K            {$ ^+ r/ K' F+ q. z
                upp_error_count++;8 s& c, p- }5 b1 i
            }
: Y( I) s9 Z* _3 p9 r        }9 z- N, b, R7 Z/ w/ A1 G& P
    }
6 h: q6 B, V8 O8 Y1 u7 A- S7 {
" j5 k; ]- b0 `5 }  w' U# [    /* 报告通信结果*/
$ Q8 t2 s4 F3 e0 C& n3 G" E  }    if(upp_error_count != 0)
* b1 X& ?' b0 n- @- y        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 T" k! |( c5 x- w5 h8 [    else( l0 X5 R# Z& m2 b# v3 e% q  P" A
        UARTPuts("uPP transfers complete!\n",-2);
5 r3 ]* M7 m( r/ k4 c7 A2 S8 I! d1 ^: v& Q' v+ Y7 f6 S4 t! z, R
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 T' ~% l0 T: m  x2 g9 P1 ~    UARTGets(ch,2);
9 s% E+ n( d% B# k    UARTPuts("\n", -2);9 V0 o; P0 P+ {

  {2 u- m/ V6 Q    if(ch[0] == 'y')
+ T6 `4 N  u4 ?6 n, o    {6 `/ f) G/ A' P3 S! c0 G
        /*打印全部读到的数据*/+ `8 ^" W( @+ ~
        for(i=0; i<upp_frame_size; )* b* X  G  M/ P+ ?. M: O; Z- V
        {
; {7 y* m+ T/ w3 C/ F; Q4 p2 s3 n            for(j=0; j<5; j++)
2 z9 U+ _9 }5 J: N            {
0 ?+ h( V& W6 t" k5 A8 s                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ O# \8 p% |4 i& `
                i++;" i$ Z( p2 ]9 X6 m5 E
                //if(i >= 4096)
) t+ i7 ]0 @# g* ^, h& w                //    break;- X6 u4 t! i( {$ z& t$ `/ p+ ?

" ]3 F/ y( t- B- i* T            }" a. s8 Z! |3 U$ a
            UARTPuts("\n",-2);
6 s2 l" C1 u. `& X1 ~6 u) O: H        }
/ w0 O; p% J& b6 v    }# z0 U( b! v7 b. ?0 w( _" w
* `$ ]+ q  P1 _+ o% _4 q: i
}

/ F/ |0 N6 B" ^5 a/ T
6 t5 Y; q' j6 F6 e, ~

; W6 Z- v" W$ W' i) ~
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# K8 w& d" H* J9 t

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# T  s' l& a" G& L. ]1 H




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