嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& ?# Z. q7 T, V5 t! \4 ^5 \
Void UPP_TASK(Void)
# d. k0 u  o# Q/ n  c{6 U* o- N  Y; a. M( D

- a( u& c2 B2 C' I6 s+ R3 @    int i,j,k,target_int_count=2;# |( S# g6 r; G" \( ~
    char ch[2];% k' B0 S4 a0 @- A' }0 X. v+ X

; H- \: k6 ~3 a8 B" `1 K' {1 I5 w

' t( @/ \( A3 M+ w$ a    upp_interrupt_count  = 0;
1 N/ }2 U: p+ d/ ]/ u/ i' p9 b    upp_error_count = 0;8 r$ l% h6 c+ A% m% A
7 A9 `6 f! O6 _# ~& n
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 S5 N  M) z; o9 C! Y, ?    // Initialize data buffers( J) {9 Q: t/ l8 Z1 f
    for (i = 0; i < upp_frame_size; i++)
2 y0 Z1 b; r. H- U! c' E$ G    {6 k2 I9 Z" y+ y$ c! t$ W
       upp_buffer_b =i;9 A+ k4 ]& M! ~- I" g1 x1 K% `; }
       upp_buffer_a = 0xDEAD;" {# ]$ z8 k9 m; @; a3 S" a' l
    }
: ]* M0 }5 {" M3 N. B$ N- R% B2 U- k, o2 W  G. F8 \
    //for(i=0;i<1024;i++)  c9 U4 ]/ ]5 d% Y/ G4 S
    //    temp=0;9 G( G) W# ^0 x& L5 y) Q. z

8 Y9 [$ w. v3 g+ s- S    //UPPReset();
# Z/ W  y% u6 P7 u1 G/ R: R1 |; v4 ^    /*启动UPP DMA传输*// S, S" F8 G0 B, N( w$ k
    UARTPuts("upp_prog_dma_i\n",-2);  G3 n3 v: \% l* V% g
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 W" _1 b# J* Q4 }* S  F3 _$ i# ]% e5 G
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; H/ U. f0 t1 s6 x) T. b) A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; r8 Q& X3 d& |+ f& e: }1 e! s# F7 \* H1 B; c! U2 t4 _) ^3 \
    UARTPuts("upp_prog_dma_i\n",-2);
. U, i2 `# h) Q4 S" ^& u6 I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- E, d) ?0 _8 D3 V% \: e: d+ N    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 G) m( n) Q& b$ [' [: E8 p    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ M$ E  b1 c) h1 s& F. ~
* Z4 @8 t, K; z( p" ^) j  M: q
    /*等待UPP传输完毕*/
! ~2 x2 B/ T" G- U  u& @    //i=0;5 u. }. O2 I! k: Y1 d
    //j=0;
( Z# `7 |) {: I% E0 h4 T    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% c( Y, r* R4 [. F    {- w& [5 t7 C0 _3 w' O8 s
        /*  测试UPP传输的同时操作普通DDR数据
! G  O+ i1 B' ], y% L- m1 K        temp=i;; R# j. \1 e5 `$ b* g' t
        i++;
( J  T1 G& U- z7 y$ L/ ^+ M7 h        if(i==1024)
4 b" a" Z1 p5 B& K( Q        {
2 |) A* `1 ^8 V            i=0;& I7 ]  q' g& X; A+ R& e$ p) {* D
            j++;
9 K& U2 r( E5 K% B1 X6 [) U        }* u* Y: N" H* F' e- u! _2 d
        */
& y* {4 ~- P4 ~6 b* b9 A
8 T" L, T9 F& V1 ^       asm(" nop");
! U1 ]" \9 x. H9 p
7 K! X# G' [8 ~/ R1 V$ a3 J: i       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);5 m) z; z  l1 ~. a+ K; }
    }
- e% P% S# |* J3 w
$ `1 a0 s  ~  r  i' l4 f. G* |) y    /*检查UPP传输的数据是否正确 (loopback modes only)*// n) g: V, l4 W5 d9 Z% T
    //UARTprintf( "i=%d\n",i);
7 T: i$ e7 x' W6 V. m    //UARTprintf( "j=%d\n",j);$ [" @% Y6 P7 s& E/ d4 F
    UARTPuts("Data mismatch in buffers.\n",-2);( p: K2 u; H+ }1 q1 D4 V3 u  o3 ]
    if (upp_interrupt_count == 2 && upp_error_count == 0)' V0 x& C% F& f; h) U
    {
  o% \6 K' ?9 m8 x' [* {  N        for (i = 0; i<upp_frame_size; i++)  _+ m( `+ M( L
        {
/ V* {( h2 `  ^$ i6 X            if (upp_buffer_a != upp_buffer_b): ?# ?$ e$ l" A8 `( l2 i
            {
' {: u6 L( b: m" r- a, H                upp_error_count++;
3 s# l) Z6 Q, U            }
- c8 f# G% A, o# F& N        }
( N+ z# q6 q+ w9 r& o    }5 t  v8 D% ^* n

, _! h& Y5 _: p' ]% ?    /* 报告通信结果*/
4 C! g7 e6 g6 c" t' _  P/ y    if(upp_error_count != 0)3 G# i& {) s& X% K6 q& I4 {: B
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
. ]. Q7 O/ V7 h! m0 F; I6 e+ {    else8 X7 h7 |3 H) h+ E
        UARTPuts("uPP transfers complete!\n",-2);
- r4 k0 d3 S. o3 u- p  M3 Q2 }$ T
) y. a* W: s% y) f4 d    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ s( {( y) B3 ~! N. u) R    UARTGets(ch,2);. \- ]4 Y0 }) w
    UARTPuts("\n", -2);5 |- ^. B2 ~# ~9 B/ c- d% S4 |

. g' H* M- t! I$ X    if(ch[0] == 'y')+ ~0 m( _9 ]4 K/ s. W% M
    {
0 L" A3 N4 @& T  M. J        /*打印全部读到的数据*/
7 K7 S2 L# T6 O( Q% h        for(i=0; i<upp_frame_size; )4 x8 ]' o7 ?: a8 V  Y* Z
        {8 c+ O& W7 u* ~* F, Q: K2 r
            for(j=0; j<5; j++)
+ o6 N8 [# M- w6 ^- U            {1 u) P% C) h- Z$ P5 X! ?7 ~. b
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 a. E, q; @. d5 }& O6 x% l
                i++;8 x# K: G6 p. L9 A
                //if(i >= 4096)# N& _, m/ L  I1 B; |. \# |' M' `1 W! B
                //    break;
( h% I0 N. Y* @) x
3 D* Y$ |4 W2 T            }
/ ~$ O4 P0 N/ F4 K0 u            UARTPuts("\n",-2);- y/ G3 L3 ]4 J" N4 y3 e
        }
+ b# @8 a& B2 Z    }+ d, ]2 _9 _- B! m9 q4 Z! ]
: a+ s& k9 M5 Y. d5 S, r
}
0 x, l- f- M& y) [" Q- |
. ^7 S2 C% m2 U7 s! x9 _3 B2 k7 K9 D

6 U  n+ T4 y. X) H% @! Z8 |1 t
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) Y+ d! V) x, l9 P: I
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 }% c- k) b& g9 Q0 G5 f. V! j





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