嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- T4 z  P% P1 d3 I9 ?
Void UPP_TASK(Void)& a7 y" E0 w3 ^) E/ B# S
{
9 ?$ I3 S  b$ f6 z" h
7 o* F0 P+ Y9 c; H6 M    int i,j,k,target_int_count=2;
$ y/ K2 n" J; D$ Z    char ch[2];' P. L, Z  I- a
" |& t; ?2 Q. y
6 r9 g' x% ^3 Y+ ?

9 K$ O8 g* Z% m# Q( L3 C5 c" f2 x    upp_interrupt_count  = 0;
8 K! ~, \* Y! I: `, _" c    upp_error_count = 0;
1 a, N4 I- u- S0 E" |6 i1 I
2 N5 v9 c/ K) r8 T; y4 j! a- Y    UARTPuts("\tResetting uPP buffers...\r\n",-2);, {' j& P. |* }# G% X$ f
    // Initialize data buffers3 m  j! c1 G% l# T
    for (i = 0; i < upp_frame_size; i++)
  }; G$ e6 S* A& |* T$ i& I    {' |# {9 K" F( s4 u
       upp_buffer_b =i;% S3 N' ^! h4 R' J; m) l
       upp_buffer_a = 0xDEAD;
7 t- w/ ~" K2 t: T) V: n# `    }2 W3 X# K& I/ Z

6 R% C$ @- z% [. P9 p    //for(i=0;i<1024;i++)' S+ ~! [+ L) H6 U8 p
    //    temp=0;
6 J( w3 ?0 D" ?3 Z0 K
. ?1 D0 V7 O" I1 W* c7 q- I4 [; m  K" A    //UPPReset();' `$ D. D2 R4 P) \% z5 i
    /*启动UPP DMA传输*/# O6 V' U! z+ |( h5 ?
    UARTPuts("upp_prog_dma_i\n",-2);: V8 b% L% r# Y7 ]- b
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 J% V" L& f, ^; `+ y* _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 }8 ]& u9 R0 q9 A  H  _8 N    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: D9 Z* |1 Z5 F: V/ E2 p9 R
% _1 O; H# a) w( @3 d* @    UARTPuts("upp_prog_dma_i\n",-2);
2 H- ?' x3 H# [( o; f: N    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) \4 T! u! k& i5 S7 Z. O    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) ~3 m( M$ G. ^  Q0 ~    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ N. S6 v" l4 V6 O

3 A2 \6 I; y; ^% k* b5 Q8 X    /*等待UPP传输完毕*/+ f- K: j* n9 j( r. ~
    //i=0;( ^1 [, x% H7 A* G7 _1 k( }! K9 H% i
    //j=0;
7 O, Y4 k' r4 P3 K( K    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* D5 N6 s7 g! z  O7 U' H
    {. {, v) E9 w$ X9 V+ e; p# ~
        /*  测试UPP传输的同时操作普通DDR数据, G0 H. E5 U& S# ]; M) A- ^: H
        temp=i;) N" F1 h" n3 {7 p- J. i" h
        i++;+ t0 G' m0 F# T. ]% Y
        if(i==1024)
% ]- s8 S& x8 C* g        {: Y0 N- o- j, t: }: r
            i=0;3 q( L/ ^. o: H* b( v& k
            j++;+ ]) s5 ?. \" N1 o, t, {
        }
1 W' N6 o  }& i% H        */, d, v, d0 ^" e& o/ `1 `  v* k
8 i# t0 ]0 G2 T% i4 _! d2 \7 ~! s
       asm(" nop");) Y! f7 F8 w, A9 r- ~
6 U* }- \( U/ @3 Z
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 V. b, \+ u- J, T- Z    }
' h$ J* Y+ r* ~6 p, l( t) E& A1 ~" D9 i
    /*检查UPP传输的数据是否正确 (loopback modes only)*/! h/ m$ h" K( I- ]: Z4 k
    //UARTprintf( "i=%d\n",i);* Y% k' Y, y4 ~. D* T+ T; [
    //UARTprintf( "j=%d\n",j);+ ^$ V; z+ F! T1 u+ b
    UARTPuts("Data mismatch in buffers.\n",-2);
* u  i0 i. z* Z    if (upp_interrupt_count == 2 && upp_error_count == 0)
& a. Y$ }  ]# j    {
1 O9 ^0 f* ~4 q3 L. P        for (i = 0; i<upp_frame_size; i++)( o% H% z, x- l2 j2 _2 J7 D
        {
1 X* N: @/ Y( E4 `0 E) l) X& R  _            if (upp_buffer_a != upp_buffer_b)
4 z! ?$ j) W5 E            {
* ~* t1 \; s% q! |4 t7 o1 k                upp_error_count++;
" x2 e2 ~- ]. {8 e0 Z& R            }0 J9 b% a7 h$ w2 Z
        }
( ^8 ^9 I+ R/ X& D, q# ^    }
! K. N) i  M! u  z: |* z
1 d, F. K) X  }, [3 d. q( m2 C    /* 报告通信结果*/' u! n0 F' ]8 E6 z, w
    if(upp_error_count != 0)
9 f$ u5 u7 ]' Q: B        UARTprintf( "upp_error_count=%d\n",upp_error_count);- w: D% H6 C$ f
    else- ]* c5 l* @2 u. n, U
        UARTPuts("uPP transfers complete!\n",-2);3 l7 G% W. I- V* `# R

" o8 R$ r- |, Q- j- A* V    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
% Q, Q8 r. r7 x& y    UARTGets(ch,2);
6 X5 X4 d- v# M8 w0 {& a: g    UARTPuts("\n", -2);
2 {% F8 y0 A* P* J3 O$ O  \4 b5 O$ j* M0 w- r
    if(ch[0] == 'y')/ O5 {9 S7 T+ M8 r7 F+ C
    {" N) z" S- S3 c. I
        /*打印全部读到的数据*/6 q& v- C% N$ D: q, A5 \
        for(i=0; i<upp_frame_size; )  }  n# Q0 p  ?( G' _
        {" t) @* ~% p' t- j: r
            for(j=0; j<5; j++)2 A5 J  B6 N0 M5 g9 W4 K
            {( g9 i9 e+ K1 b$ B. `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 B7 x6 ~7 i0 |9 ?+ X. k
                i++;% g2 _0 v. q& s" t
                //if(i >= 4096)
$ J4 Z  L4 U& L( \6 x                //    break;
4 n7 P$ i4 a9 @) ~' V/ v6 D, E6 V: D( f1 c  f5 T( T
            }8 i7 u; C7 i! Q; H' \; I: z
            UARTPuts("\n",-2);
5 Z+ }4 E3 u; H7 u4 ^& g8 e- a' t        }
& u& l4 w8 u! p& _    }
/ ^  N4 t6 A+ c( |* Y( ]0 h* s& H1 J* H1 a0 m$ q: y
}
! w- A: f8 i& P0 J3 I% M

. g9 j  D* P" I- {" ~/ o
: U* E/ h' [0 O
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。, S3 q! C* U0 D* f' n

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; ?  j; C) w9 Q; c- x8 y4 p3 F; o





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