嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% O5 f+ W2 P8 o! o1 _0 c
Void UPP_TASK(Void)
, J+ @9 T  j6 Y5 X. P{5 W, l6 Z! x+ l  l7 r$ e
6 T( j0 i8 x. u+ Z" a4 Q
    int i,j,k,target_int_count=2;
) {9 P/ i7 W7 Q7 F$ o& o    char ch[2];
7 U& @8 w8 |3 ~$ |. x& v* O( r/ p7 w$ {3 s! [

4 W2 ?( [+ @7 v  x4 T' F/ Y% W/ F: n! g" ~8 ~6 Y, }7 ?( |/ B9 b
    upp_interrupt_count  = 0;2 I$ V+ X) a- E: i
    upp_error_count = 0;
7 A" c  @! @/ J# C! M% d7 p0 U5 ^6 `+ ?4 K" K* q
    UARTPuts("\tResetting uPP buffers...\r\n",-2);& t2 C5 B' }( t: l* q% p
    // Initialize data buffers
* a5 {$ S9 ~9 X9 @' ?* \# j7 ~: p    for (i = 0; i < upp_frame_size; i++). c0 g  H/ \( l2 y: }! f
    {
0 C6 q# b; x, F       upp_buffer_b =i;
$ Q8 q  D9 L. S, o       upp_buffer_a = 0xDEAD;6 W6 T9 T2 o/ a3 k+ D1 o
    }
& ~" p% Q, p6 ]% O
5 k! C) t. }2 K$ ?    //for(i=0;i<1024;i++)' Z8 o1 ?( Z/ G
    //    temp=0;3 y. O+ }1 d$ o' t8 @" U

. z' X% ]- U# V- }- y7 V2 Q5 T; ?    //UPPReset();7 B8 n* b, C2 G! {1 f7 [- ?
    /*启动UPP DMA传输*/
! {$ b$ t7 ?5 Y+ j0 T    UARTPuts("upp_prog_dma_i\n",-2);3 m- c# [* J6 ?3 j
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- m: f1 t# Z+ G) Y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! h8 X6 d+ U7 D" @! R
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) J- q1 |# x3 i6 }4 S' a7 Q( L- P

6 n9 E* N1 j% k$ o! K. G) {, d    UARTPuts("upp_prog_dma_i\n",-2);
: A* R! i" ?( u$ ?    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ t' t2 @% n, @! T9 A
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  ~* u$ w! C2 h* K7 t, ~
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 z7 R( |3 ^9 J" l# ~, h7 X
# Q; L& H# r/ S/ S) P" k  ~    /*等待UPP传输完毕*/$ X2 Z& Y& P& A; f6 L
    //i=0;- U' [& b  F# U; M
    //j=0;7 F6 [  B+ ^) \7 {" Q
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ e* e3 u' g& ~# p    {
  M. R, V' Z  J        /*  测试UPP传输的同时操作普通DDR数据: }* r% n( J) F6 K
        temp=i;! N' C0 F7 l/ E) h% b
        i++;1 [' q: w: K& i1 x- v
        if(i==1024)
8 y3 k2 W  h, ^! M        {$ M2 n) a) {# k6 t, W; V# H9 F- @
            i=0;
" M: p9 t6 b, |5 l            j++;% s6 V7 p, Y3 m' J
        }: }5 L+ T) q* t; J
        */
' l7 r( U7 _7 C; h
2 }4 f% ]# s. L0 ?+ Q* K       asm(" nop");4 X) w) {. H& h  |0 U- f

, B6 h" \8 X# `# X+ W3 O       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);+ z2 j& B) X' e5 c
    }+ L" f' m' o. p7 C# Q8 o
2 i. P) d3 T. p5 S$ F( m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/& d. ~; x9 y/ u
    //UARTprintf( "i=%d\n",i);9 t  z+ N6 a5 X" [+ d2 \( y1 U$ N- f
    //UARTprintf( "j=%d\n",j);3 `; n' B6 n8 y
    UARTPuts("Data mismatch in buffers.\n",-2);
+ w" w* A8 R3 d+ Q/ N1 s/ D    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 ]0 F) O- E4 g  ^4 e    {
* U0 a" U" ]7 p$ K) c1 u5 N* z, \: o        for (i = 0; i<upp_frame_size; i++)
! ~/ u: y1 R* ~7 e5 D% I        {
* i# Z& L6 o' `/ C( z            if (upp_buffer_a != upp_buffer_b); Y+ i; `7 d" Z
            {8 [5 m6 Q+ L4 p, l6 {* q4 l  J. C' c
                upp_error_count++;
7 Y& ?( X8 a) K) ?1 M            }/ m% g& V: ~4 ^! l# Z% F
        }# E6 |/ k/ d% x3 G7 d. Y
    }
! t" v: r$ o- q7 ^' i5 a* ^3 V- b2 y3 K
    /* 报告通信结果*/' a+ e4 G1 l, m; n% a
    if(upp_error_count != 0). S. \) A% }1 ]0 _& e* n. ]2 N, n
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' c4 ~, B! N, Q! h4 u  |& x    else
* ^8 i4 k( Q2 j% |5 D        UARTPuts("uPP transfers complete!\n",-2);
2 ^$ X, A. x4 _& M- G
: O/ y1 h+ {1 p9 P" K7 w    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' e" t+ ~& ~7 N; a$ b    UARTGets(ch,2);
# L0 L2 k/ |: ]+ J$ h9 F    UARTPuts("\n", -2);
- Y6 s* j# x2 u8 R# c7 M2 K$ A8 V6 R9 l) o& e* w: }& N+ r
    if(ch[0] == 'y')
$ m  S- e, G) o" F6 D6 A    {4 [* T! \- E# j5 I- |2 L7 G. j
        /*打印全部读到的数据*/
# v2 k* b% [7 U, C9 L$ @3 y+ l        for(i=0; i<upp_frame_size; )
9 |# E. U* e3 K( F  c. j4 C$ L        {
0 x% J% }' j3 @1 R1 T; [            for(j=0; j<5; j++)
* e) _2 q) f/ G& p6 b7 b. j% U- m            {
" ?+ A& |% W1 z, M9 e6 i                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 l( x2 |  c* x
                i++;' f3 r  u: D- Y: `+ L
                //if(i >= 4096)) q) D, f6 N/ y3 x
                //    break;. c2 }1 P) _$ t2 n$ c1 m

3 H0 e% z9 Z! ?3 N7 j1 M            }* T$ f( b' [& l) V+ V1 M, r
            UARTPuts("\n",-2);# g0 x1 n: ^4 V. I
        }
$ \* M8 `" x$ R# o( {4 j    }( P) Q1 _) A/ C8 \  F) u  E. \
( m' Y8 {! l" Y
}
4 Q- j1 `. D2 N0 N

) j- A# P  ?) B/ Q& F& f( {% a
1 q, P+ P3 }/ I8 H2 R9 x
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% p3 A# U* M& v7 i: Y3 m: h
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 o1 ?  @5 }9 O- F$ R" @; }





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