嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 H  C5 ~& O2 X% \
Void UPP_TASK(Void)
  ?& X6 M2 ^/ D& N  ~{  _+ q* m% H( ]" Y& k! x
. b! V5 X- |* z. d
    int i,j,k,target_int_count=2;  A& l. |7 U- ^- `5 v7 _) p8 N
    char ch[2];
$ f# w$ X( D. K: O, i. M
4 P& Q/ Y0 N% Y9 A7 s9 \  L2 t5 s7 v: b: l( L" F0 _
/ G; F0 s. a8 i: ^4 ?
    upp_interrupt_count  = 0;
2 M4 z( S2 D5 d% m4 V2 ]) Z    upp_error_count = 0;' t$ u: O) K/ y& C/ |% |- r3 K

( W$ N  z& Z3 b4 v7 J    UARTPuts("\tResetting uPP buffers...\r\n",-2);
% r( X0 A& V7 s3 ^% ^2 p    // Initialize data buffers
3 x# H- p5 R4 ]" {& V  p. `    for (i = 0; i < upp_frame_size; i++), c6 O, D7 ]1 n, S5 L. k* k) E( Z
    {
# M' H" x" N( j# y+ D9 w& x- U       upp_buffer_b =i;/ F6 K8 M0 h! G3 R
       upp_buffer_a = 0xDEAD;
8 x$ n0 f  @# X' P/ U    }
% L5 F$ G! \: L. Q* G
+ q2 P9 J8 f6 P& D    //for(i=0;i<1024;i++)$ D, J# J4 L2 H3 i7 G
    //    temp=0;( d# l+ L6 J, o, i

: q$ E" s' K  `( d4 i0 M1 F! W( X    //UPPReset();8 S5 _2 A6 @$ \: p
    /*启动UPP DMA传输*/
1 y# m  q  I* O# b+ K- b0 x! }  v    UARTPuts("upp_prog_dma_i\n",-2);  o2 u' @% U/ d$ @" q& o( `$ Z+ o9 e
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; w# {$ A$ G; \% z2 k! H% W( _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: y: ]# f+ |, R  I$ f( B    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 \2 F* `% x$ m& G; Y- O
: h) C! y# Z& l( `6 W" C
    UARTPuts("upp_prog_dma_i\n",-2);
  X% V$ \5 y) q9 |, |; O2 s5 @    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# n8 s% Q3 o+ H; i7 H  Q$ t, b
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 s% F8 j( Q$ e' j: ~$ C
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; p; ]6 j3 w0 q( i( J/ G8 [; z5 N% ~$ O9 ~+ _- M+ O* L
    /*等待UPP传输完毕*/1 M% i! H. K* w$ x
    //i=0;
9 V# d/ c3 F' d6 w, J2 @% D; _    //j=0;
3 `  M$ ~8 W; L: K. c, f    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( ?+ s# D. K1 b  \% S
    {
+ p% |. i9 o! F4 R        /*  测试UPP传输的同时操作普通DDR数据1 O- T. m2 I4 _! M; @2 Z: e- I
        temp=i;
! P3 [+ u* r0 ]) H5 `3 X3 K! ^        i++;
/ s# M+ \4 m) q" }4 F$ }1 x: n        if(i==1024)9 Z; O: I1 `! V
        {
8 x5 ?5 |) j: r; ^0 B0 ?            i=0;
, ]% ?0 k1 J2 C2 z5 {) g            j++;1 ]( B; |! R* J* J* A* A7 i  E
        }
8 X$ R: y' Q1 B, W3 {: f& c% D        */
( u( A# N4 u) l2 g) l( A9 i# t/ w6 \
       asm(" nop");
! n/ Y! o( ^* `& d7 Q1 p! q
, V# j/ `- J  G. l       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 H' D5 T* M8 [
    }9 s* K, |9 @3 q/ U5 r  F
+ y) V8 A" ^4 k+ c* @5 W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/% M8 U1 [2 F2 k: Q
    //UARTprintf( "i=%d\n",i);
. E1 \6 l( x; D! W1 o- c( ?    //UARTprintf( "j=%d\n",j);
/ p9 Z% ]2 k4 u. L, l6 w: ~    UARTPuts("Data mismatch in buffers.\n",-2);/ ?- b4 `% }" E+ D" V" w. s
    if (upp_interrupt_count == 2 && upp_error_count == 0)6 K0 C& K6 z. A5 t
    {+ Q9 f3 C8 e5 g- J
        for (i = 0; i<upp_frame_size; i++)) \$ B% _; A- I3 K: d
        {
/ t" Y: F9 Q9 A: i9 t/ u            if (upp_buffer_a != upp_buffer_b)3 B3 Z5 W$ x8 Q
            {/ }; D8 ]# B. b1 c# F9 ]* q
                upp_error_count++;$ ^  G5 r# W$ S# n- a+ E, G4 n
            }7 t1 |+ z+ O! B( m
        }- m4 z& {! h2 R$ T. X. B
    }
- G; K: l3 H, k3 J' S" l& b
0 }. u" b9 o% r$ i, n5 k    /* 报告通信结果*/# {! S3 w9 |0 D
    if(upp_error_count != 0)
. U, G" M$ J5 ?3 J        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 V# C5 m7 H* ^
    else3 \, \# M! g& g, ]0 B
        UARTPuts("uPP transfers complete!\n",-2);
1 e+ f6 A6 \; M2 ?( G+ g% |' m0 r3 W! j! x6 ?6 |
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
. }" x* K  f2 X  C1 H' U    UARTGets(ch,2);
0 `& I$ T, V+ f( y. v    UARTPuts("\n", -2);8 x! y. _% G; e5 m9 A1 g3 d9 f

! V5 _) v+ j+ Y% U+ @    if(ch[0] == 'y')
/ X5 @1 S4 D( t/ f+ {6 _  K    {
$ p' n3 ]+ w; s  o, ?        /*打印全部读到的数据*// P8 X  ]" |3 M# B7 [9 g. q) ?
        for(i=0; i<upp_frame_size; )
/ I# c. H$ i: s6 k6 f        {
2 _* o& @* ~& c" N: ?8 \# f            for(j=0; j<5; j++)
: R  r. o7 v  \4 C/ Q. }% V: v            {2 |2 ~# N& K7 K& u# A3 a  |: {4 k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 \. ]5 O3 n! ^4 m9 g- }
                i++;
: l1 c% e6 ^# i9 B' r- j                //if(i >= 4096)  n- m8 s" v/ ~  ?9 f& K+ F
                //    break;
! R6 C8 K/ y0 U7 v" I, O; m
9 F( ^! \6 T: s) z$ L/ s            }
2 B1 \) d9 ]2 q; c3 t2 {            UARTPuts("\n",-2);
/ C9 Y4 y- L8 v        }3 B% D/ c, g9 b# r+ s
    }
2 Q% u  k% Q0 r3 @& ]/ t: C* \" R# Q; z, k: [% t
}
- O: Q' w8 Q" l+ U9 M, W

! T0 J; ~4 m$ X9 \. T3 h
( L6 m5 H6 K, S% S% ]5 n4 S' t% h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* @/ x. C% w" S+ }" r

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. _. f, ]# v- J5 n




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