嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- k2 L, j+ L+ x3 `" X" ~6 X6 M
Void UPP_TASK(Void)
, w6 b6 ?6 |( V' {{
5 l+ V9 I+ K0 O: ?
/ l+ f5 ?+ x) F( g/ l/ z4 B    int i,j,k,target_int_count=2;
9 F6 h# c8 {4 a- u3 D+ T) `    char ch[2];
+ p3 b* K1 W1 R/ g8 e/ A" v! c; l& N" b, A# u6 l
# K: [7 }; ]! Y$ K

7 j7 |/ r  s6 x! a9 F    upp_interrupt_count  = 0;& A5 v* ~. l5 ~1 A, R
    upp_error_count = 0;, N9 u7 i: b& E- E

; t3 s7 u5 J1 |" ~    UARTPuts("\tResetting uPP buffers...\r\n",-2);
! E! |$ m; }5 C) t( @4 e5 b$ Q    // Initialize data buffers/ G4 I3 {$ ]$ a: }7 }' j
    for (i = 0; i < upp_frame_size; i++). C; w; u& Y/ ]* r
    {% u7 d. B8 l8 ^- `( F
       upp_buffer_b =i;
2 \8 q4 v+ P! ^6 P( h       upp_buffer_a = 0xDEAD;9 F7 j, r1 `: @% I0 e
    }3 F8 W( Q# h3 t% g9 S0 U* U- u1 E
7 [" \+ y0 n# ?: |- J- x: x2 J
    //for(i=0;i<1024;i++)
7 |; h' ]  b! A8 `% ?. f6 `' R    //    temp=0;
" x- y' S, O+ C# B- H! M5 ]2 j3 Y: r& n9 q: T
    //UPPReset();
7 Z, {0 P2 Y  a5 l    /*启动UPP DMA传输*/
! v& M( C( ]  A' S    UARTPuts("upp_prog_dma_i\n",-2);# [7 k& _2 G  d: C
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" H0 ]/ Z$ A; f7 W) q    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ t$ Z8 S+ P6 u6 f8 u" w    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" Y. n/ e7 N, ~
5 v4 n0 h+ G# s$ A7 h9 ^    UARTPuts("upp_prog_dma_i\n",-2);* ^* f; o# Q6 }- K& @2 \* L
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# s, j+ c) L+ K: _! P6 _1 X0 ^
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ ?, k( ]+ P% S1 ?2 U
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% e& c) p6 r$ Z# Z/ I5 W7 z" e
% z" F' M) K: W2 b/ _. J& b2 I& Z8 t7 V- X
    /*等待UPP传输完毕*/: ?  A5 i4 T4 j, s7 w; K0 y+ e
    //i=0;+ _- |' I* Z; [6 L4 u6 w
    //j=0;- D' P# B; R, s/ t5 n
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' i& X% R" y5 ^8 a
    {
8 D2 M" P* z! j1 R2 t* W        /*  测试UPP传输的同时操作普通DDR数据( x! Z( {5 J) X' f/ S8 M
        temp=i;! |. X1 E9 U7 {- w; _; V& R
        i++;
8 _# k7 I0 ~3 b1 o) u+ @2 V0 A        if(i==1024)1 I) G, x& Q& i9 R+ F/ y: `, o2 [( w
        {
' E0 W$ {$ v" L# U0 t" Q: X) `            i=0;- C5 H5 o1 A* [" f9 Z
            j++;0 O% e. Y! p3 h6 H" D5 k) D( ~% |+ M9 [
        }
. ]; @+ R5 C1 y+ f5 Q0 s        */
$ D, H. ?4 x: v8 ~! y( i3 S+ _, b) G5 a0 j( o
       asm(" nop");8 x7 I: B) |8 C. f2 `8 n4 _
' d/ f8 e$ @1 e, l& F( @# X
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; R9 I! m( ?) W2 d8 ]" [% ~$ T/ n    }) |. R* U& D/ }7 L# _% m
; R2 ?* y* f) t$ c( ]/ K5 \
    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 F& N' b+ V) E
    //UARTprintf( "i=%d\n",i);8 e# }, W* o0 M. ?  G; V- q, q
    //UARTprintf( "j=%d\n",j);
8 X. n- G1 J6 Y, n* p' F* m- y    UARTPuts("Data mismatch in buffers.\n",-2);
" e" ]/ _2 V+ N+ H% R, b; S    if (upp_interrupt_count == 2 && upp_error_count == 0)" H1 v' ~; X0 ^0 C/ N5 S9 L
    {4 Z8 a9 S! e* e7 x: ^! n2 M
        for (i = 0; i<upp_frame_size; i++)! O( b; E4 j1 n
        {
7 Z& F1 O. p( [& z* u            if (upp_buffer_a != upp_buffer_b)
- k  Q! A$ u  u% F6 W$ \- ?            {
6 R; w+ z& Q. N5 r+ Z; e/ h                upp_error_count++;
" i7 c( H$ S6 E. F$ R            }
+ D& M9 Z2 Z9 _; _) M0 j9 E        }
4 e' W  E/ _. e! ]    }' ~* S8 C! g/ }

5 v( O% Q! P9 ^    /* 报告通信结果*/( m% @* S( d5 V- F6 |! E' B8 }
    if(upp_error_count != 0)! D/ {5 Q0 [  T$ @  E8 `/ O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);. d, Y7 U: m, B3 p  c
    else
8 s; `0 g0 t- g, j5 e# c5 s/ }        UARTPuts("uPP transfers complete!\n",-2);1 E) U: R. B! A/ t: t, H3 a

, q* B1 n- d; ]    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& G' Y( f% d/ x4 }/ g    UARTGets(ch,2);
1 r: e6 R8 s# M, ~/ v2 a1 N  i( m    UARTPuts("\n", -2);+ @3 J; h: _. N' r" Q; {1 ?6 \

# t: r3 K' l/ u" l    if(ch[0] == 'y')/ w. J& c6 k, e  T
    {
2 J" F& w" g$ [+ K        /*打印全部读到的数据*/
  d$ j+ [4 C5 k; ~. s5 q% x        for(i=0; i<upp_frame_size; )
% Y- e( ~. f+ ?" t$ a6 A6 N6 Z        {
0 E9 F5 F, `9 k! i3 c% d2 n2 Z            for(j=0; j<5; j++)! A% a! K+ q% C# E# z
            {3 k" |' }; s5 l1 i8 }& B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
! V* W5 K, B, g4 o5 B9 \                i++;( M9 J7 {6 u/ q% y. A$ c; i
                //if(i >= 4096)
# ?7 k' t( S' j! A6 I9 E                //    break;
! u* y( d* d1 B( e  B2 {
* `  @4 g: }4 g5 [8 x' i) B* u            }  ^0 X) J( p/ |& b
            UARTPuts("\n",-2);
2 t6 x  E7 h# Y, i  r4 b        }1 _4 Q) q0 X# C2 [& s
    }
7 ~* m2 L" \: t, Q# ?3 y0 Y
$ w, v. B& X: c9 F7 I' C}

/ [. i* j- s* A; ?0 ?* {6 n

4 |/ b- c8 f, ?0 C! B) P( C$ ?% I6 q

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 d9 w) r4 D6 u, ~9 o
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。' |. @! z* M3 v4 R- g4 I





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