嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 ~5 B# @7 j2 Z
Void UPP_TASK(Void)
! h  R$ R, |% G4 X8 o{
& Z9 W8 I6 z- Y% K$ g. A1 q' e* v2 w  ]+ l( J0 {
    int i,j,k,target_int_count=2;
2 u* i  P# ?# H% ~% B' M    char ch[2];
( S) d0 \" e4 \+ i3 b# Q3 I# f: [+ l5 N8 r8 `2 B  c$ l

3 X0 |% t- Y) k2 g; a! k& _. h  [( S3 v, g
    upp_interrupt_count  = 0;
8 X, H) Z* W# Q' u' u' O& a9 q    upp_error_count = 0;
9 c4 j4 z% d: y& t# [( ~) _  }7 s# g+ v- K0 b4 G: L8 D3 b! W
    UARTPuts("\tResetting uPP buffers...\r\n",-2);5 J, S- [5 [/ d/ r; f
    // Initialize data buffers3 Z! J3 Z8 x3 C# B- J* A) p
    for (i = 0; i < upp_frame_size; i++)2 A) J5 F0 a) r
    {- q% H( ~* r, b" N( B$ n. ^) Q
       upp_buffer_b =i;
) U) _. ~8 l' ?2 F0 C5 G" I4 F8 Q       upp_buffer_a = 0xDEAD;+ T, t+ Q- a$ R, N
    }
2 C& X( [! z6 u2 H% e5 o5 ]% L0 i. `1 d
    //for(i=0;i<1024;i++)
) w& x) J. W: c# `* {/ C. o' A7 U; Y' I    //    temp=0;
4 y* u/ h3 s+ f, [! V
, _" ~7 m4 W  ?9 }3 o1 g9 ]* a    //UPPReset();% Z$ `& K$ e8 P: I. }/ P
    /*启动UPP DMA传输*/
$ e* _5 R! l' k4 w    UARTPuts("upp_prog_dma_i\n",-2);
& r& l+ r7 d7 Q    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 F: O% `4 Z0 e5 f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ U4 `) k4 _5 Z4 q# W0 r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' J+ n! }3 F8 W0 r, O& A

( r, \) j  D- l2 o    UARTPuts("upp_prog_dma_i\n",-2);& w" ~( V. R8 Q& ?
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;2 M6 ^8 K9 n4 U* c7 p- n8 p
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 `& F6 x- h% A4 `
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' Z* l0 I& Z. q
8 r) V1 t- O+ h  z0 K    /*等待UPP传输完毕*/
3 d- W% d+ T6 i5 f) v' J    //i=0;  h" |8 v% j. Q
    //j=0;
: y# R. H$ Z- {" Q) L    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( P+ U" }# h. |8 T    {5 w+ B( W) _9 K3 f* ?2 z9 d' V
        /*  测试UPP传输的同时操作普通DDR数据; \0 Z* q5 f% l4 X
        temp=i;
) U9 ]# Z& g0 v# E7 C! \        i++;
" y4 T: E: @. o! U' R: o! d        if(i==1024)
- E# b6 W( P9 R* v* C: V        {
% v* G- y2 u4 J. R& D" j            i=0;
2 I. o' E7 `, j/ N5 P% l- N            j++;" ~. r6 G. i0 w: C- [" Z0 B" ^
        }/ s1 c' a$ t! s' O1 [+ a
        */0 d8 u$ h/ E* }. C# c, k
2 j& w! s9 f. J# y$ I( s
       asm(" nop");5 C( k6 u& ~! `8 n
' q+ U# N* R7 F$ D8 l5 K
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& \; h# ~& q( f5 ~; X/ G; X
    }6 k2 M; C; Y% L( m0 c
. z. E1 V" n+ _
    /*检查UPP传输的数据是否正确 (loopback modes only)*/4 }9 I5 U: j: w/ k2 ]9 b) D
    //UARTprintf( "i=%d\n",i);7 s# j2 E2 v, n3 t$ n5 y
    //UARTprintf( "j=%d\n",j);* s; G# f8 C0 K/ I; K
    UARTPuts("Data mismatch in buffers.\n",-2);
( K# m. o) A9 K0 ?    if (upp_interrupt_count == 2 && upp_error_count == 0)! h# C& Z! C* ]+ Z0 A
    {
; z8 A. y/ x. S4 N4 \        for (i = 0; i<upp_frame_size; i++)& r# h- N; T; }. }
        {1 L2 h! _4 Q) D! R8 {+ k
            if (upp_buffer_a != upp_buffer_b)
$ q# Q' r6 D( n# o2 x. ], D; s            {* |4 L! J1 {0 C+ \  d7 v7 ~
                upp_error_count++;
  L5 d( C6 v5 G: N            }5 v- v6 o1 P; B$ r- W
        }
! J3 W) l% w6 _: ]    }: i# v- u! ]4 y3 [
+ |! H# j5 ?1 f4 I& Y
    /* 报告通信结果*/3 W! ]* ?/ p# Q: k- C5 l7 g& U
    if(upp_error_count != 0)" {6 a$ X5 }4 w$ U3 k( `1 j1 [, w% `
        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 s+ [9 w, c+ ]/ s9 R1 @
    else
9 ~) b) b6 t2 E        UARTPuts("uPP transfers complete!\n",-2);
% z  c5 ?( k5 V2 o, T6 A2 L, l( ^
) V  B  z" R8 {6 h; i    UARTPuts("Do you want to print all the data?(y/n)   ",-2);9 \& d! ~. k3 U' t
    UARTGets(ch,2);5 a  F; n) R9 }1 I# r+ R
    UARTPuts("\n", -2);+ T0 I  S  t- O2 q! E7 n/ y$ ?

$ m! ~  ?( l" c" w# I  E8 m    if(ch[0] == 'y')9 q. B- A5 @( }% F" w5 K
    {
2 n. @1 p# N8 {. p% }# v        /*打印全部读到的数据*/
) |" z. A2 L5 {+ |/ O& t8 o8 U        for(i=0; i<upp_frame_size; )) P- ?' U7 @+ G! n+ {# ~' M6 E
        {4 u6 ]- C6 k+ c. i" e: h2 F
            for(j=0; j<5; j++)
+ |; w5 f# A; J" L; b4 j            {, r: R8 S  ]  R- V/ ~: r$ B) F
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# o2 d( M  j# M                i++;
# Y# i' M  T9 t# y8 g% B                //if(i >= 4096). K3 }* x4 h9 o3 {3 {- `3 p0 d$ q; Y
                //    break;
% x+ D4 z" u  w
( Q( \& H5 ]/ z" z; k! p. N& [" P6 a            }4 Z7 r8 I, Y: c: h
            UARTPuts("\n",-2);
4 S# m2 T! |' M# T* }) X        }- U3 r' N! \# ?% ?7 S0 ]
    }
: _1 L/ P; k9 v
) l; v+ s2 V) p3 p; y' [9 [}
; {6 i* i* Z+ |7 Q

1 b4 x1 n8 I4 n. R  {& x% G0 }) C7 J1 ?

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 |& I3 H( E' \8 M5 ?& M
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% |2 r4 |4 R, p





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