嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 j$ n. H& @9 c6 f
Void UPP_TASK(Void)
) D' L$ U; i' T" N! R{
2 ?' x+ ~) ?7 N, w$ c$ t+ }8 B3 D. k6 c
    int i,j,k,target_int_count=2;  q( v% C1 T% s" n# W: u
    char ch[2];# ~+ S6 g6 u: X7 g3 G
+ Z7 x; b1 \2 _9 e9 @
# r4 v6 M( }, T- c
7 Y" R4 U* N& _2 r% \! ?
    upp_interrupt_count  = 0;' Y( N1 r0 t0 N1 y" [
    upp_error_count = 0;  E: y' h; g) }+ a8 d
( b2 M" x! H6 U
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ s) N( E; [/ B    // Initialize data buffers" ]* P- v4 w5 }  s4 k! s! @
    for (i = 0; i < upp_frame_size; i++)
  U8 V' F+ ?1 ~' }2 `    {
! _6 T+ R( V5 x( u4 h       upp_buffer_b =i;2 K. T9 d1 O$ c# {
       upp_buffer_a = 0xDEAD;
/ j6 z) a. i4 M+ a1 u6 q0 P9 y& N    }7 j, H3 [0 x8 w; |4 \
* K; a3 i) T0 H. h! ~4 h/ W
    //for(i=0;i<1024;i++)
6 g/ T" |% M% g0 s7 m1 x% `    //    temp=0;1 K* d7 p- z4 H# \
/ u+ `. }7 s) k" M  S2 @9 I# |
    //UPPReset();
1 j$ e7 S/ `: t: Y% d    /*启动UPP DMA传输*/  C0 m9 C9 j9 v& D% \; Q
    UARTPuts("upp_prog_dma_i\n",-2);- I  y5 g- |& C  Q$ D0 _, D) l
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! E/ T7 p! G7 q. ?+ A1 f* s$ d  Y$ n: U    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( H0 _, V% I* u# a
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);2 r) P8 G( Z# j) ~

% u5 n' [: g$ L7 u    UARTPuts("upp_prog_dma_i\n",-2);3 a8 `: H! q, h/ W% s" {  O
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! ^) j2 s+ i( U3 \  @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# b9 d- W- v& r) s
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" _& P1 q, d( w  v6 E2 O- X
$ ^* ~9 {' K3 V( N  K4 h5 u6 P    /*等待UPP传输完毕*/- W4 O# d8 p5 C* S, Y0 _
    //i=0;& u  }7 x# E$ k5 }$ i
    //j=0;, O5 d! O% x/ r1 p( a; k% Q6 S% `
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 c! O3 Q% }7 Y7 j
    {. _, h4 R4 a" e( H9 u
        /*  测试UPP传输的同时操作普通DDR数据$ |* ]  C: T9 O! r
        temp=i;& w% x; W/ f- N: e7 b' N* J0 w
        i++;! X# \1 |" |  j2 @" t0 s. }$ w1 V
        if(i==1024)% h0 g' D7 Q9 {; N$ e
        {
7 l& z  e: G6 k* w- z* K+ @            i=0;
: O+ n& ]0 H0 A: s' v6 z            j++;
8 ~" C+ X2 c  }( G+ o        }. X0 J6 W" l- l; ~& Y1 m
        */
" a/ b; l6 K. t$ f( K
% p1 ]9 ?" I, T( v       asm(" nop");5 O/ F- R5 Y  u5 ]( e

& l* x' o  ^7 n  P1 y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" ~% f7 d  y1 X* k! F8 A' w1 f    }
5 N# L& W% M: L$ G% B; `, ]  Z
) a) G: m/ P: C    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ _6 e( E" _' ^0 |    //UARTprintf( "i=%d\n",i);" R1 s$ `0 I8 g$ m& b/ K
    //UARTprintf( "j=%d\n",j);0 [. h1 i" g7 Z6 W, s) C
    UARTPuts("Data mismatch in buffers.\n",-2);; w% H3 W1 r5 b" R$ @8 l& k
    if (upp_interrupt_count == 2 && upp_error_count == 0)1 t# n& C3 A  h+ d' i
    {
2 s) [2 q9 z+ g7 T        for (i = 0; i<upp_frame_size; i++)
3 m- C4 l" Q2 N2 R- ]        {0 O0 q: v+ T& }
            if (upp_buffer_a != upp_buffer_b)) c4 g9 u* z2 q! e
            {
3 V0 S& \4 q8 a1 n" H) |                upp_error_count++;
0 X# N; S: E9 ?" v! p0 r9 P) d" q; n            }
/ }6 L9 A; ^5 ~+ A! R        }1 _' j' |7 E: o
    }( o+ r2 j! s; |
$ J0 u9 d7 C7 P) S5 f; y
    /* 报告通信结果*/
; h& ?4 p+ p$ l! `  [, F5 r2 L    if(upp_error_count != 0)
8 J- D/ b3 |0 u        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 g/ N5 j9 R& l
    else
2 `+ r/ U* `" N+ ]) g: H8 R4 ?        UARTPuts("uPP transfers complete!\n",-2);
3 L" r( }7 E( N8 c5 U
2 g! `1 w& w! v7 ?' h" R+ Q* n    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. N3 {4 R. E* E: H& @9 ?
    UARTGets(ch,2);! v  k) i' _( U- h
    UARTPuts("\n", -2);' d1 p1 y! S$ Z* _
! N3 J  v/ L6 n6 A
    if(ch[0] == 'y')* d; x" k/ v3 ^( u* [
    {6 n6 h9 A# i1 E$ U8 m, {3 g
        /*打印全部读到的数据*/. {& v! u% f# ~1 M
        for(i=0; i<upp_frame_size; )' y) @: E; C7 p* V3 h; H0 C* S; \
        {
3 ~8 p! _9 u0 n7 W            for(j=0; j<5; j++)0 b. c6 n( M" w3 I  d5 |
            {. D; Z1 u! g" |- z( |6 G: Z. z
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);9 C% ~* A% t6 J  z9 x) M, Z  K
                i++;; q* w* p5 B" ?7 _: P; O# t4 E
                //if(i >= 4096)
' v& {& Z+ j8 K2 h+ O7 s                //    break;
. D2 v7 z6 o% X  R
; b, f" h$ X- a7 k! L( w            }- W( D9 {% x/ r/ K7 H! \
            UARTPuts("\n",-2);
/ F& ?1 u" X' O) d7 T; r        }1 I3 N/ d+ ~# Q% S' L
    }
3 e% u: N1 ]" Z3 d" x3 A( O& u* N& O& z1 e
}
: Z+ k9 d" e1 k7 o8 y% \; G
0 o/ d$ _9 E& G& g: h7 ?: B4 b
& h# k( f2 Z# z5 J

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。, C7 E) P! g; ^2 K

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。' _* I5 ~) w9 r2 o8 e5 I





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