嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 e- |- P$ |- r
Void UPP_TASK(Void)1 B+ v9 ?1 f" X$ n0 @
{8 m7 y9 \7 f$ T: W! l, _: M: D9 q

0 i; f+ i! d* q9 j    int i,j,k,target_int_count=2;
; D# h& E# X' D# w$ Q" f    char ch[2];
4 A2 t! {' O# R* F" ?% I- R# r
+ _5 Q  ^% _' f. ~( }& o6 U. L3 ]0 R, Y8 B) }' f: W

, A' `6 n. Q/ @    upp_interrupt_count  = 0;+ i' m0 |' A" {6 @5 b
    upp_error_count = 0;, ^/ G" H2 S$ |0 X
; ~1 F1 x# X+ T$ U2 l- E2 Q! `
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 k. F1 x" j: b1 i! G    // Initialize data buffers/ v& z, u& z& c. _) o! {# n
    for (i = 0; i < upp_frame_size; i++)- H! g% ~3 B- Z% M  m+ G. \2 U
    {
% |$ o4 i) n9 O: m       upp_buffer_b =i;9 v! j  k; L( C, H* e  w
       upp_buffer_a = 0xDEAD;
/ f* }0 u& `5 A8 _( Y4 {9 Z    }
. B4 r5 A* B$ Z$ o
1 U! _9 \& p- t; t$ w) P    //for(i=0;i<1024;i++); h- {9 b/ z4 ?7 ~
    //    temp=0;3 u' ?0 ?* J$ J2 g% m
; \* ^* K' Y: s9 k7 Z! h
    //UPPReset();/ t1 S6 I: Y; O, O. Y
    /*启动UPP DMA传输*/7 F& K; ]# C8 e9 \  R( Z
    UARTPuts("upp_prog_dma_i\n",-2);
) {+ L8 I3 Z& m$ {; w. A; g' s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, j8 x9 L$ w3 Z4 e- ~4 G* O( E
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; q% x8 E! Q( B$ _/ q* n( C    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 Q( G" C6 w3 w
7 P+ s) D/ P  V& _* j: q; m    UARTPuts("upp_prog_dma_i\n",-2);
; y6 H6 u( `+ Q/ p2 \    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" X# c' v! h- E# t; A    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% ^9 F, q: m: x: m    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 h- j" Z* o2 V/ D7 R6 }# R. a/ E: u: z% N7 D
    /*等待UPP传输完毕*/6 a) X8 D9 w" d, w! n0 L* n
    //i=0;. I; b* z0 ?9 R5 g6 e! E+ s8 h
    //j=0;
/ A' P2 ~& C9 q6 G; g4 y+ m/ @9 T    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& P4 g" V6 g# M6 a/ R* x2 G2 F    {
* e. p/ B0 G8 v  `3 y        /*  测试UPP传输的同时操作普通DDR数据
. d' [8 M( o/ b        temp=i;: |& ~+ l' x9 t' w
        i++;8 w+ |7 T9 `" J+ U
        if(i==1024)
' N$ Y) \# K8 s  b. U( E( I- t        {' v; E% D3 ?0 {
            i=0;
1 |% q9 H, C, a) @8 f' P2 L6 V            j++;: a0 W7 }' u1 K/ C* b1 q7 l
        }
- Y5 L/ b; ~. M6 y( A- ^; A        */5 p+ e7 ~! J1 Q. e6 z& a$ Z; y. i
/ j  x& I. G$ r: C# x
       asm(" nop");
; t% t6 U* h8 }/ C% P. n# X' n: p
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 A4 \. o/ @4 c" D8 A
    }/ B" _. n- E, p, ?' S4 `

2 B$ H2 r: X* g1 m    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) `* r7 S: B- X5 B4 \6 _    //UARTprintf( "i=%d\n",i);2 \! y: i- V( ^1 K! K" P/ |
    //UARTprintf( "j=%d\n",j);
# I) [7 b3 r5 O0 L! e    UARTPuts("Data mismatch in buffers.\n",-2);
8 X) ~+ O9 l, [$ c- q% ~    if (upp_interrupt_count == 2 && upp_error_count == 0)* U' t  k/ v: y% n5 |; z; z
    {
, j( V* y& T; O: I5 y        for (i = 0; i<upp_frame_size; i++)
7 ?  U! i, E. D: e2 T( ]5 c        {( Q/ h* ]1 \% c7 F" Z9 M- }4 m& u6 q
            if (upp_buffer_a != upp_buffer_b)' ]4 R0 L. c; _+ U5 ~  q$ i5 I: {+ n( x
            {
1 q7 n$ m) J1 b: h" J                upp_error_count++;  \' l' h; S4 e; Q( t, ]5 D( w
            }7 P1 y7 ~7 @$ F0 W; t; Q2 `; f
        }
. Q6 G  r5 O7 S& G$ E3 b2 a    }
  Q2 r: d7 t3 S' J8 a
% S7 \* i1 Q6 n' `" v. s    /* 报告通信结果*/
/ b( t! z% _6 K    if(upp_error_count != 0)
  ]7 Z. e  u; c3 I        UARTprintf( "upp_error_count=%d\n",upp_error_count);, ?* a( L. a9 e3 {0 @* y$ V9 E6 B  O
    else/ J, O( N9 @* C7 l, w. l' o) ^
        UARTPuts("uPP transfers complete!\n",-2);: Q  t! R" q2 P3 u, d

) o# y0 I: {! s& M2 P) Q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);+ O2 D0 g# C# c  C$ a; p% k! C
    UARTGets(ch,2);" o+ K$ J6 e9 h( j, i' i3 J: g5 B2 v
    UARTPuts("\n", -2);
5 l& T. B1 p) g( W: L2 Q. I2 i; e3 }' q
    if(ch[0] == 'y')
  w0 K4 q- c: S$ D7 y+ i- Y    {9 q  Z, p" ]5 @# L8 V9 G0 C# `4 J
        /*打印全部读到的数据*/
" N+ q: z7 l& v$ C        for(i=0; i<upp_frame_size; )
% D; j4 {8 l0 M' B        {2 v1 B1 U- A# r" H
            for(j=0; j<5; j++)
) \, J- D! X3 D( u+ d  o: e            {
  `% a* D$ ^4 O& e4 r                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 s0 s9 t$ U4 ~3 ]; O; j
                i++;8 p# v8 J+ N2 N) W
                //if(i >= 4096)+ X5 b" B1 H- ]8 L! |
                //    break;* q: A* r* H: W( n, p5 _' L$ w  w6 ?0 x
, G; ~% g1 f$ P# t6 C0 v. P
            }
3 H, y( u: \: e: O  ^! S6 v' U) e& j            UARTPuts("\n",-2);
0 Q3 B+ |! Y$ F% m( e4 \% Z' R; v        }  c% b& v  j+ V( u* R
    }
" u% j* V1 L$ W4 D  `9 K1 R* m1 t+ i9 i! n
}

% k/ c' j" M7 s( i9 s

' ]7 k& i! l) m- Y  P5 H( E3 |2 A- R1 t; l  w5 F/ O5 t

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 f. H) N! H0 q+ A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 }! h5 h- j. I6 j2 Q0 b+ t





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