嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. i! z( m* l  c7 v; X% B2 t
Void UPP_TASK(Void)
8 n7 n2 b' h9 v  S{
4 I/ f& F) D2 [  Z4 }, \; v
# i3 ]* {2 i, X( n6 o    int i,j,k,target_int_count=2;3 B7 E+ k" e: H7 r
    char ch[2];. M. t+ }5 o' v8 \4 J
2 |9 e! K, O. m1 M+ }+ I) m6 I

' Y1 f2 E, I+ N+ L4 Z& j! N+ D. p0 I1 I0 O1 Z. _  v' {+ ^& S
    upp_interrupt_count  = 0;% I- R. ?$ e, L/ \% p  D& l6 ~
    upp_error_count = 0;
) t& C' W" {/ X! t
* A# o0 H0 F: ?. J. y, ^; m, ~    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ |4 e( ~6 [$ y' h. I    // Initialize data buffers
8 A+ ]5 p+ D( z0 b    for (i = 0; i < upp_frame_size; i++)
4 i+ M: j" [- D1 t    {
2 _3 K: x. L7 ?" o6 T       upp_buffer_b =i;6 Y: Z/ R, ?6 I" s, _
       upp_buffer_a = 0xDEAD;
) S7 O) G. A. q5 H7 _7 z4 |    }/ j. a5 f/ l! H9 H
9 u0 a* C; K/ t
    //for(i=0;i<1024;i++)
" @- t" \) ]# Q    //    temp=0;
+ }7 i/ N  V% G* n1 e' x6 |2 b) _3 _9 p) ?7 i/ E- q
    //UPPReset();
' P4 W# [3 m, h/ J+ j/ Q' V    /*启动UPP DMA传输*/
8 j7 V$ n8 Q4 ~+ U    UARTPuts("upp_prog_dma_i\n",-2);; J- A# J7 l# K: I$ a! a' c+ @
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 n7 [2 O0 s! g$ U( S, k7 n5 _: l
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ i7 R) e/ H! [, L5 A
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);2 w5 U% X% K3 j4 h* L/ ~
8 l8 i7 ]  @  P8 D7 V
    UARTPuts("upp_prog_dma_i\n",-2);
5 u+ g; F' \# M& u    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! z$ o6 g; x+ }& |' w
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( F+ S$ u8 F; s4 V5 `2 Y2 o
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 W$ S( z, D1 J* u9 Y% ?$ q
! B; U& J+ G6 n/ B  L
    /*等待UPP传输完毕*/% {: g% k! t! S0 A
    //i=0;
: O5 m( m! R1 E  Q6 t6 x' J9 N! g    //j=0;
" ?6 z+ v/ A  M: T- G+ d9 G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ ]$ Z- f' G6 I0 j1 n9 w8 U    {  l; x! ?5 m3 a" b* ^4 i9 g
        /*  测试UPP传输的同时操作普通DDR数据" v' E, y+ H* b5 s+ U( M% }
        temp=i;
& U. v7 i, D' h6 g        i++;
5 w# K2 j8 ~0 u% ]+ c" x        if(i==1024)
8 w9 T3 c/ |6 l# d7 y        {
! j1 h% ]& ~) r' \2 ^" n, B            i=0;
: }0 a+ C/ k/ y. k* u2 X* E            j++;1 N* d' u/ F! u/ q2 `( e7 F. a7 F
        }
4 @" T; d: P& X" t        */( G. f* L/ [! S- v! |0 Q

3 q5 E* D9 ]$ d  p       asm(" nop");3 X" i" x6 I  o8 E9 E  [
5 z4 e/ g; W$ I# E! ?' V
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& g. T* n8 T" b; S5 H; x& [    }/ M/ B# ?4 H% d

2 J8 }( T; x, q- {( m8 f- W: Q1 C+ V    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 n: C' h3 o5 @( b$ p* V* n( x    //UARTprintf( "i=%d\n",i);
8 R* m9 @& c2 L! V4 I: s    //UARTprintf( "j=%d\n",j);
7 P( A$ [, F' d; a4 t    UARTPuts("Data mismatch in buffers.\n",-2);
+ U* `' U* I$ g" K4 ~; Z    if (upp_interrupt_count == 2 && upp_error_count == 0)! H5 i3 R0 g2 }/ s# f5 v4 h
    {: e. k# H/ k3 Z+ l; N& u
        for (i = 0; i<upp_frame_size; i++)( @4 T! f3 k2 H* Q$ M
        {
. ~: a7 P: [* y; p. ?; c            if (upp_buffer_a != upp_buffer_b)0 a4 m" h9 P0 L) D
            {8 Z! {; M5 R3 o- x9 V; f+ I
                upp_error_count++;: I+ j: l/ B; N
            }8 n4 R0 z' q& L* g2 G8 P, y7 u
        }
% O" x! _3 q* y  s, p    }- K5 C* p4 a* i
; `( \- O+ I& U5 ~2 V
    /* 报告通信结果*/
/ {+ ^7 I, v3 S- u( J4 K    if(upp_error_count != 0)
1 q% V0 ~+ X' Q  c& H4 G        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) q) Z- `: P" w) o    else, l; M, G8 J" N8 a5 ]
        UARTPuts("uPP transfers complete!\n",-2);
3 o9 ~6 V$ ]! M. F. k5 q1 G7 ?1 X% d3 }$ O! G" q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
3 m4 t  T( Q8 h0 V, }' I' Z    UARTGets(ch,2);5 e2 r5 n# B1 I6 q
    UARTPuts("\n", -2);
1 F& t7 {% z" W: _" c* x" n$ f( F) P/ b: v' _; f0 X
    if(ch[0] == 'y')& Z' m: @; a3 s. E) C  q
    {
$ b. q/ ?" L1 t& u0 X- f        /*打印全部读到的数据*/: j& c. v% \$ P* E. J1 c
        for(i=0; i<upp_frame_size; )
) K2 c" P2 F$ O$ y; n        {
* ^3 L* m& T6 J, |* d' H            for(j=0; j<5; j++)
, W0 f6 ^" ^2 {+ |" f7 v, b! M            {
- m0 o4 A- X9 y1 U- |                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
& T6 L: i! b+ w! y' E( ^' ?# G/ l                i++;' o5 @3 y9 [9 Y8 U6 T- r+ ^
                //if(i >= 4096)2 G+ u% y2 k; q
                //    break;- U( p) w3 h- o/ x- I! H

- }# }& H) z2 q+ v" w2 a            }
" ?- k4 `6 N0 t4 ^' @            UARTPuts("\n",-2);
4 V$ }# Q8 s' Z( v        }
# p! c6 w7 Y7 x% h    }
5 P$ m2 c. m/ ?/ ^" e  U  M, |6 K% o! Z
}

3 p$ O4 P! t4 D. w% v" f$ M+ f" f
! s3 y0 H1 Z0 ~

- x0 L/ @# l( H5 \2 z4 ?
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" _1 Z! y# c+ H8 N9 _

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 M+ j4 P& }/ O: J3 J




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