嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 ]% O$ Y. Q) ?# T  ]* q
Void UPP_TASK(Void)
: K& |4 |' H, ]/ s' I5 X6 m; u# p{
9 h$ {2 y- S4 U6 u" D% l  T" k7 v$ ]+ A6 Z
    int i,j,k,target_int_count=2;
2 j" S  y2 Z& d+ f    char ch[2];' A4 N7 R1 a: p+ v9 K

5 t$ J; r% d3 }2 ?
. f1 ?* d$ a1 ^: V5 W* ?' K
" |) a, G. s; `/ @, N: ?. j" I    upp_interrupt_count  = 0;# n# R# y2 P' c* P: ]( ]
    upp_error_count = 0;
5 Y+ g4 Y7 x8 E6 ^  {
* S' u+ ]; o1 p* I% C/ w    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ e. r9 Y: P, O3 \. n
    // Initialize data buffers
$ d4 |- t, a* _# b' B& |    for (i = 0; i < upp_frame_size; i++)( c' |$ i4 E8 i2 S
    {) b3 w2 x7 y1 [$ ]7 A
       upp_buffer_b =i;% C+ e" e3 e' x1 c. q$ }
       upp_buffer_a = 0xDEAD;
" N# G# w. j" D2 u5 z( ~    }0 \$ j8 E, V$ }% W2 n# ?/ l' K
  }! [" h0 p+ D5 E; S9 U: P. t4 S
    //for(i=0;i<1024;i++)5 ^( r9 i8 Z4 ^- X) |5 z
    //    temp=0;. x& N5 x1 ?% @$ k( ]% @, d$ \) J

: ]+ T8 t* r0 N    //UPPReset();8 D2 ]; s  o# B+ N$ n
    /*启动UPP DMA传输*/
! }0 i( E+ U1 T5 l0 D    UARTPuts("upp_prog_dma_i\n",-2);
. P' q0 O$ u" N( O7 ^" h    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 h1 L6 c* L; B( F& Q' @    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 N) p9 n" L6 z& `4 x
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ {5 ~) j) j  f8 N2 M( u
6 l3 _4 u" l0 ?) u5 F( M- v
    UARTPuts("upp_prog_dma_i\n",-2);5 d; W- P! i- Y7 R9 b" Q( ~% D8 a" w
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; V% R- {2 T5 t, h9 w
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ E, s" A; r; S  Q7 W
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ I) ~' c7 R5 ~5 g0 j! i/ D; m. E- Z, X8 o& r' _" u
    /*等待UPP传输完毕*/
8 d5 r! F: c  d    //i=0;  X0 y/ x6 k5 k. C% K/ r# r5 W
    //j=0;6 d5 t) P6 T0 O. z) I0 v2 V
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 G* K" I2 Z% J. [    {% H) K  s: I8 h' C: s! A
        /*  测试UPP传输的同时操作普通DDR数据7 g% @/ G! B& ]' W  D9 h
        temp=i;/ I. V# t7 }  ]2 _- l
        i++;3 A- g( `( e" R+ A: J
        if(i==1024)
1 b2 y( V; A, ?) r        {
2 }" b; K1 ?7 K$ L            i=0;' W8 i4 L' H: R- S& J1 G
            j++;
3 D& d2 p$ M1 h/ q& v        }2 f/ y5 _3 q$ i9 l
        */
  [7 O( J) [( N# G. z
! }; L, Z0 @3 K  N       asm(" nop");
$ A! L) f1 R1 P1 C- k" J# P% L/ |. z! J. H9 I
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 J. m8 l  l" w; k; h. s8 H' r    }
! R7 z0 O2 v- k* s5 s/ V! H  h! P* O+ j2 z# {- Y4 T% s) w* O, o
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) x: m' v+ ~+ P- v0 B$ R    //UARTprintf( "i=%d\n",i);, b0 N  {0 U9 A, |' U
    //UARTprintf( "j=%d\n",j);) B! |( @3 U) L" g+ q
    UARTPuts("Data mismatch in buffers.\n",-2);
" u8 Y5 s# S" |& V9 H' n" e    if (upp_interrupt_count == 2 && upp_error_count == 0)' \! N( F  D" U: d1 X: U
    {+ M6 D- P% i: w! `
        for (i = 0; i<upp_frame_size; i++)2 ~( D& I& [1 m& O9 C
        {" I) H$ `) |& k
            if (upp_buffer_a != upp_buffer_b)( E* R* z# L7 u; ?
            {* k+ z$ {2 @. G
                upp_error_count++;
- {  b5 a4 y0 e/ z) K4 j6 I            }+ I+ R+ O0 n+ H+ J( \2 m
        }
. T$ T& A6 z$ X' [  a    }: Q& `0 _2 e. ^7 r4 L
% m# Y/ W) u$ x2 D6 A2 ?
    /* 报告通信结果*/
7 x1 O1 F' Z" h/ ]; c    if(upp_error_count != 0)
: S6 W( W' A5 c" S. m        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% D4 A. i+ }: L# K7 l, |2 f2 Q    else
1 ^7 |9 F, z) y7 Z        UARTPuts("uPP transfers complete!\n",-2);$ q* e4 Y& g6 u: K8 P  q$ U

3 s6 A+ V' u( `: ^$ \    UARTPuts("Do you want to print all the data?(y/n)   ",-2);, E: `* I$ v* c
    UARTGets(ch,2);
1 R. _! Q+ \7 y4 D    UARTPuts("\n", -2);, m3 Y9 x0 x8 B
! @0 C: o7 P9 r$ u5 h' k3 |
    if(ch[0] == 'y')' o: R, S. h5 T
    {" s0 D9 e! L" v+ s6 K
        /*打印全部读到的数据*/
  ?6 a8 ^8 P0 R, E+ d6 C        for(i=0; i<upp_frame_size; )
; i' y( u8 P( I8 k, [        {* w/ l' |  i* A. h! q2 |% T! A
            for(j=0; j<5; j++)2 Y2 ], p; y8 f, u1 p% G
            {
. _/ M3 a. b) K" T; `. s                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' s/ g( o* W& @) z: z" ]
                i++;
$ o' U. G! V" \1 u, X" e: ?                //if(i >= 4096); Z  B. Z5 k, I; a4 G
                //    break;/ w( z8 @! [. z% k. C5 x( M# }
* U+ c/ K+ w( y9 q3 U% Q* ~& o9 Z
            }; B% y7 {$ ?6 x( @6 V; l" L7 g
            UARTPuts("\n",-2);
; T4 q+ I( a0 S% w' D. X3 D        }1 H, y3 z5 X6 X, h: i& O* d3 S
    }7 ]( z) ]; o  `" R$ U) `2 I, ]& M' O. K
4 J3 p% x# B1 z- f: F
}
/ h0 z- ]8 g6 G  p: m
8 z! j" m$ _% [; D+ l* \. p

7 i7 Y0 Q. f: ^* L$ r
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% r( y- I% l1 }( w2 N( `% B6 }
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( w& j' @4 I! N




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