嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 X+ o" y- J3 _2 `2 E1 R' b, V
Void UPP_TASK(Void)
; d: \! |: `! b. h7 _3 H  D& M{
) w' h2 N2 p1 ]$ x, I: c
; @/ `  g2 Y: E9 T  F    int i,j,k,target_int_count=2;' O( n2 W+ I2 ?
    char ch[2];! x5 N2 R0 |8 W) [# D

8 T5 |& F* `0 W# R4 U8 ?
; c& I5 r3 P1 ^+ w9 x$ n5 [; p& }1 N; F5 c
    upp_interrupt_count  = 0;/ H. h7 G% \' p9 M5 n
    upp_error_count = 0;
9 `% b, h: v2 S0 x7 J. j" y, c& u6 [* k4 }
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) E; B( E% L% g    // Initialize data buffers" v9 }( J2 [) E5 j
    for (i = 0; i < upp_frame_size; i++)' e8 e6 k9 u9 y+ N5 T
    {  I7 l. C; g: r) o" q( k9 ^9 y
       upp_buffer_b =i;- c; f3 u7 c! y& U" v+ O5 j
       upp_buffer_a = 0xDEAD;
1 P4 c9 r) T) t, [: m. H- q    }% J( l+ ^% U$ f6 N

: }( f: z( N  e  X3 q8 e# _    //for(i=0;i<1024;i++)5 B( l4 E7 N/ S8 ^3 O) U
    //    temp=0;
* q: G; F" z2 w* r' Z: k
2 E/ g; \# K% Y    //UPPReset();
- V5 u+ ^( F% y3 w3 e, V& L' r    /*启动UPP DMA传输*/# a* ], ^8 e( D9 O6 s: A7 D
    UARTPuts("upp_prog_dma_i\n",-2);
$ P7 a/ c% M- p    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) i2 t: U  n, W8 b8 k4 c4 Q$ b    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ U0 c# y* Y$ P! i5 N' s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);7 Z5 p" ]8 c( b% v
2 i3 m: I5 o3 a, n, b% {4 F
    UARTPuts("upp_prog_dma_i\n",-2);+ k, t( x2 x7 u3 U
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 G) E: ]9 W# I* Q6 A$ r3 Q+ U
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) ], m- e1 Z& `5 N3 ?: @    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);. y+ r2 i6 y2 J! y2 a# k
, V& k9 K# O, @8 O$ R1 i9 O5 \
    /*等待UPP传输完毕*/
; L' }2 p% G* F( {0 a4 o. X    //i=0;  U# |( ]7 T4 ^
    //j=0;9 }! A' y0 t5 Y8 Z, N/ b' Z& i
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 Z, D# Y& ^' k8 x    {' u6 v9 H( y. a
        /*  测试UPP传输的同时操作普通DDR数据& t! K$ t( N( g6 P8 Y( ?
        temp=i;
3 [: `' y2 S! L, }        i++;
" Q" H& B. {4 x1 r8 B# V        if(i==1024)- \# U' _$ {: C
        {$ w9 l$ z  U! U5 z9 u
            i=0;. y) }( Q  k( E. k
            j++;
7 P9 D6 `: U. n8 O4 `        }
3 G) I5 O1 v  Q' `        */6 \- K, A7 P; v% }: K

2 [" A9 E) `9 T6 M- e) t  X) a       asm(" nop");- u& @7 k' |2 h) T: g* H/ v

, [5 }2 ?4 y6 h; a1 v       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 F' u, C0 B# {6 W2 x    }/ `9 w0 }0 F4 s. c
4 j' o6 L; p, C
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 [0 Z/ c* O1 z  b1 M    //UARTprintf( "i=%d\n",i);4 s% o7 S% F! u0 T) m, {8 a$ J
    //UARTprintf( "j=%d\n",j);8 l4 E; J/ a) {+ ~" f! o' g: `
    UARTPuts("Data mismatch in buffers.\n",-2);0 i0 ]& [, l- v5 a/ G5 |+ s
    if (upp_interrupt_count == 2 && upp_error_count == 0)5 k( u: ]  p$ z/ b4 B; G5 E
    {
7 r. x% k* ]5 M9 D3 q        for (i = 0; i<upp_frame_size; i++)
5 L5 \7 f; [! V; l' T9 `        {% B& S% e! T- [8 o) ~4 G. l+ c; n
            if (upp_buffer_a != upp_buffer_b)7 a' H: |2 V8 p$ s+ V. F1 u
            {
+ `& i& n. Q. U2 `                upp_error_count++;8 r: T$ ~; F  P% `8 X
            }& A$ v6 B" D( I# ]; e% N  w
        }/ H9 C8 p7 {  _8 s+ L
    }. [3 I. T6 P2 ]6 r) V
' [. ?5 Z4 e* L1 E
    /* 报告通信结果*/7 Z7 P( p2 |: S' s7 H0 c
    if(upp_error_count != 0)4 t4 l0 Y) B& v7 ]
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( _9 @2 i" x: D' z2 d    else
6 w" `& g  O  j        UARTPuts("uPP transfers complete!\n",-2);3 h4 _# A: q; v3 d6 Q

. m$ x: b3 a0 E) N( y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
% o% L- I( ^  U+ U    UARTGets(ch,2);. o$ M, Q/ ^2 `; d7 S, i
    UARTPuts("\n", -2);; `, n) X0 O6 a- U* w% r( I* T
5 `! K# D0 W7 v* [# A
    if(ch[0] == 'y')5 V( I" R7 \& ]: q/ P& @; C
    {1 r0 `3 N4 {8 ~( C; L
        /*打印全部读到的数据*/
9 X4 y3 }, z# Q- U! y        for(i=0; i<upp_frame_size; )4 f+ p. ]: @! p- q4 i$ [
        {
. Z- h; o; z8 u            for(j=0; j<5; j++)
. o! I! O( B2 ~% A. D            {9 k) Y9 ~& r+ D5 F5 M! C
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 M5 T* W! H! O+ Y7 O" I                i++;
' G. d! A' U5 D                //if(i >= 4096)( j& F8 s9 G! _, _
                //    break;
' f5 O! I4 e7 N5 j' a/ s- ^$ R( a2 e7 ]5 b. _/ q; h# _/ ]% J* G' a# _( U( ]
            }' i; z8 g/ B# ^; q; W8 v
            UARTPuts("\n",-2);' \" \' h0 R# o* q8 O
        }# w' t2 A/ d  b8 c; ^
    }
% \8 c  k) a% O5 k4 L; `( L! H, P0 a  {3 c4 a+ U/ y
}

- C8 i9 @% t  N( g

7 a) X9 f2 Q/ J& b% M  ]
" p" K! u+ B$ `$ d) v2 h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: b) V7 F% z& M
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。: @' w$ f9 B4 N: ]





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