嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: S* E% v8 L2 z, `8 i/ U& f8 A
Void UPP_TASK(Void)
8 G- i8 _1 ?7 k: K{
6 C/ n8 o2 o5 s% y" T# c. w2 W8 {6 w; B8 D- |" k: b7 V4 M1 V
    int i,j,k,target_int_count=2;
! u6 Z, o& R& o0 Z2 o5 o    char ch[2];, }- U/ [0 Y- O; E( d
$ W$ a" L# n& [: Y
% ^% @% X" ?' R
% L2 U% u0 ]5 g$ ]# ^# W. M
    upp_interrupt_count  = 0;
6 V. w. v& Q: \7 Z- e    upp_error_count = 0;) |) [6 }& V8 R3 ?$ S# K8 Q. d

( z& C: q1 I" p5 s, m! Z3 |    UARTPuts("\tResetting uPP buffers...\r\n",-2);" l- P- D5 u& h, [
    // Initialize data buffers
, @7 O6 e' T8 D5 g! ?  }9 T    for (i = 0; i < upp_frame_size; i++)
* \, n8 y: }/ c8 {1 Q9 D    {) l2 P0 B4 m0 F& [4 Y0 M
       upp_buffer_b =i;
: m2 a. a4 P: V: N; _+ A       upp_buffer_a = 0xDEAD;
6 y& A- w# J7 o( u( P" j    }
" l6 O# q3 j( @2 W8 L
3 o& C) R' Z, ?* }) v    //for(i=0;i<1024;i++)
0 f3 f" Q6 a( H. X! D    //    temp=0;
2 g- K1 _8 j) M1 r0 n9 B7 f
3 d+ M. m: d* t' K! ^# L    //UPPReset();
4 Z! i5 V+ e! t" z: z    /*启动UPP DMA传输*/" s  |; Y) T+ Y/ L) \# ~
    UARTPuts("upp_prog_dma_i\n",-2);" j$ I6 @% z0 [% T' I
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' B4 T) u- Z* F% x) k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 r. k+ v. ]0 N6 z
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: r) B; Y3 J5 I" L0 `$ M
1 _; P" ^1 r! I5 B4 w8 l4 }1 _
    UARTPuts("upp_prog_dma_i\n",-2);
  R( L4 @! |6 k    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ L$ m; l5 W7 A1 a6 y. @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ \- i; q8 l+ T6 r+ p" w
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);4 B  T- o+ c- a7 H

2 Z1 e: L( B) t8 K, r    /*等待UPP传输完毕*/
% R$ Y. x' x: N9 {6 T    //i=0;/ B  a! F; K. ~0 F" u
    //j=0;5 ^1 |( K- g7 z$ O) ]
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 {: W" R# B+ r1 d    {6 g) F- P4 ^& |. T
        /*  测试UPP传输的同时操作普通DDR数据: Y/ E% w" M2 T. O. z: A6 y% }- V% `
        temp=i;
/ o( ?* t$ F. a9 Q* v3 U# z        i++;
, _1 t# r+ S) ~( S/ x$ B        if(i==1024)9 b/ P) n3 U( ]. e. M$ s, q
        {2 O" i$ z* f9 O2 e
            i=0;+ A9 [; s) V( |5 E5 J6 b
            j++;
, p: A3 p& K  |  c& d        }
0 S7 R  L4 v* S; p7 \0 y/ M: z1 ]        */6 G4 X, A! e' r- Y; e

5 w4 U& J6 ~5 }. |4 I% `       asm(" nop");& u8 l4 m# h8 m* o9 \" M

& {7 ?4 q, i4 \# J9 h       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( g% m! w; h+ \* {4 ^    }7 z% L1 H5 A" L0 g0 \( d7 F
, f. P1 [3 {: ?$ Z" }
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
, r1 s$ H/ }6 a/ H    //UARTprintf( "i=%d\n",i);& N2 L0 j, w; g+ h  X
    //UARTprintf( "j=%d\n",j);
. P: _$ m; F3 s8 `, k    UARTPuts("Data mismatch in buffers.\n",-2);8 P  o3 ~' }  S% b9 m; A% o
    if (upp_interrupt_count == 2 && upp_error_count == 0)( O3 ~* m8 {9 s4 v
    {; |2 u$ ]& Q$ o& x+ g& @! Z/ f
        for (i = 0; i<upp_frame_size; i++)2 k6 B6 e. a3 J
        {
3 o9 A" I* o9 ^; v9 v! q' v7 c- Z            if (upp_buffer_a != upp_buffer_b)% q. l$ `: H, A
            {
, g& |  z, y6 U0 B: q3 F9 H* x                upp_error_count++;
5 ?: |: A6 z4 j4 D5 Q            }
8 e$ g& U, K$ X5 }3 _5 s2 X        }# u' s9 z+ O  Z6 c! k! i. j# O
    }. `  |$ B- w; O' M. W) }! ]+ a

0 V  a( N$ ?: r, s# Y2 P    /* 报告通信结果*/
: m8 f: @" K; Z* X7 X% _$ K    if(upp_error_count != 0)
2 k5 R2 X% h, p5 W        UARTprintf( "upp_error_count=%d\n",upp_error_count);  y: O5 I: h1 Z3 {2 c& g/ B
    else
) L" c4 |0 h& R# F* ~        UARTPuts("uPP transfers complete!\n",-2);
8 R+ ~- R- a! z, b  M* i% f% z8 m1 u5 G$ ]9 ]7 }; Z. e' a
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);$ M" f* D6 z9 K, x
    UARTGets(ch,2);
# \8 ~( j( W4 u# }% r$ o9 q    UARTPuts("\n", -2);
8 K' O  p8 t$ r  ^2 u6 c) F
  O4 I: ]2 W$ e. k    if(ch[0] == 'y')
/ B$ x* B& A  ^9 `5 Q7 w3 [    {$ ]7 q6 Y5 L2 j' V% N; f7 J
        /*打印全部读到的数据*/
4 m3 D0 j" q0 v4 A: n        for(i=0; i<upp_frame_size; )3 B+ k( Q, \7 q% H9 b- k( @9 i
        {
/ s  O; b3 \1 j% k) X) L            for(j=0; j<5; j++)" S; v6 y# h) N" g, D
            {" k6 ~% @6 P# e" D9 \, e! T
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! t7 y9 U# a9 }# a' r( U7 a
                i++;8 [- ^* I3 L* l* y: N7 i
                //if(i >= 4096)
' \$ j' k2 I/ F6 x: h9 g( L                //    break;4 c; H8 j/ Y4 w% J: C  r' m

+ e% f6 z5 t6 z) E            }
0 w- \) W- y+ K2 l3 d            UARTPuts("\n",-2);
* z; ~% p; Q, A! q' `6 a        }
! m4 |9 Z5 c" j% C4 ]    }) f6 o7 a! P. c
' U* D! W% t8 c! G4 a* h
}

/ N! o7 j" V6 z$ ?5 _) g

( `/ t* U/ I. H0 _- f9 d8 E/ z. T% _4 Y. H2 x2 p/ w; K$ ]- F

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" I0 j( b: [3 o' A* _( O+ G9 A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 _2 ]* l; D8 ?7 p: T





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