嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?0 ]+ J4 p( F+ S/ v) D! O' z
Void UPP_TASK(Void)
  w) r7 I" H8 \{
9 ~- e* T$ H' V3 L8 L3 v- r) B5 {% c
/ @0 j+ }' y& A1 s, ^* ~    int i,j,k,target_int_count=2;/ R* l) R& c% b" f# v7 e6 j* g
    char ch[2];1 Z1 J( K" V* a" j( }4 R( c8 {9 d
% Y$ t) {2 Q" T2 Y% F5 z& [3 g

; j' k- b6 M. I' R: d+ R5 X* A! X  U' v: N, U  e
    upp_interrupt_count  = 0;
, j' [* i+ @/ F2 [$ M4 u# Z& I; W7 `    upp_error_count = 0;/ e4 y( B% P, b* F# s) U& G  m

% q0 m7 s3 }' a    UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 H" `7 r# F0 D1 l    // Initialize data buffers% @8 |/ p7 J, i/ T8 k% x# l$ i8 m
    for (i = 0; i < upp_frame_size; i++)
5 e8 e: |1 ]  e- Q    {
8 d! g( m, z0 U. ~4 [( [# ^) x       upp_buffer_b =i;0 c% p- f3 T- `  h: L  i
       upp_buffer_a = 0xDEAD;
. m# e$ b' r: K3 B9 }    }( q* I% W3 g, q

* u& u8 L1 C# m    //for(i=0;i<1024;i++)
/ ?; X- ~7 G2 ?4 k    //    temp=0;3 }- \0 n4 L! l# m2 {' R

3 ^! s) e: @/ N& g7 g8 W) A9 r9 B    //UPPReset();2 T8 A. @" B0 _8 M
    /*启动UPP DMA传输*/# J% B+ r, r# u' r
    UARTPuts("upp_prog_dma_i\n",-2);( ^2 o& i) w4 m6 w3 K6 L/ F
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 P4 t3 ~3 v! R7 H3 L* @    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, R8 E5 q' |5 ?) |    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# o3 F" o( e: \

' G3 d4 Y) M8 Y- l7 s0 o    UARTPuts("upp_prog_dma_i\n",-2);
' [% l% u! n, D) l    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ k* }. F3 Z5 H# q    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ L6 X; e+ t9 h& W1 i5 G- M9 ?' V    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 F. I1 {* Q  S7 o3 g. Y$ n2 P1 y
! j6 S$ `2 D0 `    /*等待UPP传输完毕*/
5 l* ~# V8 w6 I    //i=0;
2 T+ ]6 b! ]: M- Y8 Y2 F/ d    //j=0;
* F3 E1 \% G; v, e    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. s1 J& a; W; v9 |+ I, H: H    {' a) T" g1 I) w" N& r$ q6 s
        /*  测试UPP传输的同时操作普通DDR数据5 x; w7 B  N7 j
        temp=i;  s; H% F! ?# R: \& R- {) Y$ l
        i++;
; w( K4 d; _% `6 V3 {3 i        if(i==1024)
7 D+ S; r  t4 x: d( q        {5 T: B* `/ B5 ^. A
            i=0;
" }. {, v4 B' H4 q& c3 h9 n6 h            j++;  s6 v' z+ H/ z9 w$ j
        }% ^; m' v, K5 `* F5 V
        */) x9 l7 S# y* f
$ O4 U6 O4 F8 S7 J
       asm(" nop");% ]0 \% Y7 M  P* _& t
" P+ |+ J: e' R# O
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 z$ o( Z: l& t  j( `
    }
7 N5 G: A1 L, @& _; A
0 e# C+ C  ^% v  J4 A    /*检查UPP传输的数据是否正确 (loopback modes only)*/' R, k7 z* e- W# c
    //UARTprintf( "i=%d\n",i);
* p3 q3 Y( e4 U, R$ b    //UARTprintf( "j=%d\n",j);; `* I8 q" F8 P" d
    UARTPuts("Data mismatch in buffers.\n",-2);( y' a8 N% m, R  H
    if (upp_interrupt_count == 2 && upp_error_count == 0)
" X- s( ]5 Y: \2 ^    {: E7 N/ O; q" }
        for (i = 0; i<upp_frame_size; i++)
; |9 u  ^. [0 d7 H9 ?        {
7 N  E4 L) T1 K  I( s+ r* |- S, v, M            if (upp_buffer_a != upp_buffer_b)7 i$ z+ V. b9 K: a0 }3 f
            {0 Y2 d! v* }: \; S& V* A' L
                upp_error_count++;2 C/ E- }; W/ I- C
            }
) E# h5 A$ a/ p        }) y; D- I! b! K6 `4 v, s( ^
    }
; ^7 R6 b8 m: a6 v- r6 e' |: \# E* W7 L% b- N3 \
    /* 报告通信结果*/
! i1 i! D) B  ^2 _) A  Z/ U    if(upp_error_count != 0)
& B1 {) Y; e1 s; v- e        UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ S$ p' _3 N. k; l/ w; @0 ]$ Y    else
7 l6 M" [+ a6 v        UARTPuts("uPP transfers complete!\n",-2);1 r( m! }. c" D7 W
! M9 i9 N' L: D
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) r2 |: T; x: K" R" p1 B
    UARTGets(ch,2);% x. b) J7 l- a
    UARTPuts("\n", -2);: y: j; }9 W. W4 {- p8 z/ J- R
9 D8 N$ W# ~. R6 v8 K# h
    if(ch[0] == 'y')- w' u/ M- E, e7 z  N( m$ O
    {
. S6 K& h( w8 ~5 D5 T6 l9 u# R2 H        /*打印全部读到的数据*/
3 l, u+ S1 D' S$ g        for(i=0; i<upp_frame_size; ): \0 s+ M3 f& L' j( ?
        {
6 G. c. w. _, F: Q/ b: i            for(j=0; j<5; j++)
- B! Z* l! |1 S" G* ~% Y$ P            {2 K  \9 Z, e+ P" N) F  I! `2 _
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
' Y* d& h8 Q5 H# g( c  D* D0 ?                i++;
9 n( R7 G2 x; b/ O9 }4 g                //if(i >= 4096)
$ G" X& `( a4 P' |1 m/ r. R6 l8 n                //    break;
  X* Q' N8 s8 H- m* P, h+ H! M# r5 D3 O7 Z7 g8 K
            }+ l2 P1 A8 Y( ~2 ?
            UARTPuts("\n",-2);% `; h9 ^: t% @! }3 r6 q5 H
        }
, Y" ?" }4 S1 t1 R* g( G( h    }
9 D) n3 n- D5 H& D9 x& j1 l! T& q/ Z! B, M  s, Q
}
+ x9 j  T- O* @
8 N$ \9 k& h2 P. ]: D8 b
3 g- U8 K0 N! P( i% Z! v4 o

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. z% O) G. H5 Z5 H* N
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- M) Z3 S" V; B2 m, h





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