嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?' j5 ^; v! ^: S, m
Void UPP_TASK(Void)
# C1 D% ?8 {; C5 y{
) Z  {  P' y$ u# e; i& m
0 A5 b0 E# M6 F7 E    int i,j,k,target_int_count=2;
; d2 I: _+ u+ m$ D* Z& \    char ch[2];" r, a) z  X4 n: f
6 q. ~( q* H7 b6 H9 {/ g1 D4 \
% V2 q" E# ^+ [5 Q- O8 b- G

. P( Y: F6 U: ~) n0 U" r: D    upp_interrupt_count  = 0;
* t$ ~( g. f  D4 m    upp_error_count = 0;
+ J* t6 V1 U  Z/ M' p. d" H% p( p# T) k' W+ b
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
! ^# x! n: ?7 y3 \    // Initialize data buffers  T7 e5 r, L  X7 }6 m
    for (i = 0; i < upp_frame_size; i++)
6 b! t  Q( w0 K    {2 D- w- y4 ]# f) y
       upp_buffer_b =i;$ Z. P# C2 |" K/ a
       upp_buffer_a = 0xDEAD;
" f0 P8 ~2 J* |    }, N+ J: k( K" e% ~- Z/ Z9 A

' G" a5 X+ C# U% \) A, |    //for(i=0;i<1024;i++)
; o% s7 A/ N) l: c/ o    //    temp=0;
/ F5 T; D$ V, m- u0 X4 M; }0 d  f5 x+ |, o' T
    //UPPReset();* `7 U- T& j; W6 o- c$ o
    /*启动UPP DMA传输*/
  B2 g1 Z" s; J+ v% B    UARTPuts("upp_prog_dma_i\n",-2);# f, `/ m0 O1 N6 p3 E
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 s7 s( _/ _* K) h) k; z; R- O6 G
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, ?$ ~6 x) u) _8 g, W8 l    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* u, q- `& }% K' p' f. F% n" y2 p) U" H% e1 C6 z1 V* a
    UARTPuts("upp_prog_dma_i\n",-2);5 w, K7 F+ o' M/ m: A) l* b- b. {
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( D8 S  J% C/ a  `) {. u) K    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ X/ F! F4 S' y! j4 O
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# G' C0 ~5 p- x5 W4 S! s
! o# z8 i! ^1 {    /*等待UPP传输完毕*/
8 i2 D! o. h0 g$ I# f    //i=0;: ?& S& @* u+ W& U- P
    //j=0;$ A1 C$ t. M$ L5 i- D
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)3 E3 F3 G/ M. _9 X. A- I* d6 E
    {
+ O- }$ V8 F# c7 N( [# e        /*  测试UPP传输的同时操作普通DDR数据+ U! R& d( }7 ^
        temp=i;
% y& s  w) i0 ^; `7 o        i++;5 ]- c: l  [3 M2 ^3 p' `! {2 V
        if(i==1024)
/ a; a  O6 _0 R        {
% n' A6 a; S0 I4 S& O+ I$ C0 v. a            i=0;
" u/ |6 \' G) v2 X, m$ m            j++;* K9 K$ B0 P$ D! L* [" ?
        }5 {/ L, K* I2 ]' f. d
        */3 S0 M+ K  w- P) q7 J
3 k. ~: U: N& Q9 ~( e% _( l- L) m
       asm(" nop");0 I6 a/ P6 z+ x: I8 U5 T0 ?8 F

: a& y7 z* `9 T6 `. z9 Y1 f2 K       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" g+ W! ]" _+ {' V: z! s  v: Y1 G9 V
    }, s) ^9 E' L; _

# R, E8 C/ {# J  M& C5 A, O    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 \% o0 q6 P6 A. V0 r
    //UARTprintf( "i=%d\n",i);; q" d  x: c6 B. E6 v
    //UARTprintf( "j=%d\n",j);
. ?+ x0 {+ K8 m9 J7 I    UARTPuts("Data mismatch in buffers.\n",-2);
- A, K% q. p" }3 k8 s    if (upp_interrupt_count == 2 && upp_error_count == 0)
. y' P5 z; Z/ ?' g& g    {5 b. B/ s9 r7 o' A: J) o
        for (i = 0; i<upp_frame_size; i++)
1 s% ]. X% ^$ m) F; M, I        {% D% J" D+ C1 O' m
            if (upp_buffer_a != upp_buffer_b)
0 Z- p6 N6 u4 \6 c  W+ x. K            {; W) |2 c2 |2 o! P
                upp_error_count++;3 ^1 P9 b3 N; d7 {/ c6 i. G
            }
& e; j0 o6 Z6 E1 B9 g        }1 O& x, Z; n2 }# |0 T
    }) M' C; Q3 Z8 q4 ]3 Z
. ]% k/ X, [. F, k* Q
    /* 报告通信结果*/0 `# ~7 X8 Z) }. e( v
    if(upp_error_count != 0)( A; H. W7 `$ u7 ^# G" F; F4 S
        UARTprintf( "upp_error_count=%d\n",upp_error_count);  [# ~! }, k) [
    else
. R% _* F7 b% r% c4 K, y        UARTPuts("uPP transfers complete!\n",-2);8 M6 A! r! l2 H. ?  d

+ R: ^0 j( ?4 H( F$ C    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 p% H" w; i1 R, H& q    UARTGets(ch,2);
% y! _- R5 l% m5 K  p1 W* s" v    UARTPuts("\n", -2);+ Y7 b( T: i9 N6 B
! C: e5 g5 ^3 Q' y3 b# T
    if(ch[0] == 'y')7 O  Q3 y+ x' h: }$ r
    {' D2 [' o! _% J6 ?7 {$ m# G- g
        /*打印全部读到的数据*/
/ `+ L1 L( B. C& |! J7 T        for(i=0; i<upp_frame_size; )
6 b) z: k3 O( Y; _        {) n9 M8 v3 }4 x0 g4 i
            for(j=0; j<5; j++): Q1 u/ v. c+ ]: s' e/ w% A
            {8 F9 L, s4 q: }- |( c& ?# T. O: N
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) j4 B& A' e! W9 b
                i++;% U% F/ v' D% Y8 C, c1 V
                //if(i >= 4096)
- b' |9 G( W; Z6 f                //    break;
+ M8 e/ D3 A( r( a$ P& g6 u" b' y' @+ w4 J6 E
            }
: B8 n# C2 f+ B/ j& i2 u            UARTPuts("\n",-2);
# d: Q6 ^/ ~& U- m: {, _" Z        }
) K- k( j3 T2 ?; y" t- I& L7 r' B    }# Q2 I: n; s( G; v9 ~

/ |6 p" h5 P& \: P4 _}

: K% w0 y6 p$ x7 b

2 `' |3 g" n. M6 }4 g7 U* e8 H3 U- _$ _! h( O6 w

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 E) D- ~, C. |+ a. @5 V  I9 P, w$ w
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 B# P: f7 l! a# J5 K





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