嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, ?( K, G8 l% M4 N8 T! s' k' B3 ]
Void UPP_TASK(Void)
% o) t* M& R" ]# @{
  Z4 u4 ]- \$ u2 s1 o( n* f% h
, ~* C" w7 H4 I4 F$ r) S    int i,j,k,target_int_count=2;
0 L; B! x  F4 P8 E    char ch[2];2 }) a  r/ p, U& x8 l
9 F: `. ?" X7 ^

# Z( h) |4 s: h% o  s5 {
. d1 W) e6 B0 I; d# ^2 L    upp_interrupt_count  = 0;
8 ~  r0 S/ _) c/ J, j    upp_error_count = 0;
8 |5 t1 @. ]9 a( S3 X3 O6 P
1 Q% Z4 O) `0 S0 A/ m    UARTPuts("\tResetting uPP buffers...\r\n",-2);& `2 Y: A9 ~+ ?4 I0 h1 |& W
    // Initialize data buffers
! m. S* ^0 k+ B' [5 A    for (i = 0; i < upp_frame_size; i++)0 {, a; n  O$ E$ T
    {
" ~2 s/ F7 d4 v7 T$ B7 |2 T1 Y4 f6 z, P       upp_buffer_b =i;* P3 b, j+ A( h* J5 l5 Z
       upp_buffer_a = 0xDEAD;9 S$ n( H! V* _' x) E7 I5 s
    }0 @( C6 n0 x& q5 M, w

; G, i% G  C& B' h1 q/ R  X. R- V    //for(i=0;i<1024;i++)
4 {/ ^+ X. u* A" g/ T$ Z& u    //    temp=0;, |$ ]$ A! O( y8 |0 ?+ i
$ I  h+ L4 X) Z, n) t. x. m
    //UPPReset();3 X& B9 W3 N: x3 ^0 D9 P% Y
    /*启动UPP DMA传输*/
% v; B* d7 ~* R* n    UARTPuts("upp_prog_dma_i\n",-2);
4 c7 T; t' |4 L6 ^% A4 j1 F# C. s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' f' T. ?7 X, v! v    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  q+ ?6 _2 u( {/ U    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 C) O  r' Y. ?9 C
/ P* p: V4 X9 r/ [9 H! f" h1 i
    UARTPuts("upp_prog_dma_i\n",-2);# Y. C) h( J" _. o; C1 b! g6 ]
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 }; ~2 K& t; M: k$ w" Z8 t5 f
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 p* C- O* M7 K9 h! S: n% ~    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; l0 e+ [1 D- ?2 E8 ]

+ @4 G. g3 c# l$ x    /*等待UPP传输完毕*/
) \2 a7 I! y4 ~! h1 h    //i=0;
6 r- h' ^: T% A" a& j5 ~8 |- B    //j=0;6 @' b, l8 d, z+ j  d! {
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* O) f. c' m( @    {
7 t. g# p5 y, L        /*  测试UPP传输的同时操作普通DDR数据: K& ]- J+ ~( A# J' T' F
        temp=i;
0 T+ ^8 _( ~' i- r0 V0 p: r. R        i++;
( {( x/ ^/ B" w+ L: t# u3 ?* M/ J        if(i==1024)
4 u+ I% k  z  x1 A* A' j4 I+ ^* _        {! e: |( v( H% p8 a& t7 ]3 s
            i=0;  J% n* L5 Y. ]( ~8 @3 R
            j++;
7 J3 B1 G6 M2 U& O$ w2 d+ e  b        }/ Y# S& v" X  P, G% i) Q9 p0 T
        */4 w) c; O+ E- p4 X2 I! v

* w! g$ D  k/ t7 o       asm(" nop");' g1 t0 n2 r" \" |4 B! L) Y

+ e) Y( x2 L1 r( i& J+ q       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 G& M' W; o: b1 ~  x
    }4 g! K0 T$ a7 E$ T9 `" g0 @& ]: f$ G
% X/ P! [. ^. h
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# X# y* }6 N% ^4 A" g& f* N    //UARTprintf( "i=%d\n",i);; b  O9 J' A9 n! @" R' F1 g
    //UARTprintf( "j=%d\n",j);
! `" [& _7 m) y0 h% ^6 q% ]    UARTPuts("Data mismatch in buffers.\n",-2);
& D$ Z$ o( f2 F5 e- R    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 A( Q) w3 Y2 ~/ k" M    {
0 Y# ?/ N3 X1 u6 v% W! V$ O" G        for (i = 0; i<upp_frame_size; i++): D  q. n: i9 |$ T) A5 R4 ^
        {1 c( f5 y2 |" S# c# T  c/ P1 r
            if (upp_buffer_a != upp_buffer_b)/ N% L7 a5 y9 J$ m/ ^/ _8 s* }9 k6 s
            {8 n% Y9 U0 B% c; B, Y4 L
                upp_error_count++;
2 R) d  L' a6 @            }
+ A& ?% c- Y) n6 g. [        }
# t; \& u) d0 {% D* h2 {. o  }( ]    }
- v, C2 N/ Y% g: T0 }
1 @, E3 c. r5 G  X" a    /* 报告通信结果*/
! m, z' _. k' z" m/ A* z* p# V    if(upp_error_count != 0)
# R+ T( I/ K9 R: L. e        UARTprintf( "upp_error_count=%d\n",upp_error_count);
. V, o7 d9 g: b# T    else
9 \0 z8 C/ d2 M, w% M        UARTPuts("uPP transfers complete!\n",-2);
* l+ F% P1 M0 ~) e3 H
" e& P9 j+ _% I' b    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: M  u8 m6 j7 n5 d$ b/ G2 @# ~    UARTGets(ch,2);1 p* Z4 C9 A( S) W9 u' f" \1 I& x
    UARTPuts("\n", -2);7 p$ K# m3 Z, Y1 f

# \1 n2 C% n$ T; k. c$ `    if(ch[0] == 'y')) A' l( ~+ E% F+ T4 }- A4 |3 ]
    {8 A8 l$ U3 Y( z8 C2 W1 a7 ?
        /*打印全部读到的数据*/4 h+ P! _# }4 F6 x
        for(i=0; i<upp_frame_size; )! R, L( L/ x. O+ N4 ~6 X; E
        {
& a, N: {2 a. V. y% a- L            for(j=0; j<5; j++)
$ s1 D2 Z' X: }) f  P' i5 u  e            {; h% h! L" D. d$ O. g
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- e* w! ^1 t* f# F3 Q6 Y
                i++;3 G8 L; d6 i) R& s7 b1 b: i5 g
                //if(i >= 4096)
: q+ t. E7 ]% z; I6 e( u7 y                //    break;" W+ t& _& _& F8 e% t% K

: M0 e- N0 E. E" A* P            }
; C: x. R7 y7 F4 C& y1 t& f            UARTPuts("\n",-2);' K- O- V& b; J2 E. w- S% X; Y
        }
8 V& l* w, `' ]8 X    }* X( Y; x( \( n) |) V
0 |4 N8 ^/ `& [& m9 j: u8 D" v  R
}
; l/ }* c  h3 ]( v' L) s% n8 m7 d5 w

$ d. p. v+ {4 k8 Y# r4 V
: g- ?- C: M: q3 Q/ A
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; ]) e5 X3 J# u6 L0 n4 ], o" k5 j
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 n' F- D- m# ~3 [+ `( y. L




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