嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# M0 X3 {! C' v1 b
Void UPP_TASK(Void)- K3 X' ~4 F% U# I
{
, c/ G8 |2 w! n& m/ m5 g% z( T2 l0 h& G; m8 G
    int i,j,k,target_int_count=2;
' t, P5 F* N6 g0 a! O( V    char ch[2];
1 U4 n* ?" W* N5 K+ `" E  ~
) s9 y: i2 t. n* T; s% \9 f; K8 W: L5 r: |+ S
6 F/ N0 U; M3 {
    upp_interrupt_count  = 0;
9 p  H4 d$ t- k0 _1 B7 L; e" {5 N* I    upp_error_count = 0;0 X4 S! l7 s/ e
( F% d1 z3 _* w" O3 @/ Q* b
    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ Y# p' C3 p0 a
    // Initialize data buffers$ N7 ^& X' z  h4 D8 o+ L; V, J
    for (i = 0; i < upp_frame_size; i++)! n' v- z6 ?+ r6 }& ]3 W2 l1 f
    {
3 a* z) e' e7 A8 b# K3 w       upp_buffer_b =i;6 `" U2 q" h* Y5 U9 V6 W
       upp_buffer_a = 0xDEAD;
1 L: h1 x/ B4 V5 b# L    }
+ L6 i1 \1 f  k1 F- f$ H+ M$ v
/ a4 E3 z) f2 U6 d6 N    //for(i=0;i<1024;i++)9 t- h; T# v8 p- \/ t8 E5 |
    //    temp=0;
& l' B4 L7 ~4 J$ v  [! W7 E- B2 K/ t5 {2 j+ n2 m
    //UPPReset();
# b% N9 p( C' ?" F$ a+ b5 f) T    /*启动UPP DMA传输*/5 M9 m; V7 w( n' M; G5 \
    UARTPuts("upp_prog_dma_i\n",-2);
& {7 J) S7 T. @/ O; N- [    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" q3 _6 K, N; y& [- _
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. X: N) V% ?; t+ m, f8 e
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, O3 `1 {# _+ d+ E! j
- P- X7 K# I9 f6 Y8 T( I
    UARTPuts("upp_prog_dma_i\n",-2);
% L; h; T1 S  P6 `2 A$ {( }    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 p( G' P' C0 B$ Y! l  ~! S
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, `* A3 g+ Q; Q: A) a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- T( _8 o7 O6 q: ^  Q. `' t" j2 W8 h. o: _2 M! a# c
    /*等待UPP传输完毕*/
# `+ ]. _* G% ~$ o    //i=0;
+ N, f# j" d$ ^8 j( r    //j=0;
2 \( d  S3 `1 O5 S, f    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( T1 w( [# e# {* L8 D" p* S    {
- x# x% l9 K7 K' G- `        /*  测试UPP传输的同时操作普通DDR数据, @5 Q- E# W: K* {7 `
        temp=i;0 [- B) O: w  `6 L! [
        i++;/ M0 C6 N7 N& A2 z+ a
        if(i==1024)
$ B' Y4 m- a- }! L) t) c8 D$ j* Q2 i4 T, O        {3 y( G- |3 R" n/ y2 m
            i=0;4 R3 B! ?. s9 G# z: F$ d8 }, X
            j++;3 m6 N, ?+ g; r9 J# [" a6 B. ?. a
        }( V' W3 p) o# \
        */
+ s3 L5 L! Y2 f9 `% H& ~4 v% \+ h! j
; G* S2 y4 V2 Y3 g& L- u       asm(" nop");1 p( |$ ^* m3 v' g

% r1 N# @& Q) v% e3 [9 \4 ^       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 n0 k, t  |1 n    }
" C' H8 n0 I! x3 K
# [' O0 ^6 e* C7 d5 e" f4 B    /*检查UPP传输的数据是否正确 (loopback modes only)*/
, u' _8 z$ u6 X; B- C    //UARTprintf( "i=%d\n",i);
/ a4 y+ t/ M+ v& {2 T0 l    //UARTprintf( "j=%d\n",j);
' t: v  V6 O3 C! w0 I% e6 i! ^2 t3 m    UARTPuts("Data mismatch in buffers.\n",-2);3 k6 O5 x( R3 s$ T4 _' |
    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 L# M0 \  }$ R' h7 I* y    {( ~4 w* k! K/ x9 x$ K/ y& O7 \
        for (i = 0; i<upp_frame_size; i++)- k% Z; _) O* W  U
        {
( r3 e6 Z( J6 W7 j, c6 c            if (upp_buffer_a != upp_buffer_b)
6 K8 \, P% d! P# r+ z) X            {
$ r* s/ T4 _" @* G                upp_error_count++;
! C! k$ k  b" S# {& Y+ \            }
- ?" {0 I1 Q3 y3 p  @2 j        }; |- v8 p+ v" S6 G0 N
    }* |8 i/ b$ B# `

8 ~; n: ], N, K9 W. w% q; n    /* 报告通信结果*/1 W' y# {) j! f) i, x' D6 B) T
    if(upp_error_count != 0)3 ^  P+ l' ?$ j# w  M. ?+ s
        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 p& c7 I) _; h( u$ O- }
    else
8 y! Q, h) u: [0 s% Y6 e5 b. S        UARTPuts("uPP transfers complete!\n",-2);( k0 f  Q; \6 F  i0 s
/ c6 ^5 w, p4 d! u
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 ^0 @; X* W3 q. B1 A( p
    UARTGets(ch,2);2 f7 @% _, Y& D
    UARTPuts("\n", -2);
! O5 L! ~1 r/ @/ w
  O: a) a/ Z$ c) p& V+ h    if(ch[0] == 'y')
. p  Y) A, m5 |" W5 f    {
% M6 F$ u. I1 S0 V        /*打印全部读到的数据*/
) T( C' d: n% }9 U) A2 l        for(i=0; i<upp_frame_size; )
+ d! }5 W/ f& w5 }9 M: E) v+ d        {
" Y5 A+ Y3 L' k7 B/ C- }! ]            for(j=0; j<5; j++); m7 r) }7 W0 E
            {
- [/ \$ J; l9 i, b+ ^; `; l- I                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. Q. p" v1 ]$ i# ^1 n                i++;2 [( n! E5 @- [- X- m
                //if(i >= 4096)2 S6 A9 X! f9 C+ |, e9 G
                //    break;
( R+ u- r: X) b( S) b! D, N# ^
% X" [, E. N3 Q- o6 ^            }: K2 ~, O$ ~8 K: v- Q" T2 D
            UARTPuts("\n",-2);" z! D( N7 w8 w1 o8 v
        }* A/ J! C5 s0 h0 {
    }. Y" K' Z1 z$ y/ l4 ?

! D$ k5 M) w4 Q# y0 U: j}
" X7 w% G* \# d, D7 _
4 m; S7 v( h9 k/ X; Z

4 Q8 {! X7 E- B7 @; A+ d
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# D6 A: y/ ~+ m) v0 t8 x* T

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- M9 J3 h7 g1 L' E6 }





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