嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ t& u3 `& a/ Y0 u7 z0 Q4 d
Void UPP_TASK(Void)
8 Z( F8 i- p& V; d{
8 Q0 s& N# r2 E2 M; _% a
+ B+ b5 d) Q+ t' @% L4 p* K    int i,j,k,target_int_count=2;4 Z5 n. \' Y/ u# T
    char ch[2];
* T* I3 A) m2 o0 `2 W/ Y4 f2 r: J1 G: q
- W( \8 t2 d& D3 x
/ A; N" N+ J8 r
    upp_interrupt_count  = 0;8 J! K# ?7 O0 W8 R
    upp_error_count = 0;! p$ e; b. p# F; i' w; s
4 h- B5 {: q! B' w- k0 r
    UARTPuts("\tResetting uPP buffers...\r\n",-2);- ^+ ]& ?0 A2 ?
    // Initialize data buffers9 B1 Q8 w- W% i% a
    for (i = 0; i < upp_frame_size; i++)
1 j, r; c$ }6 J2 m# t: F! d/ W  T    {
7 \6 X' A, R# C+ D% D' S       upp_buffer_b =i;& U# j1 m9 O: E8 d4 _
       upp_buffer_a = 0xDEAD;
4 l/ f1 l0 G$ @7 y' f& ?8 i    }  ~3 A( T& v! O/ _2 w4 O, q

1 ?/ v  @- S9 T& |* H7 e    //for(i=0;i<1024;i++)' o: a7 V" Z  S- z# f2 z
    //    temp=0;' Q3 R$ d; t5 N+ U

" i) `2 @% z( Y6 o, W; c    //UPPReset();
6 y0 V1 r2 E  k5 M( [! e( o    /*启动UPP DMA传输*/
$ g. w) j; k( k    UARTPuts("upp_prog_dma_i\n",-2);
1 ]" w# ?* N; \) a6 z, W+ m& n    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 ]  X  _% G9 _2 [3 ^    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ f: ~$ C2 X1 U1 u! H+ ^. S# T    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 u# R% J) ]' g$ l8 Z+ R
4 s- K( @6 w- H, Z& h    UARTPuts("upp_prog_dma_i\n",-2);
6 T: c$ M, G/ e3 w5 Y6 O' o    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 F% m# M! e7 A% s/ w4 B4 a0 j
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 K+ T3 T' I( _    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: Y$ h( m9 D4 J+ Z
2 s% y: a3 x' M! Q& Q
    /*等待UPP传输完毕*/
% r+ o/ Y; a7 R* f+ I) d/ v6 s/ `    //i=0;
4 y1 E" l1 s! b5 p+ p( B    //j=0;
/ x% y2 r6 T- |& t8 z2 f    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 R2 K( T5 ]; T7 y* j    {5 b& m5 z5 ^  l# {1 a
        /*  测试UPP传输的同时操作普通DDR数据& f. m' B7 d2 C5 s; M/ M
        temp=i;) ^* a1 N. z! i( z4 p, a3 p
        i++;
2 x3 d8 G! o  z' Y' d        if(i==1024)
+ {$ L. z. a% M& @        {
2 O2 {; K4 f& k            i=0;
" W, h7 B' `/ J7 k  Y! E            j++;
. y: L, @4 a; |        }: J! G. j5 q0 }
        */
, W: F; s4 R  |( F( ~; E
4 e$ h1 G, g  C, |0 Y) W       asm(" nop");* X& D7 C1 S. @* U0 x* e3 \
8 Y/ h* w& F& |& s0 p/ F3 X
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& z( f( L. V/ B    }
! K) ^7 r& j* t7 T4 F8 ~
: F7 c, e' `! z+ ]    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 u9 \0 W8 \1 o5 h- |    //UARTprintf( "i=%d\n",i);
, `& ?1 N" _$ F$ r    //UARTprintf( "j=%d\n",j);7 w  H& l& E, o% a' Q
    UARTPuts("Data mismatch in buffers.\n",-2);
; A! C6 V8 H- g# \6 ?    if (upp_interrupt_count == 2 && upp_error_count == 0)
( D  ~5 X% q1 x4 w: x    {0 m: S( f* @$ M. B3 g2 o
        for (i = 0; i<upp_frame_size; i++)0 T1 S: R% L% H5 C9 @, n( I
        {8 }- l/ P% r. q1 o
            if (upp_buffer_a != upp_buffer_b)4 [# K# k+ i; y+ m/ ~+ t7 F7 U
            {
( m2 h$ j  Q+ Y+ P7 L( u+ x                upp_error_count++;( t; u6 H) ?8 K" O
            }5 f9 O* x: s, B$ g$ a9 V2 u- d
        }
. {5 C& }: e+ P% ^' h2 h) d    }
5 w$ H) D/ j% `  R! G  `7 D# n7 h6 p  `1 j, t9 p8 P, J2 `
    /* 报告通信结果*/
+ _9 \7 G! h$ [2 u    if(upp_error_count != 0)
9 z# T6 x: h4 b' r$ R9 K        UARTprintf( "upp_error_count=%d\n",upp_error_count);( p6 B0 F; {. I
    else5 C$ d6 T( N0 o* }# M
        UARTPuts("uPP transfers complete!\n",-2);# V9 @- ~2 F2 g+ h. i2 |; ^: E: C) b

1 Q9 d6 {( U; t4 a) v3 |' E    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 O6 t3 l0 f* w5 Q. S2 }" }    UARTGets(ch,2);6 V5 D: f1 @) M2 m1 O& x
    UARTPuts("\n", -2);
( n0 f; f( y& y, B  B- f  ~1 }$ f3 Z4 x. p& u
    if(ch[0] == 'y')
3 Q& Y, X% f5 l, S2 q) n! ~    {- ^/ ]8 i3 t7 J; ?
        /*打印全部读到的数据*/7 P& T8 d0 v  A8 L& d& q5 h6 D
        for(i=0; i<upp_frame_size; )
" A# D) z" p/ `' A% Q" M; h        {
  f1 @4 q4 j1 D5 W            for(j=0; j<5; j++)
& z# w' R/ \- I7 ^) D            {7 @7 [/ W# S9 {) E6 O2 j1 @0 l+ Q, m
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);; k6 G- D+ @+ D
                i++;
4 f( Z  G0 e, ~7 V7 g4 m5 P                //if(i >= 4096)
0 n7 o% h; `) Q/ V% v9 {                //    break;+ x: T4 f; [' l. M
  s: x3 y% j0 W9 U6 ^# K  G
            }
) j5 y4 g* b: {            UARTPuts("\n",-2);1 p9 p' o, ~8 B# I
        }5 e1 e4 @) \  |0 c" u
    }) ?3 U' W; r6 F. ]. `' x

6 x+ E7 d2 P) i# Q- a* U}
4 Q: w' U, m$ X4 c  x" I* a

7 d% r: ~; ~8 V, d9 @) e$ O! S. n4 y( b. X1 Q/ B

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ l+ X/ k8 X% C/ m, Z9 S- G  [3 i
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。2 N$ B& K# M7 w7 A3 q- ]9 J





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