嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ D5 j- k6 v9 g+ G' p* I0 w( b$ u
Void UPP_TASK(Void)" {: `* ?* ~" l' Y- Q- P- Z
{: ?" {. H/ b) O" r

! \: L0 I# _4 N    int i,j,k,target_int_count=2;' s2 w2 A7 t- X# }
    char ch[2];$ @9 P7 {/ q+ c* W5 o

; U; X1 R$ U4 f" C' l& `! p0 t% k) ^3 b
: O, H* b  ]% P9 M0 `
: [& O- W+ |; n5 f    upp_interrupt_count  = 0;. k" ^9 `6 H7 F, |- y5 U0 m6 U; G
    upp_error_count = 0;
7 ?+ Y6 m8 t: m% l7 q( k2 h* k# ^% ]# j# r. u
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
! o* ^+ M8 V* e3 c  ?5 t    // Initialize data buffers/ E7 ?5 `/ Z% b
    for (i = 0; i < upp_frame_size; i++)* Y: }* G  b- `& e8 |" |) x
    {
4 R7 x- |% ]# d8 H7 H       upp_buffer_b =i;) e, _4 W+ O- M0 w3 a% e
       upp_buffer_a = 0xDEAD;
  i. z1 v0 f9 m    }5 L3 ?7 _; ], s3 j
' n( i, v4 Q3 I+ Q6 ^
    //for(i=0;i<1024;i++); u# G7 c, z  ?& M( e
    //    temp=0;
8 p( N# v$ k: s9 ]% ?$ x, v9 }5 m) @& n( h; G/ a* T3 j
    //UPPReset();8 k/ O5 T6 ^* n1 S
    /*启动UPP DMA传输*/
. h1 G* i/ P3 w; {: j5 f: V    UARTPuts("upp_prog_dma_i\n",-2);, c! R& ~+ z$ M5 y# H
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( \, K" y+ p* ]    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ N/ o% E! `7 H8 T  ^2 |9 m/ u; A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 {' L  R6 B1 ^- m' Q+ ]# V- l9 ~
& R) [4 h$ n; h& y$ L+ y, ?& Y' G/ @    UARTPuts("upp_prog_dma_i\n",-2);
2 s$ h/ r9 d% ?4 q" Y/ y    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' P: Y2 {1 |/ |    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, }% G1 T1 P4 c: m, X8 n    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 L  k' m3 H2 v0 D$ m5 H6 k" h$ u3 o  m; ^& c
    /*等待UPP传输完毕*/8 n3 b$ d+ b; a
    //i=0;( y0 Q! A7 t7 W/ }  `+ a5 w# j
    //j=0;
( [- Y# C- F' R    while (upp_interrupt_count < target_int_count && upp_error_count == 0); @" w9 s, p. K& }7 R
    {
0 U* F* I  R+ d) S+ J" Y        /*  测试UPP传输的同时操作普通DDR数据
4 e+ F+ f4 ~0 e( a$ Y        temp=i;* B- f) i; d* p- C: B# M
        i++;
9 B, `- W$ T- J5 z        if(i==1024)" f2 Q) i; P. }6 e
        {" S& m& K- ]& {' V
            i=0;2 A5 {" Y" n  E* P! W
            j++;3 }( M) D) J2 a! E) g
        }9 b2 P) E2 |- L+ n- \1 o. T
        */9 d' z- ]& Q8 F" n+ z

+ |* r# C0 k: C) Z8 h       asm(" nop");
( Y: o% F( B# d5 L; i) Q$ S
% W+ A& |6 F' v, W       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ K- I" f3 U. S7 e4 x6 I    }3 ?2 E$ f" n/ o: W3 [3 d
& Z3 v4 c9 U) o% ~# T! I
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 [1 _4 @' H% M0 g! Q8 O    //UARTprintf( "i=%d\n",i);+ _: c( S8 m  Y1 J& h3 U$ N/ i* I
    //UARTprintf( "j=%d\n",j);
; ?6 d' j% g7 g/ K& L+ t    UARTPuts("Data mismatch in buffers.\n",-2);
8 }3 Y( a; _; b: x! k    if (upp_interrupt_count == 2 && upp_error_count == 0)! P$ h) d" [6 v  }: C
    {
/ v6 k, y# ]1 n7 \/ T' d$ m" R        for (i = 0; i<upp_frame_size; i++)0 q7 U4 M9 [. |- m2 \) o( c
        {
5 G/ n3 |1 ]5 s) S3 D            if (upp_buffer_a != upp_buffer_b)
9 k' ?, d0 d  c$ X5 e            {9 z- g. j7 Y, a" }& Y
                upp_error_count++;/ j6 g2 {6 N1 o6 |6 Y+ ~/ Y
            }8 L8 }7 A% Z! ?. J! q/ q/ J
        }
! K0 {- ~3 v* A' G$ J0 n6 c+ h    }
' c, [- i5 o, }9 t3 g$ y# n8 ^* Z. }( p
    /* 报告通信结果*/
: N( a0 e6 }0 z9 ^; h) q    if(upp_error_count != 0)
! M: Y7 m1 ]0 Y) N; m        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 l  d/ T! [! |8 J( H
    else3 E. G/ {8 A5 V3 \4 ~
        UARTPuts("uPP transfers complete!\n",-2);$ d8 K& X: }: h9 b) t" A5 s! j" h

6 X/ ], [& S4 Z' H$ m/ o    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ q0 Q* ]2 a, A4 l
    UARTGets(ch,2);
  U8 [" M, f+ v6 c4 O4 Q" P; R    UARTPuts("\n", -2);
& G! Z  M& n! t, }6 V: y, R" f' H0 [% ^: A( S# l5 S8 g
    if(ch[0] == 'y')9 k$ F9 k3 p" y' ^
    {5 `. r  H3 t; \7 T
        /*打印全部读到的数据*/8 f! y( r# P' P$ ]" m) e" J8 D8 A
        for(i=0; i<upp_frame_size; )2 p3 V+ ]  l$ a2 S
        {
; |3 K6 Y: X: u            for(j=0; j<5; j++): z% D$ N* H% [( O
            {
, f8 W4 s1 _, h! B3 X                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. @. `8 e8 y* a  v+ ^
                i++;- @( N/ u8 F* T8 C, l, `1 g/ t
                //if(i >= 4096)
& D% z1 C# X- C. a# B& [% i( |2 F$ v                //    break;
1 R2 p  w( m* Z! b  e) E, q/ o+ O
% N/ f1 S8 P6 u2 }) a( _1 `" A' N$ q            }' u5 |( ~1 {" T# d+ `% h, D
            UARTPuts("\n",-2);
8 u7 c: I+ r$ u" b( f+ [        }
/ L; s9 F. ~: G. G; Z& `    }5 p4 u5 K* M5 \4 U9 g. L! J

: I' d+ S1 ^0 F. E" u( Y+ b}

( l4 E5 U; _# B+ d
$ q; R% ~8 `8 ~0 R) I7 Z4 X

! x  B: Z3 e, r8 i# a& }
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" f1 n7 \- i/ f6 l/ @

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 M, o( O; R2 d: L( k





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