嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! x8 Y2 C" J8 B0 v
Void UPP_TASK(Void)
( S* Z+ }' i8 s# K/ @4 `* [( e{
7 J4 N$ T, \; q% r& l# h, M6 P+ c  T7 M( m8 ~- x  T" A# l
    int i,j,k,target_int_count=2;
. K% d% }$ Z2 P' A# V( }    char ch[2];
  R& }; s% q, R% w4 P$ D# U8 r* C; E) v5 d3 E* S

* `- H) Y' k4 M# s0 R! o5 J: @) f6 n2 F7 i, b$ R: I! n$ l
    upp_interrupt_count  = 0;
, ?0 f. [* B# o: x3 V0 t6 r8 m, x/ z    upp_error_count = 0;
! K  w8 C0 P# z
  o+ o' l9 r% h: T    UARTPuts("\tResetting uPP buffers...\r\n",-2);$ X" P4 k  G7 G
    // Initialize data buffers
: a! {; g7 i4 i- U! }    for (i = 0; i < upp_frame_size; i++)# v3 u0 V! ^2 W) A6 U
    {
) L0 @% h( o& x  d& _7 O( o       upp_buffer_b =i;% F# e% U' Q* H" O8 g
       upp_buffer_a = 0xDEAD;
6 F' |9 Q) Y. n/ ^+ R9 P    }2 U$ W) |' B7 F) h

0 @/ ~1 H7 `: N* \1 |! J- S    //for(i=0;i<1024;i++)
5 \" K& ~9 b, P# h* G& i$ i5 X    //    temp=0;3 I: I+ ]) j) Z6 _' e3 n7 @  X

8 K% R1 ?" B) y    //UPPReset();8 E/ n+ {' _" m, c
    /*启动UPP DMA传输*/
% |" }1 f$ x$ Q( T" \$ Z, G- v3 @    UARTPuts("upp_prog_dma_i\n",-2);
) b# X6 t# l+ s, g' [5 V# O    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 r+ }, `  ^: j3 k" n
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, A7 H0 |! J+ Q' y  c3 R7 X; T: |    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" _2 T7 v' F- ]5 _( t# M1 a  j
+ _* }+ i- {8 `8 [' m$ b+ w" ^  s
    UARTPuts("upp_prog_dma_i\n",-2);  W6 T0 }) [# j- Z
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! A2 D) p) R" f  K6 y% P2 o$ H
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ E7 Y7 g) P% p    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 Y5 {% B/ |. b0 K; U  ~! G
. W/ O+ {4 a/ z0 V2 z7 I. M    /*等待UPP传输完毕*/
7 O- s+ d6 u7 K% a" r    //i=0;
: W% s" u2 b2 I( W3 l. `4 b" e    //j=0;
# G3 F$ D9 t1 ~8 C& n    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! z, e- Q( d' Q3 O) C4 |$ Z    {. {  @6 F* v. k0 ]* g* p
        /*  测试UPP传输的同时操作普通DDR数据
8 W+ T% ^) {: t- S& X( S1 D        temp=i;
0 |& E: Z# N( X& I8 p" Z# {! H6 h        i++;- y. |7 o. j  e9 w: z* {
        if(i==1024)& B# \. @1 Z9 a" J' L3 S
        {& D9 ]/ v  o1 m, M$ R& k
            i=0;/ L% N+ ~( {) i  M  p# o/ L
            j++;
- Y* A) ?0 ~$ G, p: L( A( F0 e        }2 q; i/ ?& X9 O- K- {( v" Q
        */2 x2 a7 o6 n) q5 z  O+ L) C, P2 _

8 t' z" L' C/ z1 J- r- b       asm(" nop");
( I; @6 {6 f3 S; i& s; s& M4 v0 E- O8 S* M9 B. a
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# o3 Y3 N3 |' ?+ p) i; F5 z! a    }
$ }) Y& \2 c6 i. E) M. y  B# |! z. ^
. W' }1 B5 l* ~    /*检查UPP传输的数据是否正确 (loopback modes only)*/( m0 @9 M8 M+ P4 S0 X4 ~- ?3 P6 O
    //UARTprintf( "i=%d\n",i);% ]: q% x3 [1 j
    //UARTprintf( "j=%d\n",j);
7 z3 n- n$ b4 {# h1 R    UARTPuts("Data mismatch in buffers.\n",-2);
& \' l" N6 l# u5 S) P( p    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 ]0 J/ C% m3 L- u/ [- _& n    {
& `% C4 z+ G& v$ `/ G        for (i = 0; i<upp_frame_size; i++)$ j' r4 H/ j7 W/ o( x  ^
        {
. L9 [) @& C# l# n( W+ j% O            if (upp_buffer_a != upp_buffer_b). L) a( P8 r. L( z5 y- l6 H
            {. x, ?' ~* ]5 ?0 q' \
                upp_error_count++;
; l% j' V+ A: F3 Z+ k$ d( T3 A. c            }1 X! F1 }/ B7 ?" K0 V2 O
        }7 P; l5 {2 |6 |7 V+ U7 Z
    }
& d( @- `2 H; D3 N4 `9 s. L% U3 [; m( b* |8 X" q1 O+ m$ _
    /* 报告通信结果*/
7 I( g3 o& a" @2 d2 M$ |) {" k    if(upp_error_count != 0)
% a/ ~7 Q. _) U) G* k7 ]        UARTprintf( "upp_error_count=%d\n",upp_error_count);: s3 O+ E2 F' B0 \, _2 ~
    else
6 g! S9 ]7 O" K9 c        UARTPuts("uPP transfers complete!\n",-2);! Z9 c0 F9 i2 a) i* d. B3 G& s
- {$ H3 l( p# j  n
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ A' |$ Y" ]) L' U    UARTGets(ch,2);
# O( L5 r& H( \( e: Z) D0 d    UARTPuts("\n", -2);
5 G6 B, [, z0 ^9 G3 C/ i; _4 F( M# ?& f# @4 J
    if(ch[0] == 'y')
0 B# B8 E' \1 k# b) C1 k5 B    {5 P& s% F) Y/ G1 q6 A1 j! s3 v6 b
        /*打印全部读到的数据*/% V4 A/ m! `# E: B
        for(i=0; i<upp_frame_size; )
7 F+ l2 I  H8 v0 c# W        {% c$ f' q" I: g) W0 e
            for(j=0; j<5; j++)
% @# p: h* C) t* R2 j- r4 M            {
# q. y$ R; y. }8 {# J7 L                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 i# X. x/ u* A( z6 y: j/ X6 x
                i++;
/ H, [( [/ F$ p2 ]- b                //if(i >= 4096)6 c5 v" F5 \  D$ P
                //    break;
: D. p4 Z3 O" Q' ~# t. T) l5 E& l8 r* O, T, ]) @: o/ g. `3 F
            }
7 s3 K9 j4 H' A* g            UARTPuts("\n",-2);
/ z, S  ?0 z, r" i4 E$ }        }
$ P7 C7 ?& L1 g- }% v* [    }
, y% i7 _2 \8 i! c+ k; {& T$ ]1 f: A  @" [. T9 C; U7 D
}
8 P4 `1 e( U1 |- S5 t4 e
) p; T% R& J  o2 g7 U

( I, r; U: D8 F1 o$ I# K
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。9 {2 ~) P$ V* P* `- B

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 E& \% F* ]2 U0 w





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