嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 V# \7 a% Q+ l7 W  K- Q
Void UPP_TASK(Void)
7 G* y0 J1 L- }$ |0 [{: K( Z% ~2 ]9 o# a; M/ V: {" A

% z3 q: W# b3 \$ m2 O    int i,j,k,target_int_count=2;/ t/ a1 C7 O( ~# U
    char ch[2];0 Y+ g3 r) e2 o9 Q: K9 l7 d9 i

" H; s+ e7 [) v2 ?' j' Y- l: D1 n+ O

" h# ?  Y7 B3 V' F+ l7 z    upp_interrupt_count  = 0;" G6 w" i' D: ~$ D
    upp_error_count = 0;
1 o) c8 ]5 B: c* e- F5 M" e  R& t0 L" ^' r3 w
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 g1 r# _$ w: B6 U7 a+ j7 R    // Initialize data buffers+ E5 l5 t+ G2 v& s4 C5 s5 ^
    for (i = 0; i < upp_frame_size; i++)$ C  I; {1 h$ K6 B. }
    {
% C0 z8 ^; [! m8 y/ L# s, e       upp_buffer_b =i;
3 \: @! L  }) z) z( Q; {* J       upp_buffer_a = 0xDEAD;) I9 |; m! i1 X" A; d0 ]& q
    }: g5 x, @! B9 P
8 P; ^' E5 w& |" Z7 ^* p
    //for(i=0;i<1024;i++)  L$ f' A% |# L! {
    //    temp=0;
% o; L- m+ @5 G7 Y* z1 |7 R9 `
0 H+ D% }# C$ l" p& A1 E/ m    //UPPReset();7 F( H2 ?5 @1 y3 F- Q
    /*启动UPP DMA传输*/* Y! J" A6 L+ B: q' S
    UARTPuts("upp_prog_dma_i\n",-2);
# Z' `, l4 A, ^# l, e* \/ P- {    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- _, l( W1 Q/ `' Q' O    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 a; t# S. ?3 r% ^2 y% K+ @
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);( ?- R# k6 n. K; ]

& T+ Z* M2 {+ m) @4 e$ K$ j* N    UARTPuts("upp_prog_dma_i\n",-2);& f: t; I1 r$ F; Y& M5 f* `& }! [
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! d* j% y! u. s7 h& t$ t
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" d' Z. G( B# T2 c
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( H4 [, v' h  c' B+ F. o2 c/ t3 h+ |  S! A2 G/ M+ _( J
    /*等待UPP传输完毕*/
) r# w: G6 [9 D    //i=0;/ x/ A% f  }' z  |' W2 Z6 T
    //j=0;
. ^& E( x3 H- Y( N& b. f6 U3 [    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 g" f6 N; L: k- }- |2 o+ Q    {2 @! \) X' Q( X8 M1 K+ F$ q; |
        /*  测试UPP传输的同时操作普通DDR数据3 @1 ]% s* q: l+ a
        temp=i;
. @7 Q+ F8 s  C; V9 b) x, b        i++;6 \4 e  F& ^2 T- h3 Y
        if(i==1024)! T# [# A2 i, d8 `
        {1 H. b3 t, B* j. p: N: ]$ l
            i=0;$ W6 ?8 {" E( d- `
            j++;
( L* |3 q- m2 e. B* ~, j. |        }
* h/ C- {' @; `& }# V3 k        */- E. V! V' m1 e$ f0 P0 V
6 P" v- y6 a3 R4 v
       asm(" nop");
% n: I. m, M! L# Z
0 t, f( h, n. z/ `3 S2 [) ^% f9 L$ r       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: d+ }3 v) `$ B) k, f
    }8 Y1 e6 {8 j7 ^1 D, O& r# S4 o, y
% Y2 t( u0 v$ h8 e/ J& U6 a! M
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* c& O  @) X, s& w" }* Y8 l    //UARTprintf( "i=%d\n",i);
. d4 l0 O7 r. }8 {( f. d    //UARTprintf( "j=%d\n",j);( b( ]- T# v) G  D7 S# Q1 x. R
    UARTPuts("Data mismatch in buffers.\n",-2);
4 B- l! O! G" u. C' r6 D    if (upp_interrupt_count == 2 && upp_error_count == 0)
' S  T8 V# H5 M7 R% H/ N+ L2 |9 r: q! K    {% U! Q: @0 c( B6 K# J" h
        for (i = 0; i<upp_frame_size; i++)
( V# C! T% P8 C" G# j        {
6 {" ^* A; o* H2 m/ V            if (upp_buffer_a != upp_buffer_b)
2 c: ~$ X: Z' Y1 j/ Z            {
; D& C) N- d0 @2 e. |: M, w0 f. g                upp_error_count++;  M# U; @& S2 |3 w
            }
/ z9 d; O3 w/ F' A+ I5 i% H1 J! J! c        }7 W6 k7 e) W$ }. T  H% e
    }$ i' `8 E& }4 T- T7 P# H: G

4 N! B+ g: A8 p    /* 报告通信结果*/! t& q/ Z  y4 ], m$ n  h7 f
    if(upp_error_count != 0)  w) {& `9 j: n- j( N7 k3 V
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 U( l5 `0 ~1 I) g) p: H  w    else
+ }/ G1 d' `' [, Y6 w5 H        UARTPuts("uPP transfers complete!\n",-2);% `* e3 v3 Z6 d1 G7 z9 Q) v
# @4 ?! w1 a/ G' K# r
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);! v) X  t/ B" h9 m3 u, K1 I* R
    UARTGets(ch,2);
" o4 }) N* @+ O/ F( c    UARTPuts("\n", -2);7 z' d- v! ?* |, w# W

  i( y/ B' ^  z% f    if(ch[0] == 'y')6 D% c8 v3 i) q; T2 m
    {
+ \5 {" U/ R" X. W        /*打印全部读到的数据*/
" ~/ |& O2 h, i+ ]7 z3 T, X1 ~        for(i=0; i<upp_frame_size; ): s2 u! `9 l. a. j+ B' t; V* M
        {; a, u# P2 q4 _
            for(j=0; j<5; j++)
2 G4 X9 y5 t6 ]; A/ h$ C2 i) a8 t& N            {
8 Y1 _  I( Y, N% \4 t                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* c# G( p8 _5 j
                i++;
% ~9 O$ Q3 \; \7 c$ q6 U8 V                //if(i >= 4096)
- b6 C0 C9 Z' M4 w4 d  {+ s                //    break;, J, f7 S  K& l& I

7 S' h0 J9 `- @            }" N- t* V6 u& q3 z
            UARTPuts("\n",-2);
  X( }& F* w3 r) u  t" F        }, H5 v7 p+ i6 l, |' }! O5 V
    }
. p# }) h8 F0 x& S6 ]. C( T
9 ^. p0 f) a& ]- r) B# U}

9 ^4 }8 L. ~3 t- z

. I# ]0 f) z& ]
( w, s+ y6 R0 X: T0 x9 k  H
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。' O5 b$ p+ R- u+ v4 d* G

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。2 x) S/ X5 T' N) e4 p4 X" w8 g





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