嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% w* A: m$ j% l) l$ t
Void UPP_TASK(Void); J( n; v7 z: A; D, `- S
{
; ]0 v6 p+ ]0 V* |, t3 ]& T$ W! T  g7 q2 a
    int i,j,k,target_int_count=2;1 Z" k/ T7 o( Y; f$ `( o
    char ch[2];' C. g- O! N8 P* G" }/ Y
& E0 r+ f1 [/ K: [8 G

: W4 V* ~5 S& L# x! V0 ]$ {7 n5 _2 L. W; _+ w4 O/ w1 b1 ~/ K, s
    upp_interrupt_count  = 0;) V9 j/ e9 R& K2 M3 I* E
    upp_error_count = 0;1 M( k' R4 J- n; c. Q  g
* h7 f# [8 |7 k; d; r
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 t0 D3 g3 ~6 g7 M* b0 s* M    // Initialize data buffers$ r+ L; Q) ~) X4 p" G3 I
    for (i = 0; i < upp_frame_size; i++)
0 K# I. a2 ~/ L1 p; e+ Q    {
7 N4 j; p6 L! {9 t       upp_buffer_b =i;
$ E& i7 }% B6 S! o, y       upp_buffer_a = 0xDEAD;
8 f9 y9 |5 z6 B- s, X0 N- A$ h$ f    }
; @* Z. I7 H/ c3 A0 O  ~4 T! ]1 u5 a) m- ?2 U
    //for(i=0;i<1024;i++)
; {1 U# H. r$ H$ L) @1 \    //    temp=0;
2 c" Q. A) \4 g" W' R1 y9 u; \1 u* n. l1 `3 `  S
    //UPPReset();
2 q( @- N4 ?+ g9 i& A3 R7 k    /*启动UPP DMA传输*/
( _7 @2 q8 |8 R# {    UARTPuts("upp_prog_dma_i\n",-2);" {9 g. r& d/ s' C
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ U$ g9 z  u  j8 h9 V3 v
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 L# \$ z7 G4 B0 R! ]3 m    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. i) e+ C. Z3 p. n/ w( b
# ^; f& b$ r. }' Z( M: Z
    UARTPuts("upp_prog_dma_i\n",-2);
% m+ L# f/ C! @  E' j    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" f& {; ]! q0 j) D( Y4 |2 |    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 k" L/ r7 [" J. [1 _! D. W/ J    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" V9 f, h0 {3 x
4 {' F+ x! u2 Y
    /*等待UPP传输完毕*/$ E- p% L) u" ~) ~5 p. |4 h  X9 |
    //i=0;
& H" ^. H( ~" t0 K3 ^3 |    //j=0;$ M9 G7 {* o1 _$ d8 c8 U
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  @* e, P$ w) o7 c& Q$ x4 X    {
4 h; n6 u) s* `" v  n        /*  测试UPP传输的同时操作普通DDR数据
. P0 O' m$ f; r$ _  a        temp=i;
& R( }% G5 M; ^# b* [# T8 A% f        i++;
2 b0 G' K5 p! _& |$ I        if(i==1024)
8 t( N  b4 Q+ Z+ b        {8 G2 i7 f, p/ B$ {1 k0 p
            i=0;5 v+ V" N7 u% U, A# |5 j
            j++;) G! s; A% J3 w* A- @1 [: X
        }
1 ~2 A/ _' ^  m5 |$ F+ B; O  c        */3 |+ s9 h' x+ g; ]* X  A2 c

6 l  `  L, n8 @0 J8 w       asm(" nop");
% F6 p  g: \2 N% B. X9 f" T2 F" c7 l2 w
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 g. d! q) V+ f. X' K7 W5 ^
    }
$ a- h' W3 T$ ?
+ A& T9 X7 i% ^, Y) ~    /*检查UPP传输的数据是否正确 (loopback modes only)*// G0 @: C9 F/ b; k4 \
    //UARTprintf( "i=%d\n",i);
, A4 k; r0 g: h! B/ h9 P; D* a0 y    //UARTprintf( "j=%d\n",j);3 e! D' O! S, P6 i: p. g
    UARTPuts("Data mismatch in buffers.\n",-2);% K7 h' s, v0 `9 j
    if (upp_interrupt_count == 2 && upp_error_count == 0)
/ N7 p$ R# s/ C4 D    {
$ W5 C' N  ~6 r! _( X1 X7 ^        for (i = 0; i<upp_frame_size; i++)( M6 D% T- G* i/ Q7 X/ w' X
        {
! G5 Z7 [- S% n8 j8 W% Y* `            if (upp_buffer_a != upp_buffer_b)
( p- ?0 B) R! [, d% J            {6 o) A( j1 R" r/ ]) @8 _
                upp_error_count++;6 J$ i0 ~+ K  J6 N: `
            }
: Y7 u2 D& q7 `* m6 [2 s        }
, h1 X/ T# a' x/ |% K    }+ ?# ?7 o( D$ q+ q% y- T% o2 a. b

! K7 j# C3 B2 ?! w/ O" y8 V+ F    /* 报告通信结果*/
8 }) c% F; |! |$ i% q: P) I    if(upp_error_count != 0)
+ c3 G3 C! G, a# l/ t        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) w8 `+ P2 z) M$ k    else" H- A* z! y* r
        UARTPuts("uPP transfers complete!\n",-2);
* W8 h7 Q5 e0 v# L0 F6 e  U1 T; ?6 X  `6 l4 q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) ?7 G4 z0 C7 c) I. L    UARTGets(ch,2);
4 a, v6 S/ o0 i    UARTPuts("\n", -2);6 x. J2 [3 X! f# y5 P3 a
; x+ v7 `4 U4 ^: t1 {
    if(ch[0] == 'y')/ H' w! p' a9 k% Q9 B
    {3 x# ?) ~* o% R8 n
        /*打印全部读到的数据*/
# H' ~) |2 f) @3 Z        for(i=0; i<upp_frame_size; )
5 I) C! o* t, M' Z- y* s* t) X9 l        {* o. |) B7 R4 z5 Z2 P0 _! F
            for(j=0; j<5; j++)3 a+ B6 U' W+ i' y) E
            {) K+ d# d$ N# [6 T- x; c8 n
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ z# r+ L: Q! K9 B6 l! b2 l0 o) M                i++;6 b$ L, }  S4 |" t2 X- P
                //if(i >= 4096): ^% w0 |) K& ]  a
                //    break;
- z9 z! [8 u& c8 o3 c: I4 g9 c& U% ?
            }
7 N6 ]" y; g1 }" P$ j" z            UARTPuts("\n",-2);- V+ s* t4 G- k, \' {! W
        }' G* A" c- k; e$ \+ _, E4 m5 m
    }) G3 B6 L9 i5 s; h. \5 E
- R3 r; l) X6 o% e
}

( {8 D  `" }7 t
! C( m! g2 w9 U+ R

7 a- R4 p# S' ]" \
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。$ ~  ?. j7 C' x8 u$ K4 `

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# S. h/ F, M- `: W9 n





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