嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  x! F6 X" _$ g5 E) T
Void UPP_TASK(Void)
0 f! W- K* O" u4 n6 Y8 s{
$ C* p6 C1 ^: B! c; }/ u8 Q% v5 o4 m' A( `
    int i,j,k,target_int_count=2;
  ~! z9 ?$ d4 k6 s5 {    char ch[2];* O! _3 J- x$ k
) F  c* w3 G6 y8 o- l  X/ W5 f  k

: N) R2 f6 j* J# c! }. l% w) K" r" u7 Q; K/ E+ q/ ?
    upp_interrupt_count  = 0;2 \' Q0 E9 F8 `1 E& U' [0 {! _9 n
    upp_error_count = 0;8 U; l. [$ N0 s9 Y- m

+ o. b4 x" q9 [" @' @- K' g    UARTPuts("\tResetting uPP buffers...\r\n",-2);, i- Y3 h5 k1 `; Y, I- |/ i
    // Initialize data buffers
; `3 B6 L, s7 W# e# P    for (i = 0; i < upp_frame_size; i++)
. g  U' m2 X7 W9 w    {
( O5 x% \9 N) K' ~       upp_buffer_b =i;% x0 D2 L* z/ p- {' m: M
       upp_buffer_a = 0xDEAD;0 {, x5 S4 D+ D. ~7 q0 C! K' j  |
    }
% R2 a0 r6 y- j) G& O+ J! h) E: ~: m5 i0 m% u; u; }/ W
    //for(i=0;i<1024;i++)
1 W1 J) c1 h. |8 K4 e) W+ h0 t( Q+ K    //    temp=0;9 ?0 v; ^: T0 u% h, u4 F

, e( Q  U$ v. f* X* _3 J9 B    //UPPReset();
9 p, [& R- X. B1 Q$ ~/ R    /*启动UPP DMA传输*/
* G; G1 L! Q7 B6 O3 L' l7 p    UARTPuts("upp_prog_dma_i\n",-2);3 u! i* i/ S& x: V1 B
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;' T0 T2 w7 P8 E7 a7 M
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; J( ?6 w% S" B: Q' J+ m( ]- u
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. v7 v1 v/ ^$ Q. B
+ [* c5 h* l( \% `6 `' o' P
    UARTPuts("upp_prog_dma_i\n",-2);
" ~: L/ D1 \8 C  Z+ d    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ c  R9 F8 x: ~9 @3 J6 Z    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 g6 @6 u$ T: f7 [* |5 `# O    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 [# B; `- K6 C1 R( o& r" y6 h
# G9 Q- k9 U, \" p3 x+ f    /*等待UPP传输完毕*/4 ]3 b/ J, K- M/ V/ B
    //i=0;
. G( w0 D; n% Q; W+ _3 D    //j=0;9 j5 ?2 p4 W6 q) i" L8 e
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& Z5 p, n1 B- H! l, S1 G& L' {    {- W1 ]! a1 V5 c5 N
        /*  测试UPP传输的同时操作普通DDR数据
, S: ^+ `0 J9 }+ |        temp=i;
' D( T: G. t3 Q! i; O% p        i++;: {& n! x) r. F" a2 E( \, L
        if(i==1024)
1 G) n: L0 e( ^; x5 O        {
$ m& s0 f; O4 |+ N  W3 J" B            i=0;
1 f4 Y0 B) Z2 M7 u3 a* N( {) w' j            j++;
8 `9 G8 Z7 ~5 S  [7 Q5 B$ w8 M        }. t0 u9 W4 r; ^* @! j
        */
1 b5 V+ v( A* [& B' }# }" ^" I. a6 F! e( O+ A, d
       asm(" nop");
% Q/ _% _: Z- P0 z6 o: L$ B3 d+ {' [; J4 X
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ \5 C! P' z; B3 n' o7 V2 w, \* q0 H    }# [6 t. m8 t% J, O  ~
/ E1 x3 _- M9 X
    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ [, ^1 {, E6 I/ z
    //UARTprintf( "i=%d\n",i);9 V2 i3 _& A) j5 j
    //UARTprintf( "j=%d\n",j);
* P3 _; |* R* |) D! a    UARTPuts("Data mismatch in buffers.\n",-2);6 [2 V/ m& y3 I  v) f2 d7 l
    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 m6 T" {, ~2 E& p) ]' U4 ?4 B    {
8 R7 x, c) K/ h9 ~8 b6 s. L+ `        for (i = 0; i<upp_frame_size; i++)
2 i$ V7 y+ L' f% K& Z7 y        {# x) }3 j  K; {  B2 E
            if (upp_buffer_a != upp_buffer_b); w0 O$ P9 M) G' L( |1 Z
            {3 o+ _7 z% D1 r7 l1 b5 P' }
                upp_error_count++;+ G2 G+ K, n* I4 G# |1 v8 T
            }( }: X: _6 F8 v5 L, W
        }
) C) ]1 P2 ~  A$ o% j- R9 V8 C    }! C$ a% N# a/ ^
( n8 h  C2 D: Y/ w7 m
    /* 报告通信结果*/
. l! N5 Z$ b+ m: q) i4 j    if(upp_error_count != 0)
- D  p2 V9 i: V2 \8 D' M        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* d6 p, J' N& m6 S    else
% m& [/ N# ~( P0 f% j% Y! X        UARTPuts("uPP transfers complete!\n",-2);: t" i! T3 w  R! N

* f# t- {3 p2 {2 Z/ X8 d) T) L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ R# T" _$ _6 U
    UARTGets(ch,2);, E& O& {$ i* q
    UARTPuts("\n", -2);( ]8 G/ ], C4 o
3 \/ N% o* s  o
    if(ch[0] == 'y')3 M. n/ a, B% n  W
    {
& _: `' B( n0 L6 a1 h  H0 \  i5 h4 ?        /*打印全部读到的数据*/% p/ @2 N- v! P; F" S* q9 a
        for(i=0; i<upp_frame_size; )
; N9 T/ E; \; R2 x, E( u  }7 C        {
5 T9 q8 s, i8 N            for(j=0; j<5; j++)0 r# L* r1 p: Z, D% _" i+ h2 B* U
            {
3 |3 Q' b$ l& l: y- G9 x+ N                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) l" H' b7 b4 X! Z                i++;( ~: ]/ _# D  i( g
                //if(i >= 4096)
: O% K- T. @$ o- X                //    break;) L1 x8 K8 d5 x- e

8 ?. T& \+ m2 R& c& ^+ t            }4 ^; U+ D- T, S2 j
            UARTPuts("\n",-2);5 p; c% J. {$ P+ a% V7 T+ K$ M1 U, U+ k
        }# p" _$ S$ A( P$ S
    }
% _$ W/ Y. K( Y# S( k! K7 i5 j( i" L9 F- D% P7 p. P# ]3 G( q3 g6 B
}

6 f$ B1 Y. W1 r$ {+ D$ w. u

4 u; c2 f- X# m9 \' n7 e1 ~2 E) O% C6 v4 Y

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 I. O0 T$ \& K+ G6 U. Q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ l3 x. H2 O/ O2 J" Y% |8 P0 C





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