嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. {2 B, c, T( Y: I! z6 J
Void UPP_TASK(Void)
9 D2 I! i) P) v& u. a4 ?{: A+ ~: U+ }. d2 |  n) R" d

+ V6 R4 ?4 S; \8 Y1 c$ a    int i,j,k,target_int_count=2;+ Y  V6 P2 o  ~8 G' C, U
    char ch[2];
1 m! b- \, e! c- t
6 r: s' w& Z/ x, _$ d' d2 e* w9 Z% [% [% k. P

0 F1 ]6 a$ k& f* Z$ T6 N    upp_interrupt_count  = 0;# S6 I/ |5 w# A) i
    upp_error_count = 0;
9 O# O- q/ y1 P( Y: f
  z5 Y; C6 x/ G" P    UARTPuts("\tResetting uPP buffers...\r\n",-2);
' g! q: y6 _5 k' u    // Initialize data buffers" D% d: [$ O% P
    for (i = 0; i < upp_frame_size; i++)
. H; x% k* q+ O  w& K# Q    {2 v% K$ n; L9 L, ~
       upp_buffer_b =i;) L, c& B9 @. E2 ^+ o. f
       upp_buffer_a = 0xDEAD;5 b- W7 k! }4 ~
    }' S4 P) t8 ^0 l* X% r" ^& s% p

% Q# v9 i2 u1 ^1 G    //for(i=0;i<1024;i++): B6 N: f: ]& K9 u  F
    //    temp=0;
$ d% [! C4 N/ J, j/ R( m( M0 F; f3 M1 h/ [; I- D
    //UPPReset();/ D3 c9 _5 c  ~& M: x/ @! [: r
    /*启动UPP DMA传输*/* a  @* C% ?* H$ L. J
    UARTPuts("upp_prog_dma_i\n",-2);8 Q. E$ m! s$ B: C9 }9 j6 P8 d
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;3 d/ v/ v/ a9 P: H' H
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 _# ]2 C0 e$ U& S7 W    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 W4 g5 H. C$ u1 J, h8 m. s
* T! q2 D0 e$ o1 ~
    UARTPuts("upp_prog_dma_i\n",-2);2 o$ y, h% Y6 o, M* b, ~) ]
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 c& ~1 @- N7 t/ R+ P
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 C7 N; @6 X' ]    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);/ m7 E7 C: B$ y; R! H
8 a, x8 m4 u, H( D( U/ _* U& @2 W
    /*等待UPP传输完毕*/4 S( x( k7 T( Z2 D5 f9 u+ B+ f
    //i=0;0 g$ ~/ X- R7 d8 \+ ?
    //j=0;2 i. i% W: b# p2 x
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 |& V( Q5 A, O& O/ o    {( G4 D# l# i/ ]' ?  J* E" e7 R
        /*  测试UPP传输的同时操作普通DDR数据/ f( M( {/ y" l* q3 R2 V9 z- e3 I
        temp=i;1 |4 B! Q, m2 j
        i++;
0 C" Y* F* ]) s) F3 }2 A' x6 y        if(i==1024)
! @: l8 M; i0 n/ }- B. o4 w        {
4 L, B0 H" E/ U/ X1 ?6 u            i=0;
) W6 {" f7 v  H  j' v; Z+ y8 n            j++;
! E# K7 X+ d4 m' z# G8 a        }8 p3 P' Q. p" [9 z
        */( V, |5 n+ j' Z6 E
( ?( r: A- ~* M9 C& h
       asm(" nop");
* i2 _* `6 p  w% Q! c4 c
# x( F) u% e( x  T       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 ~7 H3 I  y: G7 S% b* Z  m
    }
1 |, [# R' v  h+ h; H9 Q* R( L% T9 P% h% p" ^
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 y8 p1 y$ ^4 \) C6 s! h. l    //UARTprintf( "i=%d\n",i);
$ ~% t% |' B& ~- L    //UARTprintf( "j=%d\n",j);5 \) [* ~( c/ D* ^% O- b
    UARTPuts("Data mismatch in buffers.\n",-2);& U7 q8 y% E% e. V2 i2 h- R/ O* y
    if (upp_interrupt_count == 2 && upp_error_count == 0)
* ?* H4 K) d1 _. }; Q+ H  v, F; c2 @    {
3 V4 p* |! p6 ^/ L        for (i = 0; i<upp_frame_size; i++)
6 q  v/ i5 n9 \7 ], S. J- K9 E        {# V* k2 |# D8 W5 i3 R1 P7 C' a
            if (upp_buffer_a != upp_buffer_b)# E: }- u8 G; w+ F* U) a1 S& P+ Z& C8 z5 u
            {: }; x! M: I8 n* I. D& c+ l8 R
                upp_error_count++;
$ \* G: |: h7 ^' q" p# ^- }8 S            }
! |: H; B+ _! S  E        }
/ e: s% x% Q/ k9 N- M) c9 w. k6 b    }2 k4 j' p0 k3 y& l" N8 a, [; S
5 M* o  w' {- P3 _
    /* 报告通信结果*/6 O2 G, n9 n% ]* N
    if(upp_error_count != 0)
1 O. u+ T4 {5 i/ t        UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ u3 y# E6 S7 ~1 F# f    else; W$ q# V  d4 g  G# z: y5 c
        UARTPuts("uPP transfers complete!\n",-2);
: |$ x- Q/ D0 _2 {# `) L3 U" H
3 {+ a: `5 ]% n6 |0 {0 O- I* a    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) f: K/ T# n( i, e# z3 Q    UARTGets(ch,2);
- ]" B  X, O2 `9 Y9 p    UARTPuts("\n", -2);) j1 ~; m8 i( J) s- _

* c; x0 J! {1 m9 M+ P. ]- q    if(ch[0] == 'y')
  C  Z3 n. w' W    {" h, c' I. y/ y9 j3 b
        /*打印全部读到的数据*/
  }8 d0 o# n; m; W        for(i=0; i<upp_frame_size; )
  H2 n- H  N7 |4 m1 M+ ^        {
- ?; ^% X) l* i  t4 m/ K            for(j=0; j<5; j++)( Q9 M2 E5 b7 Z! b
            {
/ q6 \' Z* c; M# m8 w/ P" o                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 b- j: A: b1 J9 N4 g
                i++;
! U! Z  |9 ?: F7 J% t                //if(i >= 4096)
0 O! k9 D2 e' `+ F  c; |                //    break;
+ w+ {; T( e& X/ u8 s0 r4 I: X
! B; n  @& g# q' p2 y            }6 `, H8 _  S9 D* f. I6 H9 L
            UARTPuts("\n",-2);+ l. t+ ~- K5 z/ D. m
        }
. q% \( @( H1 I9 _) T- F! z) |    }
* y8 y& B% j7 E7 K6 {* `" |2 y
2 l: J" J8 _3 t& `& L% ~}
# i  \- {: q7 m, Y

- G+ i: [8 N, f2 U& Y" B
/ y9 ]# L5 ^' E5 `$ G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ O7 s9 a) g' c
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, D6 q; I5 R' m




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