嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?6 a/ m0 }7 a, B
Void UPP_TASK(Void)
* v/ t8 t& K' [( O/ |& v/ Y9 _: k{
( n0 X! B5 Q5 G
: s4 K) a. k0 _0 m* y) h* H    int i,j,k,target_int_count=2;& ]6 A( P8 _* R; `) j' s, b4 V' u3 D
    char ch[2];; M' Y$ y& R7 I
! C, J" P" H9 {8 c

0 y$ x8 C. l  U1 ^* k8 ]8 C. J
% B+ }# }2 r% r* _8 J, V+ ^3 |6 w. m- ]    upp_interrupt_count  = 0;& ?4 i- |/ |# M/ z$ Y
    upp_error_count = 0;
& d; g7 l$ ?& ]8 `  w
- C0 @! h/ t9 Z4 W1 ?    UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 z4 q: N" X( U" [0 J  o! f    // Initialize data buffers! u0 U; R8 U3 T& i, z- ~" i' {
    for (i = 0; i < upp_frame_size; i++)
1 s# ~, p, v/ q' R2 [! L: o9 ?    {6 ~* A' b# j; t
       upp_buffer_b =i;: K" u$ y; Q+ O1 l
       upp_buffer_a = 0xDEAD;
' G: B' j; I0 T4 |    }6 e* Y9 ^- C; B- d( o

# F/ ]  u! d# G    //for(i=0;i<1024;i++)
6 M" i2 A4 }# F$ ^  o1 W    //    temp=0;
# \3 M- d. j& T8 G, F2 U" v' G& v' \, i
    //UPPReset();
+ `4 V2 D* |% q1 d7 s& v# r% a: a    /*启动UPP DMA传输*/7 [9 R: z6 y. n  u
    UARTPuts("upp_prog_dma_i\n",-2);
# Z# d* c) H* Y# S5 R5 z    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# F$ E' j/ T8 R" @$ g) S* N
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 K! O: }* N3 |/ M  B" c  W# \4 Z
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 ]6 j9 M  q7 O  R+ y3 ^  X9 L) d
    UARTPuts("upp_prog_dma_i\n",-2);
% d* Q  Z& t0 j  H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ b" ]/ X/ a. ]% \5 L    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ ]' w: B% n- A7 I; R
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% J9 B! c+ k% p1 i' m5 \

; w9 \6 ]$ i/ ^" \8 @& t0 y3 |    /*等待UPP传输完毕*/
; o; \0 s+ {3 q: R- |- j    //i=0;& Z# q0 d5 h4 T' Y! j
    //j=0;
" x* s( m- A& i: {    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 X. i) Z: x/ N0 j- z& r; ~$ j3 R1 }
    {" V  p  g) }5 z* Z
        /*  测试UPP传输的同时操作普通DDR数据0 r' \* B' c3 ^7 y
        temp=i;! Z; A: E' A  X) t
        i++;* }0 |0 X: M$ @# Y
        if(i==1024)
& }* t4 s& l$ A' E2 E        {6 J8 m( m- u& I! M& l
            i=0;# Q9 J- X5 X) u& Y; F! p2 o1 |* E
            j++;
; y, l( b: s# a2 q        }
9 \" K9 `+ s" }: R4 K' y8 z* x  A        */
& x/ ^3 I* J( T" @3 P. R9 n% c! W0 s$ K; M
       asm(" nop");- e- T1 F) T. X4 p
& B, J2 K4 w: B$ T: i
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);( {6 ~% B$ U4 z/ u- y. w
    }
3 z3 M2 r1 |& }! [, o5 y
. o7 z; ?, y5 j. d; j5 G    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 |4 o. P5 P& }7 P1 S# m
    //UARTprintf( "i=%d\n",i);
2 p7 l- b& I6 h) |  [/ k    //UARTprintf( "j=%d\n",j);
7 W5 n, F+ F, G8 E' [2 M    UARTPuts("Data mismatch in buffers.\n",-2);) T* Y1 w9 O( k
    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 M* Q$ [" v2 g) c2 c" V/ h    {7 U: [' T) N! \3 O2 z
        for (i = 0; i<upp_frame_size; i++)
6 m0 U, w$ X- l/ H        {
2 S! ?' E/ P: F( ~& m            if (upp_buffer_a != upp_buffer_b)
5 h' w1 {: Z+ A! }# k: ?            {4 i, O7 v# N! V3 \" h# i
                upp_error_count++;
+ F4 \2 i- e" ]5 P0 ]6 ^& m$ h6 e            }
0 t- U. |! \+ i( Y( M' Q        }
4 v! u+ b$ c. ]% S8 O3 C0 F3 {    }
0 {0 g) _7 y5 B- Z4 E" L
& D3 g. @- j' ~/ `7 A' Z    /* 报告通信结果*/
; C, d% ?0 D6 c# V5 o    if(upp_error_count != 0)
' ~% t& |5 W. O        UARTprintf( "upp_error_count=%d\n",upp_error_count);: c' z: b4 M* u' h
    else
- \7 I/ n& T" s# [        UARTPuts("uPP transfers complete!\n",-2);
" r0 ~& G1 Y/ L! g- k: e) S% A) j
" ?  w6 ]* F& R+ b8 L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" K% ~: x& E' d% `    UARTGets(ch,2);" A' u* v% L7 A* W
    UARTPuts("\n", -2);
2 \- [* }6 w: y! s- ^, p2 {+ V- h0 P8 Q" s6 F& ^) T
    if(ch[0] == 'y')
5 V. ]1 z4 ?3 {; D9 O7 W( f    {
# X( [6 P2 N7 N* Z$ \8 Y        /*打印全部读到的数据*/
2 W/ V5 `, W* \: t        for(i=0; i<upp_frame_size; )$ ]( X- ?# m+ _: ?2 ]9 R
        {- |% H: V% u; `; w5 k3 r
            for(j=0; j<5; j++)
2 W' [" W. `9 \/ m* d3 i            {) Y. R, v) k: p3 C/ x6 l
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ K+ c2 q( d2 G) V# L                i++;
0 f3 g% t2 E1 D# }/ }. }7 X" Q                //if(i >= 4096)
9 H' {! g7 K7 E% S6 J4 u# ~$ @                //    break;
: k' v( R" p1 T
% [0 E; I+ T3 Q  r. c            }( f' a0 e! c" [2 ^- H" J6 P' [
            UARTPuts("\n",-2);
2 ^4 u* g& r5 T1 ]4 P        }3 g% w" C5 c8 p7 _, a$ l0 a6 E0 F
    }
2 V" _; r  o4 z* W" u2 Q, h8 C
! x1 o) R2 I! j* E5 n}
" }8 e) }$ l2 m: |

5 V2 |7 N1 t. J
* k5 ^+ w6 A  e( G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 E4 G6 Q: y+ z$ Z% F3 A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* K" ~9 i* A7 \$ Z' F





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