嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ ~5 B% z, g7 U! G2 k
Void UPP_TASK(Void), Q% ?( _9 n  u% M! |: J' K4 y
{+ m! X4 }- a3 p) H# R

+ T" ~- @, I3 c" j: m! j    int i,j,k,target_int_count=2;
& `- I  H( o8 i    char ch[2];
) V, ]4 q9 o, h
+ N; q# g, u/ I0 n) Z9 c+ w6 b. n
" e+ T/ E# _( m  W. P3 x# O# k  H7 S( h
    upp_interrupt_count  = 0;/ J8 W6 @' F, U' G9 z
    upp_error_count = 0;
' ]- ^2 }( G9 u7 m4 ?5 z( ?; J5 C: t% y0 b1 d5 Y% O
    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 }4 S+ \; F* w; E' j( g. W
    // Initialize data buffers
6 }* c( z3 O- p0 E    for (i = 0; i < upp_frame_size; i++)
  ?' C; w! K  ?4 x- t    {& o) G2 k+ {" i; @& l( K
       upp_buffer_b =i;6 b# D) e8 f! J3 ?$ n
       upp_buffer_a = 0xDEAD;
  M& k7 y+ [) t8 C4 i$ w% [( M+ p  {    }
* p+ K3 l+ l5 j$ Y$ }$ _5 c( |  G
# T! r! J: b: X: f( D$ |! [    //for(i=0;i<1024;i++)
" H$ L% \* b( u$ L, x    //    temp=0;, L; e1 m  k- J! O) I2 Y6 c3 B

/ y+ d% F2 P0 Y1 N    //UPPReset();
6 {9 d1 A8 M6 g: \/ A    /*启动UPP DMA传输*/
. E; r" E, r$ E9 o* e0 q8 S    UARTPuts("upp_prog_dma_i\n",-2);
* C6 O1 O" I! n1 o( M. f    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% J7 Y* L9 M0 a/ F& r    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 v5 u' ^0 O( R6 @1 I2 q- e    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ U) y9 C* j/ m# G/ z
+ s. r1 [1 r  n' h9 l
    UARTPuts("upp_prog_dma_i\n",-2);
  C+ }, t, P9 A) _& {6 w+ L# {* j; M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# O4 k' {8 p" L7 |4 Q    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% k6 l8 F; K* J7 G7 c
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);1 v$ O5 ?, E: i. o
# Q. o$ p) f- e  B7 u' j0 u
    /*等待UPP传输完毕*/) a8 g5 G; i( Q: @$ G; X: }
    //i=0;
! A" r! q( ^: K* V  b    //j=0;4 x# M! @/ }; D& M
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 i5 r3 v' h; m) F    {3 {( |' n% v% H7 C9 [
        /*  测试UPP传输的同时操作普通DDR数据
7 O# O" |8 }0 z# f, X8 s        temp=i;
9 T2 P0 t9 N4 L. v$ N        i++;% V3 \  r* R5 e$ @+ |- m# t7 j" Q+ t
        if(i==1024)
/ x* ~: x: a' C+ d. u6 }' L        {
3 C6 s' c' X5 T$ @' A            i=0;$ b. l8 N* y' i: C+ J5 R4 y
            j++;1 p1 N. G8 w' m9 e3 o% e7 D5 D
        }
( w' o! @) m, x: G8 [        */- L8 S# U& l8 _" \

4 B: P9 K2 I; X( K+ T( s       asm(" nop");+ z4 k- l) {7 P/ q

- u0 g4 f6 `1 I2 w       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" k7 f8 Y% N" }% }- b( `/ R0 ~* s  d
    }
, h) ?; {" k) m  S
( E- d, f+ U1 s    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 x& `; [0 H% q' q- D
    //UARTprintf( "i=%d\n",i);
- h, F  m) Z4 ^    //UARTprintf( "j=%d\n",j);! A1 B3 K: }  E  Z* `$ K$ ^* K
    UARTPuts("Data mismatch in buffers.\n",-2);1 j) H8 y: ]8 G' Y; l/ O. ^
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 ^! D; y7 v/ o# L* L    {* z6 R, h0 e2 Q6 x4 e  [/ J
        for (i = 0; i<upp_frame_size; i++)* y' N- Z: w. i: h
        {
" T3 Y- a2 z0 Z) c! f2 B, g            if (upp_buffer_a != upp_buffer_b)
3 y$ P/ W/ D  J* P            {
! T; P* g: i& Z7 r# ^                upp_error_count++;
9 `9 J/ g& }) Y  V, X            }
* l8 ?& T$ w8 r# }3 w* G        }  H$ M. z' k, y, B( a
    }
9 g! l" p# H( ~0 O: }
- J0 V5 _; d& K9 Z- D    /* 报告通信结果*/
5 K& J! S% }0 L    if(upp_error_count != 0)' l( H5 ~1 A* w5 F8 q; r  }
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 L" Y4 k4 a) G8 }% C7 _    else
: M3 i& b+ e" g2 H        UARTPuts("uPP transfers complete!\n",-2);" @2 e! F2 Q# c+ V. f

; N0 H9 w! ^, Y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) D, O2 Z0 A6 e7 Z' n9 a" C1 `' D    UARTGets(ch,2);) u5 ?; Z4 @  f8 Q9 P
    UARTPuts("\n", -2);
7 @" C3 Q& N  p! S8 l6 B8 L9 k2 ~2 u2 M- b
    if(ch[0] == 'y')* f! R& [1 }6 @4 z( C+ k
    {
" N# |7 M* P' Q7 ]        /*打印全部读到的数据*/
! g- }! T/ o; J7 h8 o* _) ]        for(i=0; i<upp_frame_size; )
; M+ s8 l/ J) j9 i9 {1 d' s6 K        {" E$ ]1 O' ^2 G6 E  U3 u- ?
            for(j=0; j<5; j++)0 K: `+ M" U$ |3 W
            {5 _- C% P) o9 E) X0 |3 O4 M5 P8 m: B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) U9 P8 \6 C( I7 m
                i++;
2 v: B$ V3 [$ u) I& f4 D- R+ A& p                //if(i >= 4096). Q; s& c  U  U- K- {; N/ M
                //    break;6 Q+ [: X% }" H- R/ ]# T

1 P% N5 P1 q! d% {3 H* l- h            }
1 q) U6 W; a, U: y& ?            UARTPuts("\n",-2);' H  P; J! }% H5 s7 ]" y( i
        }
% P, e# R% ^. z1 S( E) B" ?    }
' z* e9 w  P, m' z( x% y4 @) A8 _- O- Y: z  P$ G
}

2 f/ [$ ^9 e6 j0 B$ b" k1 u# Y1 U# f
# s2 ]4 |9 Z0 U
5 F$ D, ?+ r  I+ O# E$ u9 f

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 b! g0 r% w7 |. _. `) d/ `
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 J3 F6 x! _3 s6 h' M





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