嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 `) [0 L% B" _& h# g: A
Void UPP_TASK(Void)
! W7 w, q4 n! s6 w6 f6 n4 {( |{% v2 m3 w1 S  U0 \3 p, ~6 K& J

2 R7 G. Y# O5 h  S! U0 o    int i,j,k,target_int_count=2;
3 J9 _" _2 X1 L2 @, r1 Z9 a( C    char ch[2];; t. Y1 p' F+ F+ t. I
' X: M6 M$ V7 L# O( G7 l8 \( Y
+ `! L, L- Y4 H" r% j& x7 ~) k

+ {& [6 ]$ A. g0 E, @    upp_interrupt_count  = 0;
4 I1 f; K6 `3 m$ \2 x! z+ I6 w% \  @    upp_error_count = 0;$ E% s- I; z8 h: {% P) s: e
# _2 g0 K& f. M5 U' O9 p& A
    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 S4 J9 x, e3 }- {7 n7 E
    // Initialize data buffers* R% r7 j1 L( r" d
    for (i = 0; i < upp_frame_size; i++)
1 }/ [2 X; w( @& w/ U    {
4 h9 ^7 [, f" |- [+ B       upp_buffer_b =i;
- G" G/ x8 ^5 D: s, e* s0 ~' B       upp_buffer_a = 0xDEAD;0 s1 s* K8 G" c6 _
    }+ T# _: U0 u7 c; M

4 u8 U7 L$ a6 Y, C! P    //for(i=0;i<1024;i++)5 C3 n1 o0 {0 l& |5 F. H
    //    temp=0;
8 o) `+ a6 S& B/ E$ g
! F/ l1 |- H. Y    //UPPReset();
9 D" f+ Z# [! K4 W: ~    /*启动UPP DMA传输*/
0 g2 b& ?5 e/ O    UARTPuts("upp_prog_dma_i\n",-2);
9 e4 l" `; x+ o) G% K, v9 m) \    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( h# F9 [4 d- f" p( y9 q! ~0 Q2 I    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 l! J) F0 L# @& X. J
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. t8 R# O3 z( |

7 g& _. Q9 P' Q% f. D! T; h, z    UARTPuts("upp_prog_dma_i\n",-2);
$ V& K8 ], W2 t* p* `* I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 ~) g7 f/ x4 R3 L+ H6 V( w2 ^
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; J4 F% @" [4 A2 l. b    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# A5 \: s* [* K( A  P) ?) p: {
    /*等待UPP传输完毕*/
( g) }  G/ A* P! h  S    //i=0;
" B, V; T0 X2 }0 J+ F5 H1 [    //j=0;+ `0 ?! u" Y$ D, S+ B5 X. h
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)0 ?+ X9 b+ t+ {
    {0 {7 Y5 z, u: |* n1 @* [2 B
        /*  测试UPP传输的同时操作普通DDR数据4 p8 D- W' Z8 @. A
        temp=i;4 b- e0 b/ X; r0 D
        i++;
, @4 _3 V! D9 v2 C: l* O        if(i==1024)
% V. G3 `4 k$ X( g        {
( `; W: Q; f$ v+ f. e9 M            i=0;
0 H3 X7 q  r1 E* U: ^; V/ Q            j++;8 F- D3 T1 C! J" o
        }
* r8 R9 H' a* q- q; w5 B        */
( S5 N0 R. U( ]/ u6 S" @' B3 ]
  T5 ]- y: n/ t, e2 o       asm(" nop");
4 n+ G1 D' i) i* D2 i6 T& p2 R2 K, E' Z& X
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);. z  n" t' _4 i4 z8 I5 W
    }+ _2 e5 F9 ~( a: G7 c$ \. r

7 q# a4 r% U% S: d& C    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( [" x, [5 M: A$ F) a/ |1 @    //UARTprintf( "i=%d\n",i);
& L" s6 I- d6 N  u1 F, Z4 O    //UARTprintf( "j=%d\n",j);" T. b2 z6 R  S) N' i% q
    UARTPuts("Data mismatch in buffers.\n",-2);* `7 |6 M: }. N1 b# [
    if (upp_interrupt_count == 2 && upp_error_count == 0)/ U5 S9 [1 ~) _; p
    {
7 n- O# k+ l0 u3 L% F) D        for (i = 0; i<upp_frame_size; i++)
$ }3 k/ q: J# E/ y0 b8 \9 H        {
# a! N! y8 r/ q            if (upp_buffer_a != upp_buffer_b)9 y" e, D3 I' }) \# J
            {
0 \7 p( E& ?0 I2 f5 v, c6 @* H                upp_error_count++;
+ a$ v5 a3 S7 ~            }- c9 t4 b8 C) p. }5 ?" O: a4 Z5 x' A
        }2 r1 C9 K1 l4 ^: v' D( Z& U6 S" J$ k
    }
% Q3 @: M6 Z& y
4 D# y5 X+ |9 i: N/ h( Q3 f    /* 报告通信结果*/5 {0 z8 h, v1 F9 W# Q  {4 _2 q# O4 K
    if(upp_error_count != 0)
8 k0 n% l& [5 y: d9 j* R        UARTprintf( "upp_error_count=%d\n",upp_error_count);. l  ]! s- r4 Z$ O& l$ q7 x4 c
    else
8 t7 l$ k% O- R* g2 `$ ~6 q        UARTPuts("uPP transfers complete!\n",-2);. J2 z, J, G' l9 H$ S5 h
2 L: j& \5 d) ^
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 ^) [1 N- W8 S6 [7 e) S% R; S" L
    UARTGets(ch,2);' @1 W  r# f5 m1 E6 a
    UARTPuts("\n", -2);; u) O# W* S: r, L: u( S% n! c, v6 X
4 p6 e9 N3 Q5 h
    if(ch[0] == 'y')
/ ?5 o" {3 [) B8 J    {$ _9 P% V$ m3 k% f( L- _
        /*打印全部读到的数据*/
" h5 i0 P; ]% }9 J; h+ U        for(i=0; i<upp_frame_size; )
- n. ~9 B- o# `5 s$ k3 S        {
2 c5 l) ]- y# T/ _% v& @& F" M0 C            for(j=0; j<5; j++)
/ e5 _. V" ?& ~+ F. P  ]# a+ T7 G            {9 M' c2 O3 L7 `) E+ ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);/ G% w* r% L& ?; b
                i++;" A5 q  a4 z( T/ ^
                //if(i >= 4096)' G1 |( w! K- `8 b
                //    break;
% L. ^' g" _( m1 `! X3 V! y
) t2 p( G( B: E9 m' |5 D            }" p6 [. G/ F1 e* O2 @) L- \
            UARTPuts("\n",-2);2 w+ k  R$ e+ k+ ^/ U; k! q$ T1 ?
        }
6 s: k" B. b* ?/ n, \9 ?2 t    }
0 i% _5 C6 z8 b2 R; Q: _1 G+ R4 D$ w& U7 K! b
}

0 r0 w3 n" P0 A1 P3 t

8 A' i, B" P$ c* t! S, s8 d
8 W7 V) O5 [# s) D
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; N, M* o' I$ d  X6 i$ N  ?
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ L+ ?* t* `1 |4 `' Y





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