嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. e9 K; G; a1 x' E6 N! \4 A
Void UPP_TASK(Void)
/ p; \/ |$ P' v) R9 \; v% c{, V$ B% N3 b* m" g

7 Y3 U( @' Q$ _- t4 m! K9 _    int i,j,k,target_int_count=2;
& P, _( c$ H. w0 h; U6 T    char ch[2];
6 f% F4 ~" j( H3 F# \1 q- Q! t& h, [2 F, C! u
7 c0 C( _. ?. B0 L8 m/ u- y) ^2 p

6 T, X2 j  T/ q- N' f' q7 f    upp_interrupt_count  = 0;
# ?& P- v/ ?) h4 q, u% B    upp_error_count = 0;
$ O1 I/ M5 C. T* b/ O# F
# ?4 f( ]+ K, t' \    UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 {9 a. x1 u! n$ G    // Initialize data buffers( v% ~+ D. R$ \' L2 \0 W
    for (i = 0; i < upp_frame_size; i++)  A- O% h. O" J2 t% D- k: j
    {
' }$ k+ ~$ }5 R+ g       upp_buffer_b =i;4 \% c  R8 t  b, o8 _- A
       upp_buffer_a = 0xDEAD;$ ?" i: r0 V  \& P3 Q1 E4 f
    }% L% T. Q1 ?8 O
: e9 C/ q1 R9 }9 ^
    //for(i=0;i<1024;i++)
+ d" Y% F# b7 n! S! a% N8 o$ d! P9 n* Z    //    temp=0;
+ w2 |) A: Y6 Q4 K7 r4 A' w. w6 [% Z8 a
    //UPPReset();
0 y) C# d1 ?1 g' i% H( N( \    /*启动UPP DMA传输*/
/ l" V$ G" H- ]3 x* T8 i1 j! u    UARTPuts("upp_prog_dma_i\n",-2);2 u/ r* w# S& m- q) o. N6 c
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: U: m  X9 g/ N  G$ O9 U( G
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, f3 j) x4 r: O7 X5 U    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 m& N6 S: {9 d8 D& D2 G) S. y! }
. t' u) z( z( J% C$ E. X! P    UARTPuts("upp_prog_dma_i\n",-2);8 _! V, G; W# k# j
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. |) A. I' V9 I, x( h* V/ N
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! {# |; R9 y6 X0 U& ?8 V1 V3 `) K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ `- v1 W/ _: J& p( \0 ^& \& B# S! `+ c) ^- w$ p
    /*等待UPP传输完毕*/2 b! J. q9 C1 ?. X) G3 R, f) t
    //i=0;
3 F) C" n$ h9 T7 X5 l    //j=0;" J+ j  i& H) }
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% p+ w& M: E2 q6 ~/ H- I
    {
% Z' X- u+ B1 U( R! Q& o' n        /*  测试UPP传输的同时操作普通DDR数据
  p) Z( k1 K" t9 A4 `( T! X        temp=i;
( n* w0 |' x- ^) v        i++;' h2 x& D6 g" ^8 x+ @
        if(i==1024), K2 ^9 z! U  g# P! r
        {
4 f" J  t5 b* x" {            i=0;
: F* |5 f8 _0 A! N' g. P. r9 m  k  @) T            j++;/ [" `- O7 s' l. a$ Q) D. \
        }
! o' ~( i% J6 Q$ C+ A* o        */( h/ S4 k" S' J# r# v

/ R% d) d! J* ~" z       asm(" nop");$ Q% m  K+ T# a1 T6 [4 B( {- {  v

) o+ G# T& V/ ?8 i       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);9 R& j# v9 H* y. X$ X7 R3 @
    }
% }2 h$ G8 r5 H5 \& @# N3 F) M
. A" I1 ]2 I. S* x& X3 f    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 G8 n  t1 g. O8 ^% ?
    //UARTprintf( "i=%d\n",i);
+ L/ k+ O' N4 g4 B+ P% g    //UARTprintf( "j=%d\n",j);: m0 t- {/ F* r/ t
    UARTPuts("Data mismatch in buffers.\n",-2);
/ @' o: t( o! F) {1 Z. B5 p    if (upp_interrupt_count == 2 && upp_error_count == 0)8 f6 c) h  i# S3 ?6 x
    {
) Z, t/ U* k2 C        for (i = 0; i<upp_frame_size; i++)# L; U$ b* O' ~& C) o( T
        {5 {: r8 o. d8 Y, T; ^2 ?5 A
            if (upp_buffer_a != upp_buffer_b)
2 Q. F$ \/ b$ ~; G3 l            {
5 z2 h8 c  b: \# j2 F: ]" v' W                upp_error_count++;) B9 e3 L" Y) {& C. F
            }& i+ l) V1 q) d% H
        }+ Q" s1 u7 \! k: |- t1 h
    }
: H/ T' u6 I5 B6 v# X' e, S, t* ^9 n0 W$ L$ ^$ P' p3 z+ F  ]
    /* 报告通信结果*/
' T% i( P1 o$ J    if(upp_error_count != 0)5 T6 \$ a! P* z1 [7 X$ y' v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 Z7 T/ Y* ~' J0 ]
    else
: e7 [6 \9 V) Y7 L        UARTPuts("uPP transfers complete!\n",-2);
& s8 B8 R! e% Y; N# M" @8 m
& Q( y( }7 A8 h0 X! t1 t" ^! [8 P    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" ?8 Q; }' ~* j  i9 Q: h! Q    UARTGets(ch,2);& t3 {6 F2 B/ A
    UARTPuts("\n", -2);
$ V5 a4 e# x+ s) ^0 n% L. R/ |* v9 h3 i- ?  A& ~
    if(ch[0] == 'y')
" l0 Y0 l3 K2 ^0 {: U5 o    {* X5 J9 w% v2 u. M2 i' u4 y- f
        /*打印全部读到的数据*/
7 X) [3 x' q3 a- t+ H; S        for(i=0; i<upp_frame_size; )
$ @% M5 D8 a% i7 y5 {7 h        {
0 ]$ Y$ B5 `8 u+ ]            for(j=0; j<5; j++)( V9 }0 E1 k2 v# w2 |8 Z5 W
            {9 [5 F2 }$ B( X9 v% H
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
! m+ b3 ]3 _! X                i++;
* e  K( c3 H3 T7 @) S- w2 y                //if(i >= 4096)
9 k% {* C0 H4 T/ k( r8 V( G                //    break;
% `- J/ q1 l2 \% n& D7 s+ R2 K+ ?: E7 E- {# L! f2 M
            }, e' t1 z5 n- `8 E
            UARTPuts("\n",-2);
3 X, I, u  a3 K8 c        }6 O- [4 P5 D; Q
    }$ q+ \- ~# [$ N. r  E
2 ^1 W' [# z/ E+ \/ a
}
. f% `: M: N% m% x5 o5 T: g  M
" l- M4 H- d. L" u8 x; s

& k6 n; r5 v4 Y2 J& e% B( f
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 a$ e$ d7 u/ |2 P* R5 D

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 o! \! U2 k, V+ r




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