嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ J6 v! F' q4 O; u& l
Void UPP_TASK(Void)
9 Q% x8 Y8 h: D  t0 |. {{
& L8 z  r- M# M# W7 J( `$ Q/ y6 Z, q+ F
    int i,j,k,target_int_count=2;- l. d) l7 x9 r% C
    char ch[2];
1 e( E" [9 K! v, i$ `% g( ?- F% n% j- o0 ?& _. C2 Y

% n! S$ x1 S9 r7 M1 z* l) K1 {! x- A/ k( P% i( J$ D
    upp_interrupt_count  = 0;
0 z) s" _: t; h0 U( |2 v    upp_error_count = 0;
, V! A" R+ }$ X  F! K- S9 X  V: V
    UARTPuts("\tResetting uPP buffers...\r\n",-2);; ?! F$ N  k1 V7 D2 U: ~5 D
    // Initialize data buffers+ N) j  r" K' k% o- I& D) u3 }+ S
    for (i = 0; i < upp_frame_size; i++)
' T) E; z# R8 a& S$ \/ g8 i- ^    {
" e# ~) Z3 P4 b( n4 w       upp_buffer_b =i;" Q" o% A9 r  a6 W. F, n
       upp_buffer_a = 0xDEAD;  R: ^$ G- Z  j0 [+ P
    }
8 l* [" e. g; x) _+ p( ^8 G: D+ p3 i3 _6 r2 r
    //for(i=0;i<1024;i++)1 U4 \/ r# Z6 y7 U, R
    //    temp=0;
3 q1 ], J, S& ^9 P
- }0 P) G+ N  s) ~1 j" a( e    //UPPReset();
/ H( r% K) y3 K3 r    /*启动UPP DMA传输*/* i, }8 M1 y) n! f2 N- b, n& L
    UARTPuts("upp_prog_dma_i\n",-2);9 v5 a  `' p& u+ e
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( [! x# t- ]) [" T    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: ^* X- z1 G, i/ z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);( E! M0 O4 ?4 L! k6 q' w* n+ B, n
6 B6 l, q& y2 \# e
    UARTPuts("upp_prog_dma_i\n",-2);2 k9 |9 Y+ C( z$ K
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ I" ~: G; N8 P8 L, g    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: W0 i; `/ m- D    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);4 z1 z! B: I. ^. ^. d  N# [6 j/ L

; F. r' W+ q( p1 ]  J5 H; d    /*等待UPP传输完毕*/  I8 l5 W2 C% o+ r& e5 ^
    //i=0;
+ l: c, i% V7 Y/ [4 ~7 E0 ?    //j=0;" _  r0 Z6 n5 F6 u/ @
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)& o5 S8 X4 i; H, U
    {
1 z  ~- f9 B4 C6 ~2 L9 t' [        /*  测试UPP传输的同时操作普通DDR数据4 U. f6 n: T) Y' _/ c- f
        temp=i;
6 `( U9 S% ]7 Y# n* V) {3 U        i++;
& Q" K; I- {1 q& e/ v; S0 l- E        if(i==1024)
  |2 b: w8 z6 z; q        {
2 ^3 ^+ E- E. K4 k            i=0;- [& j* ]3 |, ~5 h( m/ |
            j++;
7 {  \* C% {$ d+ w+ |4 o! G        }
# h5 S* q5 ~' t% \; N6 N        */& M: m+ c! i  ~+ l* D1 Z
$ F* s3 r; p4 o! D
       asm(" nop");: ~6 Z/ A5 ]0 C

" w, q" g  i& ^3 Y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" R) M# P' y1 W3 b' N4 b" `
    }
' ^" j  D) Q1 R0 P& E, J# O: |# r5 g. o- X6 o
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* I: i3 M0 q- K; Y. U/ _    //UARTprintf( "i=%d\n",i);
9 J' h6 ?- R5 n    //UARTprintf( "j=%d\n",j);5 g$ c/ M# R/ f5 x2 @0 p5 K
    UARTPuts("Data mismatch in buffers.\n",-2);# z0 t. c( M: L' s' j$ Z5 f
    if (upp_interrupt_count == 2 && upp_error_count == 0)7 J" u  G8 }3 S2 V
    {" F! t+ G$ ~* k
        for (i = 0; i<upp_frame_size; i++)9 C6 i$ n" {6 s# c  t+ [
        {' {* Y. ?$ h$ U, ~2 S
            if (upp_buffer_a != upp_buffer_b)* @& L) _, P1 _1 f/ u
            {* b0 A$ G# \+ U! R$ O0 c3 d0 _6 I
                upp_error_count++;
. G" ^/ S* Q) n            }
/ s) ~" P+ V( d" o. |) o+ {4 {! S        }  Y8 X- R! m& s
    }
5 n8 v- x$ V" s- J4 Q' `: U2 ~! T' l
    /* 报告通信结果*/
; {6 d- p- \# o! Y. J) a* Q    if(upp_error_count != 0)
" ^" I6 @) i. p& H        UARTprintf( "upp_error_count=%d\n",upp_error_count);% m4 H2 Y$ U+ r  ^% I% h' u
    else
' m( }: ]( I% a+ t0 d. H        UARTPuts("uPP transfers complete!\n",-2);, _1 C/ u* z% P% w

, o5 w1 P! a, j8 l, j, l1 A: g    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 q- t" u: [0 B) f    UARTGets(ch,2);
- ~: `% ?7 N+ o9 J% X7 i/ p: t) @9 e    UARTPuts("\n", -2);
3 h6 Z# _) _5 v; k" q8 J9 G; v! w3 S: D
    if(ch[0] == 'y')9 M' Y! @. O( b7 ?1 p
    {
/ u( D8 v' }7 ~& X7 F7 }; @6 j% e4 s- a        /*打印全部读到的数据*/, O) O, U7 T9 i% M; g3 B
        for(i=0; i<upp_frame_size; )
! o0 A; v2 u$ z2 f* q) n; u. U( e        {
7 g0 X! }! K( Y            for(j=0; j<5; j++)
3 |" f  D5 c/ W( B- K            {7 K" S  G8 x+ u  V" i
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
8 I$ `0 l. A# V                i++;+ X* G- a# D6 |# c7 |9 k, L/ f% I& K
                //if(i >= 4096)2 @' K  l- {% l( s- V; ~
                //    break;
5 ^# \$ H9 K, H: e2 [7 N
4 k' a8 v0 g0 J9 O9 C            }
7 }- {$ [& Q0 B. I1 j: i. z            UARTPuts("\n",-2);3 U% {* I' d& `; H# X2 S
        }
4 o( r' @# U5 z/ w. P    }0 l+ a5 l! }7 L* r4 R, `

7 q2 n  P# n+ R' y6 v# \}
; u, |+ G7 g3 j# k" n- M! j& B6 E

9 W. a/ R& ?5 M9 F
- H4 I7 ~$ N: y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。& k1 @. Q* u% n( p  `' ?

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- l6 K+ G1 i* O/ j( J& i




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