嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( \, b! i( Q7 @+ {; a8 F
Void UPP_TASK(Void)
- @( ]4 m& k" a, p, z4 ]/ ^{
2 l. y% M- ?% ^- n5 ?& C9 @8 g+ L
0 f4 c, `7 S) r2 I" }5 Q    int i,j,k,target_int_count=2;6 k- A% W# A3 w& y3 T( I2 x
    char ch[2];
# P+ I# n0 Z! P$ h' @$ T. u- J( p& ^
) Q+ q% n: ?! D- y- d1 m" u1 H- s! K: b( Y/ O6 B# m
! P9 i* p  S9 N; b
    upp_interrupt_count  = 0;
, L$ S. R  h- M( R    upp_error_count = 0;( b/ ]9 T7 X& A+ N
. N' w& D3 K$ d+ `& l- {. P5 b  }$ I
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# J0 p; C( C' B4 q    // Initialize data buffers+ |3 |$ o# |2 j! ~) A5 o
    for (i = 0; i < upp_frame_size; i++)
# A+ p# O' B: p    {
, B3 V5 c% b2 Q4 Y) l) c       upp_buffer_b =i;
$ b7 V4 {1 \) E% v       upp_buffer_a = 0xDEAD;
* X, H% ?- g. D8 m5 T    }
) h4 c9 F7 W: t" |
: V: U. y/ c$ @% m& d, d6 n- A    //for(i=0;i<1024;i++)
* v3 c& F4 \/ S4 t. }    //    temp=0;4 v0 c2 N& H0 q% R- a

, G) O( v) f, P5 I0 L# u$ E; L% {    //UPPReset();
) S' Y: |/ J& ?0 C. g    /*启动UPP DMA传输*/
6 ]; _, U. @0 Z) Z    UARTPuts("upp_prog_dma_i\n",-2);
8 F9 L: B& i( e; n0 s6 y    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 ~/ L; e* P$ s
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 U, M% {3 j& m2 G. H: ^6 B5 l    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);* \$ g8 _; @7 z
* O4 y3 V" z& @
    UARTPuts("upp_prog_dma_i\n",-2);
" j) K# F; V" I6 Y* S; z: c    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: z1 L0 G0 S3 }# I% K) r! u3 X+ c
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) o) M7 y+ I7 j6 @7 m; T. G
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 k  L8 ~* C3 i% A5 K- M5 o: H( Y" g1 Y3 M! U' D5 \/ _
    /*等待UPP传输完毕*/( l& i+ K8 `% c0 V, C, u# j: ^
    //i=0;
9 T1 u# i& Z4 f    //j=0;
; j% u% g' A1 N0 }/ _% C4 H    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 s/ {; k5 j4 J    {7 t" D8 [6 r' l; r) o' ~4 W& s* O4 i
        /*  测试UPP传输的同时操作普通DDR数据
  D- |5 h: G: P( \0 }9 Z! \        temp=i;
0 A( k7 B8 L$ y0 k        i++;  F! c5 v- Z7 t5 `
        if(i==1024)$ a+ e" g8 ~- [9 M: B; T
        {- S# X/ n3 f9 P
            i=0;8 E3 ^$ i7 U' N. L
            j++;- N( S* i. I. V& Q4 q' |
        }& b! I+ ?8 g  l; }% |3 w
        */1 E/ ~, S. }1 F4 s* K

- m8 r) H+ f2 E; _6 P; _$ ~       asm(" nop");4 p% R: A2 I2 g6 @3 |

5 [2 d! E1 R- G; b/ v" T. y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 O5 `1 g+ Z2 v( R4 _    }
- m: C0 U: S; b! E' I
2 B9 @) \- P% O$ [9 p8 {& G$ S    /*检查UPP传输的数据是否正确 (loopback modes only)*/$ f' I5 i1 r+ q( f5 F9 J* @8 z
    //UARTprintf( "i=%d\n",i);4 B, D+ w, J. E) D7 Y" e
    //UARTprintf( "j=%d\n",j);
& ?) i8 o& O- P& N  g. G    UARTPuts("Data mismatch in buffers.\n",-2);
+ @: n  F2 i1 X  ]. \    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 {- S) }6 W) `, p' ^5 l    {: v- t, I, {" L1 X' S
        for (i = 0; i<upp_frame_size; i++)' [; t: k4 Q  ?+ o& t2 a4 [
        {2 a0 W# I6 r; N) U& x! u
            if (upp_buffer_a != upp_buffer_b)4 Q: i7 E" l/ p3 [4 b4 L/ w4 K
            {
+ Q8 g. ~, o: C; u                upp_error_count++;
0 Z) @- m! n9 y1 J  r/ U8 n$ F6 T( x            }
6 I7 \4 v. _' k        }. f7 J% O9 B; x8 W6 o* }
    }
$ g$ u+ T/ i. q% r# }4 R5 y! p/ Q* }! ~- d8 \
    /* 报告通信结果*/
9 J8 O4 b( O# k    if(upp_error_count != 0)2 j$ B9 _0 M  M1 g6 [; L: Z7 N4 j+ ]
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# O% D& P8 `% ~; l  u    else
3 @( x# ]/ r6 n2 h) U        UARTPuts("uPP transfers complete!\n",-2);% f4 Q; t. h+ d8 S

/ u2 [# ~$ o' K: c7 U5 l  U    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* @" U/ [9 n2 C4 x  q4 n1 B    UARTGets(ch,2);
, f$ E- n8 Y) F4 c/ p: I( |    UARTPuts("\n", -2);
2 R$ j. S! W! x: _; x9 e) h% Y8 j/ b, H% e+ H! G4 E
    if(ch[0] == 'y')6 C( N; \" S" I5 n' Q
    {
2 R& J0 C; y! R0 X/ ~        /*打印全部读到的数据*/4 G* C% m% Q# K
        for(i=0; i<upp_frame_size; )& I% B0 v! n6 O, w4 s- Z. z
        {
2 d0 E' w: r  J2 U) U3 X            for(j=0; j<5; j++)6 ?3 K7 N* ]9 l+ F  }1 }
            {1 h! [& x0 M+ N: c, b
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- e; l7 H9 X1 W! T" Z& ~0 i& c                i++;; @' E! J2 ~8 E7 b# h
                //if(i >= 4096)
, i" r- o$ J4 g; K' v1 {4 b                //    break;" j- E! N8 ~3 \1 k6 {
7 @4 N2 w: H& i( H% Y+ F) ^  D* @: O
            }3 }4 r* ^# G4 M# O3 u2 l1 X# F
            UARTPuts("\n",-2);
; N1 q" V/ _: I6 D; Z8 G' K" S; P3 |        }
" t1 a6 y5 ^! A. B; U    }9 E( h' p, s6 Z( ^
$ R3 C$ n! Q+ M3 v, E* }
}
. ]. @- a* w7 f; |$ d4 P# `
/ i# V6 D7 r% H7 h3 U; e
% {, e( n1 h+ ?: B. ?# D

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 _3 J# Z/ C/ N. O- R: O

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( ^: W: {  T6 e2 K




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