嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& v' W) j5 C5 g# e5 O7 Y1 D& W5 }
Void UPP_TASK(Void)& x4 |$ j! i$ G! p
{
5 b3 C4 \) M! d" U, Z, U, v# q* m9 C! V" [3 Q
    int i,j,k,target_int_count=2;& o1 a) H, c; x1 a+ G( G
    char ch[2];# z1 t6 ?! P3 N( `. q
& d7 _$ \7 P$ j3 R/ v8 M$ s
' w8 X2 y6 N- M# R+ ^9 b# {

  h; c" d! W5 W5 B! w; P    upp_interrupt_count  = 0;# Q( n, h3 Q- v0 [' c
    upp_error_count = 0;
9 C2 {. K% }$ s' K
8 V" O: |/ {1 |$ C+ B* m- Q% f    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 p' X' R6 S2 ~- q& [    // Initialize data buffers7 {8 t# B, N) a, p
    for (i = 0; i < upp_frame_size; i++)! s& v: G2 O( `$ o
    {
+ R. V7 l% `$ ]6 l0 Q. L& o( i% T       upp_buffer_b =i;% Z8 O2 M3 `+ a+ c, O: _
       upp_buffer_a = 0xDEAD;" P9 v1 g1 K2 ]2 h) s6 I- z
    }# ~) o* J1 k2 t; Q- K, z
+ e0 P) x- O, F: h8 z2 Q  k
    //for(i=0;i<1024;i++)
2 l& c9 S- |4 T( l# V    //    temp=0;7 H( _( v' x  B) N' R& h
9 u; Y" q) r( ^( P
    //UPPReset();9 F! \4 T. k" b9 `0 b
    /*启动UPP DMA传输*/3 D6 w; A$ \9 V; f( ^- @) X2 n
    UARTPuts("upp_prog_dma_i\n",-2);
7 ~+ K" s* m# P: T    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 F, ~" t7 a/ }( Y1 u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ n% l" |8 V0 P# h
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 Z) q( }% @5 t9 @3 c% W, `0 G' g( k7 k- u' o9 d
    UARTPuts("upp_prog_dma_i\n",-2);% N' x& M/ p: y8 c: n( S
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- h% b$ ^/ f, [- u
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& v, ~. ?3 {8 \6 F- f    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( ?0 u& z# z. t9 Q: [
/ o% z9 o8 V% G  I- h2 T
    /*等待UPP传输完毕*/
( {' [! U, Z) U3 X1 w0 X    //i=0;
" i& z9 I6 L/ l0 N9 J1 A+ P& p    //j=0;  A3 P! v. ?; N2 X, V6 I) x
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( z+ v0 S9 o0 M! I
    {
' D* t1 p/ Z5 L. F# z7 Q; t        /*  测试UPP传输的同时操作普通DDR数据
, ~8 l7 f8 M. g8 S. e( F: J5 ~        temp=i;. s0 E" m- P# ^- {* W
        i++;: _4 T( p( y( h5 z2 ]3 K  D; ~
        if(i==1024)
# D; @8 [% c6 g  v' C6 x2 j! p6 w        {
8 {: I; l5 u( ]3 Z) t9 o: W            i=0;$ W% O) r' f# c8 G$ e- `
            j++;
4 p! i& [; o- i! S' l% x1 s6 Q        }
# ?* W3 K  C% Q" s        */5 z! v/ u, c  _& F( N

: a( |, s4 x+ i       asm(" nop");
0 y1 \3 z. t/ R( S# ?8 h- f
: }- \* F$ ^+ y# X) @6 @0 Q! r0 q       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ B; [. A7 c$ e4 s, n    }
. c- u* ^) W5 s/ z5 ^
' s9 h6 q% {1 |/ O    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ \8 W- F$ `3 p- q" ~( J    //UARTprintf( "i=%d\n",i);
& W2 M# }9 e& x. l0 x! e# b0 A0 n0 u    //UARTprintf( "j=%d\n",j);
/ u6 t5 U& s4 P    UARTPuts("Data mismatch in buffers.\n",-2);+ T9 D5 w5 h1 U3 z% e3 Q% w4 {' I
    if (upp_interrupt_count == 2 && upp_error_count == 0)) o- S7 k" p8 R7 ^
    {
4 ^) u9 d% ^- z        for (i = 0; i<upp_frame_size; i++)
6 W7 V+ M5 [+ O        {
) W2 x/ V/ O# W: F4 M; j+ h" ?2 U            if (upp_buffer_a != upp_buffer_b)8 l8 o7 V1 l* S  ~) O6 I: Q' K& @
            {5 \) ]$ h( E6 H( a# \2 A) ~$ `% G
                upp_error_count++;! g' W+ i$ G" }. G( p$ m% ~. {
            }9 W3 T1 B7 ^- P3 e+ F  Y0 {
        }$ G/ p* c: H: C2 N% \& f3 x
    }) M. v+ T+ o# y- y: H8 O

! Y/ N: F. b) f( O/ W* g    /* 报告通信结果*/
8 U; D9 t3 e( [' e    if(upp_error_count != 0)/ z5 V0 _1 m  C1 B) }
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 v& ?" R) d+ P! b2 R# E    else
( u0 K  I5 g+ q" H/ V        UARTPuts("uPP transfers complete!\n",-2);
% u, `: f* f' x2 q: N- J- L
( P  u" W& G9 L2 D' s- t4 r    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ b& n5 v9 G$ B/ ]! k0 _
    UARTGets(ch,2);
9 Y6 N: M* u5 x# O" U; f$ ]$ p    UARTPuts("\n", -2);. @  O" ?3 ?0 c/ @* [2 x/ T! ^

* {7 d" `3 I' F% \% s    if(ch[0] == 'y')/ f, u, W; m6 N$ P; J  e
    {
, ~0 p2 I! [2 G8 j0 {        /*打印全部读到的数据*/
! Y2 r, G; F$ j1 t        for(i=0; i<upp_frame_size; )
3 g& v9 Z* T9 T8 E" H2 _6 v3 ?        {" L5 \) j, d' L$ z% {# l$ m
            for(j=0; j<5; j++)
) b  o! p# s( }6 M- T0 S            {
- B; h0 }! ]' l6 R* @+ i' j                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);4 n2 A* t' Z. L! E+ K* W
                i++;. O( p6 g# g, y% o* B
                //if(i >= 4096)
  z. G$ U1 K! r, r8 z9 M                //    break;
# D2 e. v+ Z* R) w6 e( M% H# o: U. `6 m! D6 m# c
            }
, }0 `$ x$ Y; N5 I, |            UARTPuts("\n",-2);
1 n" @  L6 N" ]  r        }4 }% A8 a/ p2 y# k% |
    }$ ?% ^, E& W( x6 S4 b
* G7 H- L! h1 c* v
}

/ m9 l; S6 s  \, v0 g  ^! F

( P# \4 u  t' O# ^7 o6 O0 D1 A% k! C8 `. k5 u0 ^) b  ~- P

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ m2 j+ h, W% ^. P2 b
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。. H) @" a6 m" m3 M$ U





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