嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  f: {# `, F* m
Void UPP_TASK(Void)6 G7 I- J: f$ i0 s
{9 |( ~' D2 s) C
1 {0 D5 k" }8 v, c0 T
    int i,j,k,target_int_count=2;
8 t7 z" q: r5 b9 T    char ch[2];+ |. |7 Q) S( _2 O

( U) b1 B# W1 ]* P
* Y6 r) i8 H* U+ Z. Y% [: i6 z9 m; ]8 D$ y! V8 s9 Y
    upp_interrupt_count  = 0;
& o1 q, b) V3 D' v+ a7 w2 e    upp_error_count = 0;7 ]/ y* f% B# L% f: Y% q- _
' u- s& E/ O  |! I
    UARTPuts("\tResetting uPP buffers...\r\n",-2);* W1 t! _2 i1 G7 x* s' y7 q
    // Initialize data buffers
& E7 W8 R: I& o; [+ z* R: ~) X  X( s    for (i = 0; i < upp_frame_size; i++)
4 M- F* k; ~) t- s- X) K0 i2 M    {1 \  Z2 [' [5 \* C* D' E  D
       upp_buffer_b =i;
, a( O9 `# K0 e       upp_buffer_a = 0xDEAD;
1 r# `) ^( M, p8 B2 p    }$ j3 D/ R6 @# U6 O2 _+ G! W& L3 z

' k) [) j: \+ y( x& X8 Z    //for(i=0;i<1024;i++)  z, L/ e5 l- p5 J  O0 N; d
    //    temp=0;
. a0 F. f. U  ^( Q/ O% k& r! Z7 |( G, \/ G" a9 c
    //UPPReset();
0 r. ?9 z: N& e/ E    /*启动UPP DMA传输*/! F8 @! Z8 {4 H1 y* _5 }
    UARTPuts("upp_prog_dma_i\n",-2);
1 c' J4 [. d2 p" H1 i    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ \: G2 u+ h9 Z- N5 S    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# d% v0 f6 T( Y
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ u, c: \# u0 e3 B
& Y, z. `; i. @# e  H; C
    UARTPuts("upp_prog_dma_i\n",-2);
1 C% p' H6 f0 ?/ t+ b7 [  c! J    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! x6 e; ^  `" I
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 C( }8 k( @+ u: f
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; @+ l3 L$ g' n( @- ^: A& g; w% j" l4 }0 Q" O' M
    /*等待UPP传输完毕*/
5 \) D$ }4 U/ ~# i    //i=0;' L, J" P1 `& Y8 u4 ?9 h
    //j=0;) i- Q, i3 K! i
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 z  l: F6 G0 {1 Y/ T/ Y+ x( R3 q    {) c! m) O0 T% \/ k0 G2 S! Q& n# J
        /*  测试UPP传输的同时操作普通DDR数据
1 b' G; {) b: ~  n' N  P( q* Q3 a        temp=i;
( |5 r0 r4 k: u& j- D7 j0 `1 e        i++;
. G: e( A# |6 u& K        if(i==1024)' ], a$ B- A# i- E
        {- R' m1 s% N. y
            i=0;
3 ?6 T% d( Z# a4 ?: O            j++;$ @; o, G" g8 f$ S: f
        }0 n9 ]8 Z/ v- N3 N" c
        */* \& ^1 M1 v9 w' M

1 z# [2 M- {6 \1 o       asm(" nop");+ L/ u9 K5 f3 x: g, P9 }8 e: e( M

3 f$ O; e# c9 V- N9 n1 U' @# O       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ o  w8 b+ K! D: ]9 {5 Y0 k9 m( H3 F    }
5 O) h# i7 H: O6 s2 |1 f4 k' H
/ v. I" z/ V# s+ n. w" W: B) X) Y1 }    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 K  J0 r* J5 c
    //UARTprintf( "i=%d\n",i);$ i" f/ x) `+ v% {  x
    //UARTprintf( "j=%d\n",j);( ~" y% Q/ d- \5 V
    UARTPuts("Data mismatch in buffers.\n",-2);, y$ h9 n+ q# d! n- `
    if (upp_interrupt_count == 2 && upp_error_count == 0)7 F% q( ?' E& F# b
    {
3 W! G6 k9 }' l7 b2 f1 _+ G        for (i = 0; i<upp_frame_size; i++)
+ F' J. [# H5 F8 t$ _: V        {# L; ^" A. a% z  J8 M
            if (upp_buffer_a != upp_buffer_b)# u( I" S" U1 |6 c
            {+ D! C, D2 ~0 O. s% L  z
                upp_error_count++;
" ~8 `4 ], Z( ^* l% @" Y; f            }3 b$ _! k8 ^( Z+ n; D
        }' }7 v3 [2 I/ }* Z* o: |
    }
8 [8 R9 |' W$ @4 [) Y+ ~- M% p2 M! ^
' U$ `/ x9 w$ V6 D) n, K    /* 报告通信结果*/
$ k! t8 N; b6 }$ I; ?  x$ k+ J    if(upp_error_count != 0)2 `- @* t. m! l5 D; V# Z
        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 b7 G  O/ Z: n
    else
: D# G% f7 U' A3 F; ]* l. ?: J        UARTPuts("uPP transfers complete!\n",-2);
& @/ o$ q6 V* h  V: t# s( \& w2 y( V: U5 E
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% u8 I! H5 u& B9 U2 s8 ~* @+ A
    UARTGets(ch,2);
4 l, F# f& O  v/ I! b    UARTPuts("\n", -2);
; N# b: |+ L  [) F' [% E: S" ?6 y" _9 a, Z# |1 o
    if(ch[0] == 'y')
7 o1 |) G) G" Z& h, ]1 |    {
' R! F, g* l. ]4 }        /*打印全部读到的数据*/  a6 K0 Q% }' j: b
        for(i=0; i<upp_frame_size; )
& {) d, p# |1 d; A) p! Z6 S" e        {
4 E- E% B* \5 l/ d            for(j=0; j<5; j++)8 C. C! T7 A/ R- v1 u" y' k" y7 K# v
            {2 u0 M# j8 e/ m6 O1 N
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. k7 k; a0 F# r9 {1 x) H7 @2 p7 b
                i++;" d/ e8 q$ K8 K5 @. G
                //if(i >= 4096)
2 Y; ^' p) }  v! h" R! \; U# A# C                //    break;0 q+ e* d1 W# [& l) w: t2 e+ P' p, Q
) ^4 y3 }  L/ c
            }
  H* Z) j  A) G2 I2 p0 q            UARTPuts("\n",-2);
. k" T/ O7 w. Q! {  z- j        }
" V* z% {9 h; F    }
6 a0 ]% H& J9 ^
$ n2 e+ e' C! j% f}
1 Y2 D* \5 p6 e) W0 [0 E1 }3 ?

: y: H( X& R! A: a
; j; K- |  h6 g4 h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 ^* Y2 m( w. O* f& Y- `
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) ?+ X; |/ M8 \# h! V0 j




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