嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  M: `( v' d9 l7 E1 X% b
Void UPP_TASK(Void)
/ W7 J* P& M8 g' b1 L) _; k{
( j0 R# {/ Z3 n' {+ g. _, h2 \, R. m2 e( i
    int i,j,k,target_int_count=2;% V% {/ p( l/ j" z4 Q
    char ch[2];
! B7 b) k3 f+ d- f- I" V# E' s" W6 U/ S3 U/ K, h* \" j
; E. o- E: D9 `) P: ?6 R
% w' C9 f* V% m4 d; {
    upp_interrupt_count  = 0;
5 |/ @5 E# X: t5 K7 [* E    upp_error_count = 0;  |: n* i) V5 D5 e3 p6 O0 I0 u3 p

4 e( B" s, c. K) C# z8 y5 g' }4 _    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ F7 ?  ~2 w3 F) ?3 p
    // Initialize data buffers
" P. m0 f# ^* b: T- U' v    for (i = 0; i < upp_frame_size; i++)* D* q/ W* s0 Z; Y* k2 g
    {
$ d( \7 @+ I6 J( m9 A" O       upp_buffer_b =i;2 Q5 _% q+ ]3 z" w- w) ?9 D
       upp_buffer_a = 0xDEAD;' ~; q: z3 N& P; R. e/ U
    }9 D  Y- A& K& D, t  U& P" {

) M- U/ g) N9 W( M: f, N    //for(i=0;i<1024;i++)
. K0 H+ V8 U- M/ v  B# o* [    //    temp=0;
5 \- c: `* s8 A# x
# ]5 s) W7 G: z( }' H, @: V    //UPPReset();; ?- m  l0 l9 q8 h# o% G2 c% R
    /*启动UPP DMA传输*/, h/ x+ o3 ~3 f! z7 C+ @
    UARTPuts("upp_prog_dma_i\n",-2);
3 q, e# b, g: U    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: A& B5 i3 |+ T) M; K" G    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 ?. ~) [  T) {$ J! `    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# U% m$ _9 v! X, `/ v. K6 k  ]! K* i7 C* H( w; L4 T( d
    UARTPuts("upp_prog_dma_i\n",-2);7 j0 o" ]* `1 y. H8 S3 @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. ?( D' M% z0 X+ u' w9 K2 ~0 Z2 V    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" V! ^. v  R: r. c. K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% T& X& b3 {, Y( u3 g1 r3 i, V8 ?6 k
, C1 I; f2 l( T' a    /*等待UPP传输完毕*/
4 x7 o# J5 n4 ~4 K, s; G# U    //i=0;% X* K$ l4 A- s  D' |8 m
    //j=0;8 n) Y# F/ q; b  c; E& o6 W
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 y' x, z, }% c9 o' l
    {) |. O1 u$ `. E; [) U
        /*  测试UPP传输的同时操作普通DDR数据; T  N9 f$ k7 {, ^; A; C
        temp=i;
+ ]' n# j0 j# z        i++;- ^7 [5 j% R/ ~0 y5 O7 e. x) p
        if(i==1024)0 ?0 W+ E, g5 G2 I9 |
        {. C6 J: R( x% A
            i=0;  f8 z0 ?( V! }
            j++;
# T: P# ^: ^) m2 J2 C1 y        }* A0 ]* }3 `2 W
        */8 Z7 E& q* h( y

; S) {) H  y4 q/ J5 F2 X, t       asm(" nop");
+ T0 Y% ~0 y( V9 r$ ~
' b4 h' `6 v' `  T7 x       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 ]  m6 {: P5 F- X( `* V: I    }
: W- U1 ?& [7 O* F9 g1 t3 h6 a
9 \1 ~6 t. d. Z, k    /*检查UPP传输的数据是否正确 (loopback modes only)*/  B7 F( A# J4 c5 I# n* z
    //UARTprintf( "i=%d\n",i);; B7 L8 D' W# c7 f3 ?% I, O: ]
    //UARTprintf( "j=%d\n",j);
, s/ ]+ \1 c: k7 q2 D  |1 M    UARTPuts("Data mismatch in buffers.\n",-2);
8 Z, b! \5 T' [% X$ \" C) s7 R    if (upp_interrupt_count == 2 && upp_error_count == 0)* d. T$ a" |' D
    {; H1 i8 k* @' o& r" c) U. N
        for (i = 0; i<upp_frame_size; i++)7 T! {6 _  z- @+ h( _0 Q1 @
        {
3 T+ A6 W/ y/ [) `$ B; W            if (upp_buffer_a != upp_buffer_b)0 Y( l! P) ^, `' u" t
            {7 n0 b7 D4 G0 F( h) h" e0 |
                upp_error_count++;: a- o& k7 R  e, A
            }! K' l1 F* N$ n7 ~; z
        }- d, I* X% t* z* U
    }( x: {. g9 s1 |
1 P0 W$ X4 Z% M0 w0 l% J
    /* 报告通信结果*/, {4 ]# A) ~  ~9 l) |! P  q
    if(upp_error_count != 0)
, u. g* E) ~' ^2 {        UARTprintf( "upp_error_count=%d\n",upp_error_count);; H. C% d' V' S- C1 M8 i! F) g
    else
1 L$ L" ^% L, R+ l        UARTPuts("uPP transfers complete!\n",-2);" |$ U: `  u. e

7 ]  `0 c8 C3 D; [2 b( u! U$ o- L6 S    UARTPuts("Do you want to print all the data?(y/n)   ",-2);3 u2 S+ x( P" n4 z' z. a
    UARTGets(ch,2);1 h1 I" O% s+ I+ i, P+ a1 ^7 M
    UARTPuts("\n", -2);
+ q& e; b6 ^6 e* s9 E% `$ A; u) u. _6 J) \. b
    if(ch[0] == 'y')( ?' A5 T2 X3 T* u/ @% F9 S) w+ H
    {3 Y& I  k: }( R7 _5 c
        /*打印全部读到的数据*/
, U. N3 u# t$ J        for(i=0; i<upp_frame_size; )
- a: K! x- o% P! c& M        {
- c% ~( K  E" T6 \4 W* B" B            for(j=0; j<5; j++)# q: V6 B" C& e  F  R9 N- ^" Y
            {
* N( l0 {0 g5 C, H4 J5 v( R( C                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, b7 W2 o. N) p9 {9 Y                i++;  h2 l' [( U; ?4 B. \! N4 Y! x
                //if(i >= 4096)4 E7 _; x5 L8 ]8 w- U" p* D
                //    break;% p% t  q, R5 f! ^1 z6 `
- e) z# {' \+ ]* Y
            }' Z! P+ P8 Z6 f7 |, ]
            UARTPuts("\n",-2);
, _5 s6 B6 k8 M- @1 ~1 c: a6 y        }8 u3 h+ D2 ^0 H# d3 B
    }% Q$ g9 S7 n& Y! y( i& {2 p/ j! R
: F6 n5 b/ S5 |+ n
}

1 {( q( G; v- b( d5 w+ R
- q4 s" R. I2 D2 e/ x; W: E

( f- r+ Y2 _, y9 U' L
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% _% o5 g4 w! ~( Y5 V# x  x  a

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ H6 ~) x/ `8 O4 d/ K/ S% F' ~





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