嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% w0 ^( x9 h9 ]% x& I
Void UPP_TASK(Void), p# N- x! `9 a( m1 z2 x+ A
{, _. H2 D0 Q% `. D. J. s$ W
; B% I# `% l; b# E" @/ M
    int i,j,k,target_int_count=2;+ `+ q5 k+ I2 X' a7 a
    char ch[2];. X8 Z* U; ~0 Q* v9 q1 a
; F# R1 I- H5 K2 N
6 Y1 S; k: h& }+ Y  z" a

" Z9 t6 O9 R7 _! t9 q; v  T  z    upp_interrupt_count  = 0;1 |' K% N$ O. [7 V
    upp_error_count = 0;& \% v# O, ?! p1 g& Y- c0 G

# L3 ~: a# I; S8 f5 O) A5 a) f& t+ w    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* ?" v; y2 N; M1 j    // Initialize data buffers- j7 H+ U5 B  Y1 \! x& M: T
    for (i = 0; i < upp_frame_size; i++)# Z! N; `: k% C7 e3 T& g
    {0 U# {! k3 R! s2 L1 ?
       upp_buffer_b =i;
+ Q* L1 ^5 k6 }- _, j" l+ R       upp_buffer_a = 0xDEAD;( e$ v2 a3 x" M5 f
    }9 v' z# @9 ~! c1 }7 B5 ?' J) q

: ^$ \/ _: h1 Z! N$ g. u' j, I    //for(i=0;i<1024;i++)1 ]4 G8 q  s7 i$ R* i7 ]% B. e
    //    temp=0;
( X9 \" ~* i9 I' ^6 t' i) S2 V8 S- W( S& `0 A6 _1 d: c
    //UPPReset();) Y( V) y4 e8 T
    /*启动UPP DMA传输*/
3 Y, }- U2 c( t; G( c9 |    UARTPuts("upp_prog_dma_i\n",-2);
& w4 k# H# Z# B" f% p* D    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) D; y5 a; R" \+ B( \# m( O    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, ?0 G" p& L% J' p0 i5 q; R6 k    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% E& P7 L) o; O- q; D

) L/ b) i9 b! q$ ?0 R  O6 h. p    UARTPuts("upp_prog_dma_i\n",-2);- q* Y2 H8 ^! s( L: f
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. ~2 m( w: P( Z1 Z0 c5 F    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 P: Z7 a9 i/ z* B5 K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" M- g- i2 i; w% w

6 f, k6 ]# l+ F# x2 x    /*等待UPP传输完毕*/
4 Q* g& ^6 A  l( B4 I    //i=0;
5 o, {+ Q+ X% R3 |; ~9 g" J  H! H    //j=0;% [) ], G% {. I7 [% N
    while (upp_interrupt_count < target_int_count && upp_error_count == 0); K  k# M6 x7 n" A: g; x- a) d
    {
& I3 C9 `, F- x6 \- `# k% y; X        /*  测试UPP传输的同时操作普通DDR数据
+ q7 [+ L5 {% y3 b4 U( o        temp=i;
# F$ P: j5 J. h9 R' m  p" i        i++;' t$ ?  J2 v* e2 g9 g( e
        if(i==1024)
3 b+ V/ t: h$ O; M- M. A        {- q# I4 f/ O5 d0 g
            i=0;
; @  B5 Q2 {5 {; l, z            j++;
4 N  B* K/ R: N& {- o2 E4 z3 Q2 `        }
0 H1 G$ Q4 E0 Z        */
3 ]. `6 a/ O: Z  v5 w  z
" o/ {& W' s3 Y! x2 `       asm(" nop");
! V& t* B, Y* A4 Z5 J( V. q* s( j* b  o7 D
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) m0 K& Z( E7 n3 W+ U7 h- t' j9 b
    }
: R4 j* _2 H6 }6 c) v5 S. X# r
1 M& Z4 c  x, O& C    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 X5 ]2 T2 ~8 k9 w& I' _    //UARTprintf( "i=%d\n",i);' r' G& \- N- s7 g: K
    //UARTprintf( "j=%d\n",j);  s' h6 u( }0 {: t7 r7 S* P
    UARTPuts("Data mismatch in buffers.\n",-2);
9 k$ a5 Q4 G6 q; e: z( ]1 d; y    if (upp_interrupt_count == 2 && upp_error_count == 0)0 |9 I  W8 x* B5 Y4 a3 `
    {, }2 B- u* Q/ R! w- S1 Z
        for (i = 0; i<upp_frame_size; i++)% h6 k% q" @& M& ~8 X
        {% c$ @1 t- O% o( W5 `$ O
            if (upp_buffer_a != upp_buffer_b)' M9 c- I' b  u/ |6 `/ o
            {
: D. h6 {" ~1 _+ G% O                upp_error_count++;1 z, R6 B: L3 _5 T5 D' h  M% ]! d
            }, Y2 m: o% A7 i' f) ^; k  V
        }* O8 U- z3 U3 g+ }1 ]1 ]4 ^1 ?
    }
% A( p  Z/ U# j! M1 D
$ B& i; q4 y, o. u  v- h7 N, y    /* 报告通信结果*/
# p1 A; O3 g# B8 ]- K, P    if(upp_error_count != 0). o' u7 y  Q; S4 `9 h; W$ O5 I% s
        UARTprintf( "upp_error_count=%d\n",upp_error_count);# o# q* ^9 O1 I# e5 i* q. ~
    else
. t: Z' F) H/ W2 _# b1 X- X4 ~        UARTPuts("uPP transfers complete!\n",-2);
5 u, \0 b6 c% w7 Q: o. A2 o4 U9 m  B% r2 n. U, _
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
% }7 L9 d. g: H; `  y0 n    UARTGets(ch,2);
" i; c0 l' F/ u  S% x& C    UARTPuts("\n", -2);' m( \: s& j5 q) `' S) J

, n" ?  s3 a2 _% U    if(ch[0] == 'y')
8 ~7 ]8 s- G8 p" `    {
6 S: b  @  [, O" E9 M        /*打印全部读到的数据*/7 q3 q8 Z# r+ ~! ]8 g- f
        for(i=0; i<upp_frame_size; )4 x8 ~" V/ Z/ H! M! r6 |3 c
        {" K2 e9 V" d7 ~2 C0 t
            for(j=0; j<5; j++)0 k/ O# g, C1 h2 I
            {/ M2 [! a& V! c/ }
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 R  k4 z, _7 c0 s+ k+ r% o
                i++;
1 s/ n( \# C, q3 O1 R                //if(i >= 4096)" j+ G, G4 `$ c! x2 D7 x" C
                //    break;% i6 f4 [- m3 W% c' p% j
% c  ~$ P# v  w* Y7 A- B
            }
7 h+ _5 F# @& t* U2 R: t- \/ C            UARTPuts("\n",-2);; }2 a3 w/ Q9 @  i. l
        }
" l+ K3 p4 `; B0 s- G  ^    }9 f4 u2 c) q3 T8 J
- ~9 ~8 G3 p" y; w; R/ G
}
9 d# D9 T" z1 B6 h: U* Y/ M% h
0 G6 a) }! A6 n
) q. U+ M! H6 ?9 m' |

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- [0 |0 m9 f3 o3 ?! s
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 G  L7 g3 ~! J/ w, Q





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