嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 d% a" ~0 P+ K2 H+ B# I9 V0 `4 l
Void UPP_TASK(Void)+ I2 {+ \) t+ @
{' }. b' R- D& X& e8 m
$ T2 O" N' i& N: ?; p
    int i,j,k,target_int_count=2;
  ~+ k9 E$ d5 y4 G0 ~    char ch[2];4 c( }6 |3 x  ]* w& _3 [  o4 }
" ]6 \& F, [1 ~. u7 c  o
) [3 v' z( X) @  R4 B( n3 D( ^! _

2 _! L8 i& Q& L3 ^( g) K" s    upp_interrupt_count  = 0;
5 m/ J( |" P' r    upp_error_count = 0;6 e' B3 H$ I4 R* ^/ [/ l6 J& i

- h3 e7 h/ ~+ e- j4 w2 v    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 `' A0 J: ~/ C& u4 O    // Initialize data buffers
' i# v  k) s. _. q6 {) B+ B    for (i = 0; i < upp_frame_size; i++)
1 ]4 G- r# w. v3 i. Z# l. l/ C    {
7 c9 \% O2 E6 Q: D8 K  k5 @       upp_buffer_b =i;" Q$ v7 [8 C7 T: h+ T. R; t
       upp_buffer_a = 0xDEAD;
( ]$ I% a4 o+ l6 Y    }
) y0 ~9 }( a8 V/ G( H  l  p2 C0 C& q: W. \+ f  ~
    //for(i=0;i<1024;i++)
* v2 a+ s# {  a. I    //    temp=0;
# p9 m+ `  u8 C
: f0 C% }  j) O/ N+ R- _    //UPPReset();" S: P- S2 ?+ j) z$ x
    /*启动UPP DMA传输*// i) w% _6 `5 n$ I7 P- M% |
    UARTPuts("upp_prog_dma_i\n",-2);- F0 U: A7 o6 C5 D
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 d  y* j' d! y& R    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 U2 I9 W5 j0 n8 L; `    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% s0 Y/ [- C. k5 I5 b% n  s' R# g, H$ q3 Z3 u
    UARTPuts("upp_prog_dma_i\n",-2);
* G; f1 v2 g6 p/ Q" A: ^. u    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 K$ `3 ~7 r1 P% j" U    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' N8 p' u& x& @& v    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* x: _+ i3 z8 O( H7 k! v5 @! B7 O4 x# W  o4 D
    /*等待UPP传输完毕*/
8 }  c  y6 r' R3 l; r    //i=0;
0 Q, U2 U1 E: _6 k    //j=0;
$ Z: H, @- W- i    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( A, w8 M3 H8 g2 T3 M0 a% Y, W
    {
4 A$ i* p* Y7 v- |9 T        /*  测试UPP传输的同时操作普通DDR数据+ w6 ]8 `5 ~: N  m* Q/ r+ Z3 M
        temp=i;
" N6 L1 K2 Z9 N/ c  p( c        i++;
) s; p7 P  K( X* w6 Z% b) b        if(i==1024)4 ~( R( z. x. @+ E% R6 m
        {
" q1 p# I% u  d$ a            i=0;8 p  C% x" v9 w0 C. ~: Z
            j++;0 M; M$ Z7 O! V6 [
        }
0 ^% t9 [6 V/ f2 T6 j, k        */1 L7 E- K- U" B5 {- c

. I: O0 R0 l9 m; Q       asm(" nop");' E/ u/ D- n9 M+ z) O5 B

$ B9 ~6 o# r3 t# B% P       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 _! t/ [0 d, n& l    }
/ V9 h# C! h# a* |/ r5 E6 i* `1 s9 O6 d9 e" }  n9 P- e; p8 I
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
' W# }5 t' D6 E7 J6 F    //UARTprintf( "i=%d\n",i);
# r7 o' P; `3 a4 r. l9 I    //UARTprintf( "j=%d\n",j);: R4 M. N* p7 }: Q8 x# X
    UARTPuts("Data mismatch in buffers.\n",-2);
6 N9 o0 r9 b. n+ \9 ?    if (upp_interrupt_count == 2 && upp_error_count == 0)$ B! H) i: C; K" L$ l/ @: F
    {1 G* ?3 V* t' N6 Z: W( H6 p8 O
        for (i = 0; i<upp_frame_size; i++)" C- M$ C% V7 h; g. q7 p8 c5 i
        {$ _2 l% w% e, _0 C+ @
            if (upp_buffer_a != upp_buffer_b)
' c) ?. ^* k; r" W6 Z            {6 [; e, C% Y: b/ t! r1 d2 B
                upp_error_count++;% a% X% y; h& s, {& i$ \
            }
0 F$ l+ m# i8 Q- y" E( c        }' o5 T; h2 s4 G& g5 k; o( A5 d2 N3 K
    }, ^' `" f& ^) E- h
; k9 k" @. Z6 q9 Y( r
    /* 报告通信结果*/' ~5 V( k" A, n
    if(upp_error_count != 0)8 D4 U+ `2 i0 t- n# M/ m
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 c+ g( X% Z% [0 C    else, R: M4 W2 l. @  f* Z, B# ?
        UARTPuts("uPP transfers complete!\n",-2);! x8 k& f# Z( ?  d1 P! f
! n9 l* X$ S: ?9 w, @) ^* ?7 g
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 r  a- J3 S+ U5 b- ]
    UARTGets(ch,2);
8 m/ M! ]" o8 ]) y8 A. J- Z    UARTPuts("\n", -2);% g3 C5 c/ u: ?; Q6 Q- C, p

) |, G& c1 p% K    if(ch[0] == 'y')
' F% I* y6 ]* N+ N4 Z6 ]% V5 P! u    {
- q$ a3 @  [/ i        /*打印全部读到的数据*/
5 ~8 N- v+ G  d( s! [$ ]. J+ v: d        for(i=0; i<upp_frame_size; )0 o# a. k) Y( l8 X' q
        {; F* f: y; D& b3 ?. I& T" V4 H) V  T+ Y
            for(j=0; j<5; j++)) o& a6 s. \) o3 p  _' I: v
            {
; {6 d- k6 y+ |- f0 o                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& [: s5 s$ J- m6 T
                i++;# U# G$ @: k' s: K7 i
                //if(i >= 4096)
& T  b: P% w" r& i. f; w, i                //    break;4 Z& u4 j* L& {2 v$ @0 k$ P, P
6 n+ |, S* C" q% w
            }9 f3 |9 j) t/ \5 a/ ~2 X- \+ o+ J
            UARTPuts("\n",-2);
; ], t- ]% M" O, U        }; ~7 r6 U8 a  r/ @
    }0 V, S! t' `0 C  j8 F
$ `( u" Z' P% a
}

( j& Q1 H, I- F% y. T

3 \2 g, j+ u$ ?: i1 |" z
- g6 d: p/ n6 _# E" d' L
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* |2 s' P9 N3 ~9 k( {8 E' i% [

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 U7 i* X! [4 U" u- b# h* m





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