嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, q$ C. w% s3 ]& A/ N
Void UPP_TASK(Void)* j2 Q- b/ `5 b1 h
{
: ^& h4 x. L$ {: ]9 M9 b
2 q& C: Y( S7 t  j    int i,j,k,target_int_count=2;
# j. ^1 k3 I5 p( R) n    char ch[2];1 C/ w7 R3 k( h9 Q7 a9 f1 D0 K

4 J4 w# M; R9 T+ Z" `. r$ G* L- a8 S. {0 {9 G3 c
. F2 O$ o! M  l- _' ?6 H. Y
    upp_interrupt_count  = 0;  l( S( Z7 E4 U* N  M& T( I
    upp_error_count = 0;) U5 ~3 d4 n  Y% M2 p( w
' ~7 U8 S. g9 O) G9 l" n: t) k
    UARTPuts("\tResetting uPP buffers...\r\n",-2);  \" `2 N+ W+ ~
    // Initialize data buffers
' n/ T% R0 G# W" e    for (i = 0; i < upp_frame_size; i++)* L7 ], f# I& X+ o( o
    {3 ?0 ]1 p: |+ ^3 q" O- T( i
       upp_buffer_b =i;; t# R" t( L1 O* D, o9 [! X
       upp_buffer_a = 0xDEAD;4 A' z2 Z+ R* h9 b7 p7 N3 ?. o7 @; Y
    }
8 V+ `$ n+ d& S. s+ t0 z/ p
0 F6 l0 q+ P2 l* l: |1 t    //for(i=0;i<1024;i++)
4 S0 y" `5 Q) s- _2 h9 m    //    temp=0;
& M' D0 B7 s7 I. p+ E- z* M& i
    //UPPReset();6 B% u& M$ `. o2 M/ @! p
    /*启动UPP DMA传输*/
/ [7 r* T/ u! i    UARTPuts("upp_prog_dma_i\n",-2);2 R4 |& o' i& ]# J+ \
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  w2 E" ]3 \' f: t
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 [+ |$ V  M+ O! M    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 T6 n; v9 ~- t" L4 Q; e
! I6 m5 N: d0 F1 y; H8 b& U    UARTPuts("upp_prog_dma_i\n",-2);
2 a* W  H( k5 u# b, ~$ n- V+ C    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( R  q% R# i% p0 g. I5 M' D    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* |1 y6 E: u8 \
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  r, V! H& `" @4 h4 U* p- n: ~' b# P+ t1 t5 L0 Q) ]
    /*等待UPP传输完毕*/9 |+ h& N5 W* R" \1 J/ f
    //i=0;
, o, I. D9 W1 |. M* y* d    //j=0;6 m+ ?" b3 r& h/ E8 w6 P( _
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* \" p7 y2 K- V+ H2 F1 m( t
    {
- x) R  n, y" y/ R        /*  测试UPP传输的同时操作普通DDR数据$ q6 R! W- R  ~
        temp=i;& e- u$ Y5 B1 B' x" s
        i++;+ b, _# C$ B7 v
        if(i==1024)+ F1 E) K) j5 C7 J! y: z4 j3 Y
        {
9 [/ T: Q* e6 y4 }& H# b( m' O+ p4 t            i=0;
* }1 H" E' @, M5 n2 I            j++;7 V0 q# ^$ ^7 A6 u
        }
2 }: h5 B* W. |% u2 K( k) n        */
, q8 F+ T0 z  v& o  \5 v
% D/ }" r" T: b. Q* K- N* Q! ?# S       asm(" nop");  y# R) C. I3 u: h/ g9 W4 d2 C

6 m: ?$ F+ `2 k/ z. Y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);3 `7 T& O# I8 i% @
    }. n4 I7 H' z5 _9 o
  ?% h" L4 A  z1 v5 u5 T4 Z( e
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ v9 Z$ _( c9 ~2 L, Z8 Q/ e% l# s    //UARTprintf( "i=%d\n",i);4 x* G! b) L6 W
    //UARTprintf( "j=%d\n",j);
; ~$ G) b. l7 Q" R    UARTPuts("Data mismatch in buffers.\n",-2);5 q- K% U5 L; g
    if (upp_interrupt_count == 2 && upp_error_count == 0)1 J: Z* o1 Q$ w$ I
    {
5 `  N3 h3 ?8 _7 c( M        for (i = 0; i<upp_frame_size; i++)# v9 o* C  F2 S# u+ R5 c
        {
) T* O! I1 d( ^  T  K            if (upp_buffer_a != upp_buffer_b)
, z. y4 R) q, b- p            {
. v. N' t& D& L6 G# @% t5 j, L                upp_error_count++;# p' r2 M0 G& s9 o6 J2 C
            }
8 k  e2 `) h+ c* E        }$ }. v8 ]/ f& u5 G
    }2 b; {: G9 f! n5 I. {. W3 a  {5 d
' Q5 P* Z2 S0 j, E( P
    /* 报告通信结果*/
* `# t% F9 \, h; b* ]: A: B    if(upp_error_count != 0)
/ W& J2 m1 F4 N) y& H% W: I) q        UARTprintf( "upp_error_count=%d\n",upp_error_count);: U1 {) u. e( D  m8 @% V
    else$ V+ [% I7 D! Q6 k$ w" Y! l
        UARTPuts("uPP transfers complete!\n",-2);
4 X1 H+ k* Q% e' s0 `! M1 c
. d- T( l# b" v, p, ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- Q  Z1 Y5 ^- M* M0 \& u7 f: X    UARTGets(ch,2);
) r/ u5 U6 R+ c: a1 Z; Y* c/ \    UARTPuts("\n", -2);& @* `% H" J) L

& S5 R& r8 p" y    if(ch[0] == 'y')
( u  g( U: ]+ w8 M    {0 P# F& i0 y3 v) H4 K3 O
        /*打印全部读到的数据*/
; c0 M3 H4 l: P/ O, M/ V$ c        for(i=0; i<upp_frame_size; )
9 S; [: ]0 }( ~! W! L        {4 A1 o+ C; j# o1 t" b% D$ H
            for(j=0; j<5; j++)0 u8 u: _. D- Z7 g
            {
6 W* R! @% e' a0 q$ R6 V                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 w; t* G9 j7 ^# P& W                i++;
: a7 B* \7 G. R1 Q1 q3 b6 I                //if(i >= 4096)
) d# }+ x# W7 F/ r5 p                //    break;) F6 u/ K; f- i+ w
4 m9 X; A) B! Q7 ~
            }5 m, P( i9 O2 r
            UARTPuts("\n",-2);( }* ?& ?0 \( t. |
        }" ]& a$ Z) X/ {9 L
    }/ G7 [; w6 ^" V! e

+ a! E) G& h8 d}
# {) f  `- N5 D* d/ D- Q

7 t. \0 h3 O9 ?3 m9 K1 K  p5 R8 @5 h& j" _' y: J, z- c

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# H* V5 m3 f, p. {

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





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