嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 L2 u- ?- }, s9 T( w. I
Void UPP_TASK(Void)4 l" Z2 M4 ^$ w+ W
{
/ ^1 B% O$ F- V& s0 }2 e# U: w: x8 ^# T1 S9 Z7 D* I2 i$ ^) r
    int i,j,k,target_int_count=2;
$ M' ~" q' {2 h" `' L, ~% n7 H5 V; E    char ch[2];2 e* o  L& h/ Z) C

1 W1 E! x" K9 \- H1 a: |; I# l: \. e4 f9 t  g3 A2 I8 ~

4 N! @8 p9 C3 o: S2 z) H( s, M    upp_interrupt_count  = 0;, I3 Z  R; j5 H; U* i. b7 `: f
    upp_error_count = 0;
' a& s8 `# H9 R* m, k% R! F% G0 c4 `$ F* H) V+ W# v
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" w+ }, T: g4 `% S    // Initialize data buffers
1 Y  C) Q# F: S& A/ t0 u    for (i = 0; i < upp_frame_size; i++)
# o" {/ E0 n$ ~: p: u. [    {) ?' N; [! t8 _- c) k- I
       upp_buffer_b =i;
  v+ [2 a% B/ w2 z3 h       upp_buffer_a = 0xDEAD;7 e2 D! H4 g+ d0 o$ X/ d
    }
2 T4 D. t2 e8 e8 @' e9 D2 x8 W1 X) n& K: y
    //for(i=0;i<1024;i++)( I5 K2 Q- O  `: W0 t2 L% x6 W
    //    temp=0;
& ^  p9 N% r9 f5 o+ t: ~7 a& S! w) Q% t, t$ p
    //UPPReset();# A: B- K/ c; r
    /*启动UPP DMA传输*/) M0 S6 u8 R$ b  U( R
    UARTPuts("upp_prog_dma_i\n",-2);1 Y- M* k0 y1 N& }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. x, W: N8 A; @
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% i% [# @5 ]  o& B    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 j1 V1 y! H$ l' h9 u5 E( U3 P! M1 }# \( O! v
    UARTPuts("upp_prog_dma_i\n",-2);6 }* `0 s+ X2 c$ U. s
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 a- \  i4 k( A: ]/ o# h7 |0 W
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* B! J7 a' R9 b
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);' w5 A- X1 I& H- M
* D2 I. n" h+ b  f9 z
    /*等待UPP传输完毕*/  W# h5 z3 j$ i% `0 [2 N$ q! X
    //i=0;. L" Z5 R9 T! m/ {: Z( X
    //j=0;
7 m- K2 E4 }) B# @    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 G, ]3 X0 X2 a4 u% R$ K1 w5 f
    {
' h! i5 R% m2 w; i        /*  测试UPP传输的同时操作普通DDR数据" ~) P7 _2 p: W* k
        temp=i;
$ {# H. ~; {6 ^7 ?2 _7 a& O" z; b+ \        i++;% }* k& d" R( |+ v# ^( X" P) D
        if(i==1024)
4 Y, R3 s5 F$ g1 u7 w" D5 A* [        {
9 ?' B) K8 h8 Z1 C- K0 o            i=0;
- Q' t% G- z! @' W2 J            j++;; L$ i/ Z; i1 B8 p6 D. z
        }( W- M. o) M$ ?4 B$ s
        */
4 ?% A! M' f- z, P
0 p! r6 z* c1 c% B) z0 }8 J       asm(" nop");/ I( s/ \! X( ?, U3 q
; h- n% A$ J4 F# C! _' B8 z
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 A# X2 G* K$ ?9 @" T2 K$ ]; }- ?
    }0 Q/ f- N8 p$ @9 |% T4 W; u
" ?5 \  X) P. V. h8 I
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( ]/ N6 G" \* ?* E; c    //UARTprintf( "i=%d\n",i);
" r/ T# L2 _0 s6 @+ n4 z+ ]    //UARTprintf( "j=%d\n",j);
! I$ c& x8 b5 [" w- _    UARTPuts("Data mismatch in buffers.\n",-2);& R3 O9 {3 K4 B: J7 I
    if (upp_interrupt_count == 2 && upp_error_count == 0)
" Q; \" Y' O6 r    {
3 T! I0 z) V7 f3 n: y9 X- `        for (i = 0; i<upp_frame_size; i++)$ I4 ?0 O4 b& ^$ F
        {
# Y2 e2 \" d/ G/ y  a            if (upp_buffer_a != upp_buffer_b)7 d6 |( E, ?* u' Q$ }9 d% [1 V
            {
: Z9 }6 b/ d+ r* n$ _! a1 q                upp_error_count++;  `3 `( ?' |3 U3 y
            }1 [! I( Z# u9 R/ b: c
        }# v$ @$ b) W/ k9 j: o- W5 f
    }8 M( J0 q6 v+ \: k

9 y. ?- n0 b: T% X- b  m    /* 报告通信结果*/  ~$ x$ T9 f8 i! Y9 Z1 {- E
    if(upp_error_count != 0)0 L) P, ?6 L, m  x/ T1 h1 C
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ w& l" ?2 I/ v# Z) G
    else
# W/ h, `+ h$ }; \  [* Q3 J        UARTPuts("uPP transfers complete!\n",-2);* Z) I: p* r8 T7 }8 x2 p5 C( b

$ l( i# m1 E7 a6 H2 i, E  D* b    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& I9 f9 H7 i. O" ^; Q$ V    UARTGets(ch,2);0 E/ t! T* V" L& ]3 A
    UARTPuts("\n", -2);
0 h+ w, K" a9 E, t3 X$ v7 `) w# e! V1 e8 u+ `& x- `! t
    if(ch[0] == 'y')  B- s8 |! T5 m% N
    {
; B3 e- x! D9 B" l- `, V: [        /*打印全部读到的数据*/
" F: N2 g# N* q        for(i=0; i<upp_frame_size; )5 V7 ~# I  B' g1 d0 A9 ~1 D2 s# @& F
        {
9 x5 B  w5 s0 b1 v! Z! I            for(j=0; j<5; j++)! |8 p! [3 M- z& ?
            {
5 y4 s- W: C3 W: x                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* Q# Y! Q: X+ x$ b                i++;
! f9 y4 r( @& {  a& P+ q4 j) G                //if(i >= 4096)) Z4 r: F+ }' W% E* v) O9 p& r1 g
                //    break;
; R$ O2 s: o9 N- J  r7 W6 @% h2 K0 T  L$ e6 f( p9 |5 m
            }5 F0 J" v; f& D( r$ b
            UARTPuts("\n",-2);
# K, Z# w0 e+ [9 b! U% d3 Z        }
* ~) S* d/ j8 p& b    }) x# d8 A0 _! H% @

4 M6 Z% a& R0 |& a% F. Q}

3 h# _+ B( V* z& l4 X

# z; `4 I: q: g2 l( ^) k: A
( l6 n/ \- b! }" R( l
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 j% P" `1 i% i  G2 K. h7 i
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% W5 M) _- j' P' V




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