嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 d4 p5 M# j8 B, V& a  f% n
Void UPP_TASK(Void)
7 l; Z! M7 V3 Z9 g{
( K9 O- {- p$ r2 ^; h1 {$ D; v! I/ V2 \5 G. \7 f# N/ o5 e
    int i,j,k,target_int_count=2;- s, O; j$ p  Z
    char ch[2];5 D3 ]! s- n# M  [

7 M  M- H5 k3 A* L: U9 N, y& W# D1 \* E( z5 F, u: W

7 ~. u7 k: t$ i. ~/ d6 y7 T& P    upp_interrupt_count  = 0;2 P5 P3 k6 I; j8 @
    upp_error_count = 0;
, w. V: Y+ L- W$ n
( j! \$ q" M3 H4 ?" K! Q8 g    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 n; E( p# X. n4 ^( z" u    // Initialize data buffers
  P/ Q& x. H; [9 I) e$ T7 d0 A    for (i = 0; i < upp_frame_size; i++)
4 Z' j* Y+ U/ m    {
+ S4 k  b$ C' Y       upp_buffer_b =i;. E  L( X! j. z% T. n9 N6 k
       upp_buffer_a = 0xDEAD;
3 x5 T- _. z9 s    }( v' u5 ~6 y: ^1 y7 i

/ K$ ?9 Q  i9 F/ \5 w( u# d' [6 Y    //for(i=0;i<1024;i++)
" b9 v+ |6 E1 r1 z' O: Y- F    //    temp=0;2 ]4 @' B; F+ G/ e, w7 S
9 b* U7 h0 G1 _1 E
    //UPPReset();1 j, v* d# o3 a7 \7 U* Z
    /*启动UPP DMA传输*/
% |- Z! ?# n# g- N    UARTPuts("upp_prog_dma_i\n",-2);
7 W) {3 `7 ]( G$ }! N2 v    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* N& g8 q! e7 y. A    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% @( d7 H/ {. ^* W) e. z- L4 E- x
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ q6 n# I2 m! K/ W, J. Q1 D! G& a( H( |% ~0 ]% @
    UARTPuts("upp_prog_dma_i\n",-2);+ G6 K! y9 {; I
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 r: Z% H8 }- o8 L$ ?+ z8 w7 `$ g    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 {; t0 g1 u- m    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);4 x, \' r0 r& q. i: i! U
& F* ?/ ?2 O  B$ y% j- S. X3 N& S
    /*等待UPP传输完毕*/) P: P6 e: X) Y" K
    //i=0;8 T5 m1 q3 X& y" s7 @# F
    //j=0;
% X' x- v6 o8 Q    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- k0 Q! u3 H+ i* T1 D# m    {* i6 n4 I9 `- G" w0 h0 ?- W
        /*  测试UPP传输的同时操作普通DDR数据& ]$ A1 ^# S3 ]$ q0 [* `! }
        temp=i;
; l; c* L1 D9 \6 c8 K        i++;
3 q, Y( Z5 W  R+ G        if(i==1024)" }' V0 X& w9 c: q$ E
        {" W( ~$ g$ L: ^8 V
            i=0;$ P* l4 U* G0 T# {/ x; W) V* u/ b
            j++;9 f% m8 T7 N' Y# |, t0 V5 l8 j; i' V
        }7 t7 w. d4 G$ N
        */. l8 W# i6 P9 Z8 h! a* Y

& X9 V- I' W" v$ S$ L4 S0 K       asm(" nop");
, y! D" ^9 n$ o" d/ \$ r) v% e9 l" a7 S  Y' S
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);2 U+ Q" x4 k' ?6 A. c" [6 b
    }
( f. S7 @8 @& Y4 W% a$ P/ `* ~) J8 b5 I( ]* P( P$ m4 y
    /*检查UPP传输的数据是否正确 (loopback modes only)*/" `' K# Y" i; L
    //UARTprintf( "i=%d\n",i);3 f+ }/ o4 b% b) N! U
    //UARTprintf( "j=%d\n",j);
8 Y1 f' @; a8 p( a    UARTPuts("Data mismatch in buffers.\n",-2);
4 X, o6 D! P% n& l3 u7 a% o7 A    if (upp_interrupt_count == 2 && upp_error_count == 0); e6 I0 G! s  z# `& Q1 Y4 @
    {
7 d$ _2 l% O5 N- ]        for (i = 0; i<upp_frame_size; i++)
- Y" _& k2 B) L8 _! ]& C- V- n        {% u8 |+ Y* k& F/ W% N
            if (upp_buffer_a != upp_buffer_b)* L2 E+ s( B8 I! Q$ B3 T
            {# F4 h, w- y4 K" e+ H1 Y
                upp_error_count++;
$ [6 C" e8 R$ T/ ^$ f( t            }; u, d& _  m$ A& F" C  w
        }' C9 O8 g( ?+ u9 F  w
    }  u9 H4 [9 y( a; G4 w8 x) B

+ I# x  t, o2 T* N5 c    /* 报告通信结果*/8 f9 z" B, I" v- l% K
    if(upp_error_count != 0)4 \0 K9 M  T- f4 g: i  g- ^9 d
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* a* J5 X( Q8 c* |0 s    else
" m' N1 ?2 i5 {  w+ M% _1 ]/ Q/ _        UARTPuts("uPP transfers complete!\n",-2);
( d9 ?+ c& j! i$ @2 G: d7 q9 d( a  j1 A/ o# t* c
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 ^$ G7 {0 V3 P, d* a. L    UARTGets(ch,2);0 B  J/ |* p' y  s! |% z8 r6 j
    UARTPuts("\n", -2);
) v2 S2 l7 B2 V* }; J' ]7 z9 K- I/ m  i! {4 d6 E* }- Y8 y2 t* a! @0 \
    if(ch[0] == 'y')+ v- y$ `% K9 Z9 \& B: J6 t
    {
0 D* l% \9 y+ T        /*打印全部读到的数据*/+ _  M* W6 V7 i
        for(i=0; i<upp_frame_size; )( d- i; m  n# S. O& M4 {
        {2 e3 u: m; [0 s; d: V% r( A
            for(j=0; j<5; j++)
6 @% |  s: k' i3 }3 K4 I+ l9 f            {
1 i* V7 Z* K6 D$ F7 n                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
5 H, f7 h5 r# T% N* \, X                i++;! R5 m' n' c  a
                //if(i >= 4096)6 ^' _' a& w: n" I7 E' K0 e
                //    break;3 z0 j. z- z& D: C' m( h

2 n" U, L3 k& t2 Z1 f            }
4 @5 g" [+ {7 f            UARTPuts("\n",-2);6 u* d+ C: o, u( N/ B* M6 t! [
        }
3 _1 P; D& X8 {3 D( n    }
& J# `) W! f, H6 v$ C) ~- Y
/ `1 P% i& |$ g& A# @. |, g1 ~}
1 v$ c3 [. q2 [4 }4 Z* A

8 l( ]# Y% _: |4 l# f$ }) {. c& b- B0 t1 R2 v. ^

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; S& \7 u2 l) j/ P$ A1 o' P  l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; l7 b* \! j8 ~( A





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