嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ C  g% k9 P- n$ R* }
Void UPP_TASK(Void)8 |) T/ [4 f' C5 x9 p8 K4 b" H
{7 s% h: G! ]+ V1 U, k
; z$ j6 M: y0 r, G  ]$ \
    int i,j,k,target_int_count=2;
. W8 K: o7 V: p+ j7 y# P9 I6 K    char ch[2];
+ ^. R- x! @: v# I
3 a5 b  g3 n4 y7 s# ^2 s
1 ^: M, r8 b% R$ R
1 \/ B; }2 d' M) c7 \( c' ]    upp_interrupt_count  = 0;
9 y* R' V' _% Z; M' G: s/ W4 d# v    upp_error_count = 0;3 @: P/ w; v6 @
4 r7 n6 L1 R+ u* z) h& O& [
    UARTPuts("\tResetting uPP buffers...\r\n",-2);' K. \* l9 W7 w( E
    // Initialize data buffers
; m2 l, l: ?' ~& G/ _4 n2 B8 I9 f$ ?    for (i = 0; i < upp_frame_size; i++)2 W: Z( P) @4 y0 @( m7 P1 Z
    {4 u/ m# u' y/ Y+ A4 O; P. l
       upp_buffer_b =i;
/ k3 ?, Y. s; g5 ?7 t# `       upp_buffer_a = 0xDEAD;$ a5 h9 T' I3 H3 u* ~  z
    }! a, H9 ~5 o5 n3 {

% `. v6 A( u" A    //for(i=0;i<1024;i++)
, x( C$ [" r5 u! B6 R. S3 [& e- ]    //    temp=0;& K4 K6 f2 V3 R& e

/ Q% S$ o5 q- T2 E$ _: ^    //UPPReset();2 h  r6 K+ {2 Y% J4 C
    /*启动UPP DMA传输*/7 ~; L9 N0 @: I, h
    UARTPuts("upp_prog_dma_i\n",-2);
2 G7 r' I2 |! |6 r' f1 I' }0 q    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% E' s" R+ X% j1 t3 F6 s9 W
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- k* v6 o+ Y8 A6 l" f
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ R& D4 T; I" a0 ]

9 M8 y4 q* v* e  D- b# G# y0 q    UARTPuts("upp_prog_dma_i\n",-2);
* J6 F4 M0 g0 }    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 N; w/ k- `( K$ C1 D    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; s$ |* D; _" {( y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 O( B: j+ D+ I9 a. c: W
3 h* z, Q  r8 J( @    /*等待UPP传输完毕*/9 e7 v, ]2 }: ]) n+ M$ `" @/ ]
    //i=0;
4 x5 y9 k7 Q% p+ U    //j=0;' M- Y; R) u* y; I" J$ B6 O0 q7 R3 e4 A
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)) J: c% N* H1 w& T  D4 |
    {
6 N$ v1 g* S+ n* ?        /*  测试UPP传输的同时操作普通DDR数据
. B8 J' c( `0 j6 S& X& y        temp=i;
. E8 q9 p3 a0 m        i++;
% q$ B, n$ `& ~/ f        if(i==1024)! V: g( h' `) U/ T% p$ `0 Z
        {
8 M9 M7 k/ P% n9 C$ X4 }+ r            i=0;4 \' q$ o8 ?9 z- Y9 h( @
            j++;6 q- X2 z% R2 ?3 O9 K: j% o
        }( r' P2 V% ~0 F2 _
        */
/ n6 m7 m" ~+ f9 Q+ G
' }  Z9 `) p* v- c7 ~; |- K       asm(" nop");1 _1 ]9 b  t5 I6 C
. B  h& Y  o. i! S7 }" g
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 K1 d4 B' O* K) e    }
" \  e6 F6 J9 N3 l5 @- M
8 w3 y8 E' G5 c' H    /*检查UPP传输的数据是否正确 (loopback modes only)*/: T% ]" H# P2 m( ]2 c! G$ j2 |$ b0 J
    //UARTprintf( "i=%d\n",i);) X* |( Z# @1 J# x! E8 l% s- |
    //UARTprintf( "j=%d\n",j);
  a, Y1 A( U( _% ]4 B, `' C4 d    UARTPuts("Data mismatch in buffers.\n",-2);
: f; D( A8 k* j* D( e9 E    if (upp_interrupt_count == 2 && upp_error_count == 0)8 W% X& {/ H* G% h4 E8 z
    {# V! Z' {7 \2 j4 A, v: B- V# X
        for (i = 0; i<upp_frame_size; i++)( Y) \2 g1 ?/ p2 `/ u9 }
        {
( [. f! D- f3 O$ g            if (upp_buffer_a != upp_buffer_b)) Q# [# q1 l6 G; f, N% \7 g1 E7 ^
            {7 e4 P) C! M( A+ F' X
                upp_error_count++;
( `. h& O, _. Y8 z. A9 N( a            }& ^$ {! o* j& q9 \) }, M: T) d3 q
        }( o8 ?7 n" c& V" p! b# D: ]
    }8 o. g; _  O& f8 A+ T$ A

- x8 N5 z' B; I    /* 报告通信结果*/8 p1 `! q5 \' g8 ^4 z3 f. a
    if(upp_error_count != 0)$ Y: N! n3 Z" t1 e. G
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: }  Q% q8 v5 e    else
0 j9 h; O# {. w; m& S" \0 A        UARTPuts("uPP transfers complete!\n",-2);
* l7 k1 o4 F6 r7 O9 D
2 s3 _: S/ M; [3 E- e  D9 t    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( y+ Y' i* Z. c+ S& g8 }    UARTGets(ch,2);& M7 v  n( S  ]- W8 f
    UARTPuts("\n", -2);8 z4 M; A, R  D# k- O! \

# V1 ]' _6 |$ v6 ]    if(ch[0] == 'y')6 K( L; G. J. _
    {, z9 d7 H  |2 t: r! h
        /*打印全部读到的数据*/+ E0 t: V) n1 k+ ]! U4 M
        for(i=0; i<upp_frame_size; )/ u+ n0 Y& {1 |8 s! _# [  `
        {
, k" K, f  G5 F6 S- w9 b  r            for(j=0; j<5; j++)1 p, L  D3 e' ~3 t3 b
            {; e8 ^! d7 o- O/ p
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. ]  Y- X& k+ _6 T5 i                i++;
" ~, v: z/ y) T                //if(i >= 4096)/ `: u) e% G8 S+ @1 z, w
                //    break;
5 `0 [- p* |8 J) h% |
( Q% F. d  W( y            }
) M5 K) u; c: U3 a$ {. ?            UARTPuts("\n",-2);5 @# i6 h. I, P7 a& G4 x
        }% J& T( |: }7 ?; |5 j
    }, _9 O& ]7 h8 Q. u; Y, H

( N4 O7 ^+ G7 z9 o" j- w$ r}

# ^$ l& f) c8 g5 `) ~1 S

8 K7 g9 m* u5 K. l& t
+ D2 r1 B; r0 \. g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。; f, A* F7 O0 [; ~

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% z' T! ?& l8 u' F+ @





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