嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  D  ?2 x6 O$ Z
Void UPP_TASK(Void)
# \( n/ J2 ?% Q/ D& m' m5 z/ |# r4 \( J{
3 V! q0 {( a/ u; z; q1 O# a3 S% \0 T1 d) W; l5 T
    int i,j,k,target_int_count=2;
2 Q' K- {, ^* q7 ^$ {6 p9 r6 l    char ch[2];
( u$ Z# Y+ z6 q# V: {( d; Z' P0 }7 e
9 f& X) p/ f- p( s; d9 e$ r7 T
; t0 ]3 X/ C* W8 |* Q8 k/ U5 o3 f: R
    upp_interrupt_count  = 0;& @6 t% `" b, p- f6 e
    upp_error_count = 0;* n: e" O* F, V( c- B" m
8 X& h0 f2 L1 l# ~% w6 {
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( U/ j" y1 G8 q  ~/ B8 F' f    // Initialize data buffers5 f$ q3 T; K( x! T% h$ V8 G6 C" \0 o
    for (i = 0; i < upp_frame_size; i++)" C; F: ]& N* F. n
    {8 g" b; `' k. m; e" T
       upp_buffer_b =i;
5 F( L2 ]* a/ a- D       upp_buffer_a = 0xDEAD;
9 r! y3 w2 ^: p' {4 R+ t( f: @$ Q9 o* a    }9 R( ?( P/ Y% H0 O  z
! b% d( V3 W0 K/ k: y
    //for(i=0;i<1024;i++)1 O  O# n3 i5 [; T; @5 \
    //    temp=0;" m2 X/ B# x3 f" Y

. A+ s5 @: _% I8 D1 R    //UPPReset();. _$ ?( X) O5 {% R
    /*启动UPP DMA传输*/
9 \1 m/ W) ]: t8 \    UARTPuts("upp_prog_dma_i\n",-2);5 {8 y' ~( \5 r
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& \: j+ k# u" E0 Q( ]& \
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 r, P/ M8 A$ k* k" Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- {; }. b8 e+ z, Q
4 y% s* P; @' ?& D
    UARTPuts("upp_prog_dma_i\n",-2);4 j" y/ [* l4 S- B
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 K  v' ]3 Q: N3 |3 ~% i    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 }$ e9 @* ]# [4 N    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, x. C; A9 w; F/ \. B
; h1 X; e) A8 i1 Z+ R/ ?! A, ]
    /*等待UPP传输完毕*/
, @5 V: a. }7 \  h1 D9 Q    //i=0;
, s4 d2 m) D6 D# L    //j=0;
0 X  a" R: R2 O0 K: Y' S3 j    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- k: F$ U6 ~5 _5 \7 \    {
' w: E# Z1 z! P        /*  测试UPP传输的同时操作普通DDR数据" u' Y! _, n) m8 x
        temp=i;
' n9 \& s: I% p9 ]) y        i++;  v- q6 R9 [1 U* Y$ N/ w
        if(i==1024)& G+ P& s2 [" N  E2 a
        {' G7 M* Y3 C: A
            i=0;- T9 L, w$ u0 F" ^* Q" E
            j++;" ]6 a+ |, `3 ^5 i% ~$ c) ~% l2 s3 G
        }& k1 {4 Z6 B7 @
        */5 G3 p4 ]% Q+ j4 p! v8 r% b
- t( B5 H# O* w& n
       asm(" nop");
+ j: U. A6 Z* y, V9 J6 V$ G# b) E$ g; i
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 J& V( _& X; y" V    }
7 n7 Z- G1 w- M$ H' @+ I& V4 ^; L, [
    /*检查UPP传输的数据是否正确 (loopback modes only)*/. W) y, }0 R' d1 o! h6 i
    //UARTprintf( "i=%d\n",i);
; P+ Q6 n! U+ s, N3 \1 l    //UARTprintf( "j=%d\n",j);
' m6 M/ @. ]$ J( f6 y3 F    UARTPuts("Data mismatch in buffers.\n",-2);% `* n# `8 s9 z
    if (upp_interrupt_count == 2 && upp_error_count == 0): y% V% F; M5 w0 L+ _$ k
    {3 y* R) J$ A& C( w  H4 C; w
        for (i = 0; i<upp_frame_size; i++)
) }( b$ a% S- {) o        {
6 \+ }5 ?+ v5 H4 w- O            if (upp_buffer_a != upp_buffer_b)1 @& c/ `/ Z  v2 V, u4 H
            {% D# l" w6 {1 F8 ^- c; `5 P
                upp_error_count++;
4 W; T! U1 p: J" j) h( k! [            }
7 a3 a; v+ [! x0 S        }) ]* |" }3 w# o0 H8 Y
    }
; ^/ {  x% V1 \) P
% f: R$ {' r$ c4 _4 F- }    /* 报告通信结果*/
8 h& Y$ q. g( l1 w) p    if(upp_error_count != 0)% [1 _' b' w+ s3 m  q# U
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* D" S/ j0 K3 M    else
& ]: I( c7 P; b8 y5 e        UARTPuts("uPP transfers complete!\n",-2);( p% @- K$ X0 u) N; Y% I8 N

' U) @/ c0 W. S3 d4 N/ p' X& `3 r    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: B) `3 J& J, A$ ?0 q    UARTGets(ch,2);: P1 U/ ]! Y+ m# p! o
    UARTPuts("\n", -2);6 `$ G$ {8 ]: T* W0 B2 G

9 S& `+ Y3 b9 P2 J0 T$ P    if(ch[0] == 'y')5 y: |, ^  T: q: ?
    {
" _0 ~+ C# S) d0 s        /*打印全部读到的数据*/
! C9 i$ y1 E- ]$ J        for(i=0; i<upp_frame_size; )
2 {7 i; B2 g5 k$ o1 q        {0 x( x5 h. N; t2 K
            for(j=0; j<5; j++)
- Z8 \3 k  D( d/ i            {; r1 ~# c8 R& [* E2 B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. b# j6 ?/ {1 ]. v! v
                i++;9 y3 o+ R% \4 ~
                //if(i >= 4096), z9 k$ [9 c5 P/ Y
                //    break;
5 }" E, a* ~1 L1 `) Y3 s2 r3 @- e. {4 a/ y- |  F5 b# ]" |$ s  H
            }% [9 L* S7 f& b9 r
            UARTPuts("\n",-2);# N& K. P6 g3 v
        }2 B$ M8 w& r# ~7 \% ~2 F( N
    }+ F' V4 _  o( q
0 ?: \; s8 Q3 `
}
! B' P$ M0 C" _. Z0 w
1 v" N8 p) P5 j

5 Y# z  x8 W+ L& r
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ u+ k/ {0 w/ {6 H

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( @$ G$ X; {' L




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