嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 \8 p0 t8 O, e0 L
Void UPP_TASK(Void)
6 q: h! X1 R: l9 S0 U) }: c! X6 _( q{
+ }1 f/ ~0 o9 ~* r& n2 Q( t
3 s' ]. d* A% y! T* |8 m3 I1 M& b( B    int i,j,k,target_int_count=2;* w. Y0 I& {; g0 {8 z
    char ch[2];
) s, u+ k  B- q
6 s/ m0 ^( N4 t2 c
- y: G4 Q9 ?3 s7 E& l+ Y5 l( U
) z# o. k1 ?9 G, @, L6 x+ I( K    upp_interrupt_count  = 0;
8 |) _5 o$ K$ ]    upp_error_count = 0;
2 n* j! K: Z# ?. ?. P" W# Y6 t: n) P9 m% Y  `. G
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( a2 t1 }+ D- m/ H7 d6 w    // Initialize data buffers
2 ]6 ~9 O9 K% S" a( |    for (i = 0; i < upp_frame_size; i++)2 q* N) S9 J; D) Y# p7 y
    {4 x1 t% }$ S  k& ^! P
       upp_buffer_b =i;
0 E. p) t. D/ `) R4 a       upp_buffer_a = 0xDEAD;0 N0 T6 J# r2 U$ R
    }
1 p: e; C& [: c8 u  M& n  E
3 G1 W4 A2 R2 r  M% h    //for(i=0;i<1024;i++)# @7 n- S2 R5 A4 n. e) P* a
    //    temp=0;
& x4 o9 D+ j+ u; D# ~2 M& K
+ p: B, ?$ h( n1 F& K    //UPPReset();
* j! _) R$ a3 i* L; \7 F  b1 q- I- q  r    /*启动UPP DMA传输*/. ?' h( T% O- o
    UARTPuts("upp_prog_dma_i\n",-2);
1 U7 j% T4 }" m0 }7 R) N    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ T. ?/ D/ M9 z& W4 ?9 ^3 O$ @! q- U    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 T8 K# L$ t% P9 U& o' S) w- K    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& \$ [9 E2 f7 e% T0 V, G7 m

9 S, {- u4 g  T  n; W7 U$ f. z    UARTPuts("upp_prog_dma_i\n",-2);
( z. \" E3 g" {- r- C5 {    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 t) S- q* N: `* M4 c+ U" s
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. E- d1 ^& q2 S1 c    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);. B' ~! c0 E! t. _
8 L3 D7 t+ y3 g8 V  E# S5 }
    /*等待UPP传输完毕*/3 o4 u+ }; h' }5 z) E
    //i=0;
1 e  N# a# p1 D' l5 \    //j=0;1 K2 s4 Y3 s& l; S- k" L9 m$ o% @& V# n
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% _0 H* u" ?0 O- H: v2 {! i
    {8 }) h. @; U  Z6 }1 V7 ]" Y
        /*  测试UPP传输的同时操作普通DDR数据
, d( ]1 k1 v# h" _1 o: l        temp=i;
7 ^/ [7 _) e2 a) e! x- @) ^% l        i++;
( f/ U$ ?) k  o# h        if(i==1024)" {: t1 D+ x2 o' F/ f- h/ S6 i: R
        {
  w$ i5 N" F# V            i=0;
6 l  y& b( k. r& x$ N            j++;
& V% e8 r( r+ x% P        }2 Z& p/ _) a8 D
        */
! u1 ~/ B$ D$ q( Q5 @
: w0 {7 k  w) A- _1 h4 ]       asm(" nop");
: w$ g# B& D5 l0 T9 Z& ~7 C5 P1 ]( S. o: V+ V0 }) h
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# m! P2 O# R1 l- L
    }: F$ A+ S4 \1 r9 @+ X. U/ h
6 J- m( _6 l$ }; x" T  s  _: d
    /*检查UPP传输的数据是否正确 (loopback modes only)*/, b$ S# L7 _+ Q% ]! T# P6 r
    //UARTprintf( "i=%d\n",i);3 p7 P/ @) i8 x4 r
    //UARTprintf( "j=%d\n",j);4 r6 M) W7 Y: ?! l4 A6 m" a8 ~
    UARTPuts("Data mismatch in buffers.\n",-2);, y9 ?/ U$ q5 K, X0 _, R
    if (upp_interrupt_count == 2 && upp_error_count == 0)- s0 [, O* b- K- k# c: l; a: e
    {
1 R( p! E  G( w. A1 v1 v' k9 \        for (i = 0; i<upp_frame_size; i++): ^6 R3 N& w( d% ?. b+ L$ b
        {9 z% b: W# a) P
            if (upp_buffer_a != upp_buffer_b)
- o- l4 D  s; N5 }' [4 S" S; V            {) V$ V- p! H  O3 s8 g
                upp_error_count++;0 h) v7 a) E- D
            }
  I1 Y  _8 N& o        }
2 S# O  K" m; r: v' ]( U    }7 w* o5 }/ v) ^  R3 C  R8 S3 d# b
$ h) P7 ^; d/ ^: L
    /* 报告通信结果*/+ Z, C5 r. ^& ]/ f& H
    if(upp_error_count != 0)* V7 n( D. l+ Z6 {" o  q
        UARTprintf( "upp_error_count=%d\n",upp_error_count);  V) G  u9 e/ H* z
    else) B- ?, M! g8 B( o
        UARTPuts("uPP transfers complete!\n",-2);
/ p7 ^) F- g1 V
8 V  l7 P& G3 K6 \; f9 X    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; l5 q& j( n% r$ X; n    UARTGets(ch,2);* Z) O  H; a' D' p1 a
    UARTPuts("\n", -2);
& q7 t! L% A* J5 Y# t: _$ P9 Q$ j
    if(ch[0] == 'y')
( k$ Z5 m/ c% ~  w; A% \    {9 A2 C9 D8 `  O8 h" ~
        /*打印全部读到的数据*/6 y. q1 _. F/ Q' W& q
        for(i=0; i<upp_frame_size; )
6 @( f# p* ?/ W$ z        {4 {" |, b1 u9 }6 @  p6 A
            for(j=0; j<5; j++)3 U9 O5 F9 p5 m8 i
            {: l! V1 h- G0 M* G. }8 B% E
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ Y. X$ v/ e" f3 [' y" y                i++;
* i6 t6 O. ?+ j0 U. d2 b                //if(i >= 4096). |' {9 q, M3 o, F
                //    break;* x  [2 P/ z/ n; _* x; e0 f7 U
6 I9 Q, K5 m% H$ j9 j2 A) v4 P
            }
  t: r$ V& F# h: _, b) }' T' ]            UARTPuts("\n",-2);# q, h4 X* {& L% C/ \) M
        }
. X/ W  q/ p; d. u    }
# \7 O7 [: l  l8 \" E1 f" m, E* j, {' g1 _3 p
}
0 J& P0 w! o/ Z+ v* D
. H1 E; d8 h$ c% S
' P( H1 E6 a- |

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ T4 ?9 N. r9 U

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ R8 E1 `9 |0 E9 A




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