嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! e! A  H0 K- [" a2 g
Void UPP_TASK(Void)4 O- O9 P5 f  G
{0 b" C2 |2 H) ^3 G4 `; `4 B
: o- t4 d- P0 Q4 ^. K) B
    int i,j,k,target_int_count=2;. \$ Z6 b$ \7 A6 h( N
    char ch[2];2 [% [* ?  @6 d: ]5 r

7 m1 x8 J% J; B' z: o: f$ {5 h2 Q& ]5 ^, L6 L4 ?' K, S. @9 E. \3 `
( [4 J! r0 t, Q8 K1 K+ Y+ X8 k" w
    upp_interrupt_count  = 0;# ~' d4 d4 f  U' w6 S
    upp_error_count = 0;
0 D9 c3 ?" Q7 z  n3 [7 g- V' j, ^7 ?1 u' C
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ K$ W; Y( U9 h8 w    // Initialize data buffers) M1 A. a# h. I9 @+ o* E
    for (i = 0; i < upp_frame_size; i++)
% G$ M( R+ y" n$ v" L    {
/ H! S' D5 `1 T7 }8 }. h       upp_buffer_b =i;
' x  T0 r1 j* a       upp_buffer_a = 0xDEAD;4 K% p7 _$ Q; w* O* ]' t) `' ^
    }8 ?. |& y, G+ e
5 J2 Q& ]  K- m! c0 B, t
    //for(i=0;i<1024;i++)
/ C) e# z1 \- W" s/ E7 j/ @+ [) z    //    temp=0;9 l4 W7 }: e9 o/ E. y
( V; s( g' O: M* s
    //UPPReset();8 `1 F9 a& H& P  G) a. |6 J
    /*启动UPP DMA传输*/
2 h. d) f+ S% l# v3 Y    UARTPuts("upp_prog_dma_i\n",-2);' d$ R, U# W8 |  c9 I
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ _& z$ w4 V$ V2 g* u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 m2 F: \% e$ ]7 f3 r+ b
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. D' }* ~2 q: K* r* X' y

4 N. R5 Q* n7 o" Q    UARTPuts("upp_prog_dma_i\n",-2);$ v% S) m. ^) K7 I$ z; D
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  C: h8 N$ y: S5 p1 Y* }, P    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 n, n& }' `1 V. \: n3 N
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* _- y) m! g& Q( F& V2 [6 C8 N7 K/ w
  O. i- d4 G# z% s9 i. p$ S    /*等待UPP传输完毕*/  h# Q4 }: t: K. h4 S
    //i=0;! V6 r. H, Z0 ]: p+ o4 {
    //j=0;
% |; R. K! f+ h+ _) _    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 d. o5 y+ [: ?" X% t9 K% H) W5 F: K
    {, Z( ?" y; ^( K6 L1 e: w) s3 v
        /*  测试UPP传输的同时操作普通DDR数据
% m- |2 i4 y* ~8 P1 e        temp=i;
/ Q; }) S" V4 P" [        i++;
5 r5 u5 u1 c! o, e4 R        if(i==1024): ~( x. K: Z. P! x4 }3 D/ E7 }8 t; @
        {
4 S6 m$ e" g5 r* M( x/ j) @) f            i=0;
* C( E8 c. b2 o5 ?5 j            j++;
4 X0 u4 r+ {" v, Z        }
' P7 t7 P8 x, [, i* P, e1 v: D        */
. q0 J8 P: O3 S1 x# a
3 @1 f* _/ s" P4 e       asm(" nop");
. T: O' a! `4 I5 D
; X. y! \( H/ v1 M, @       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 G4 k( X( J& ]+ H8 U% b' Z4 r6 h
    }
: _  h% @; @( q( p6 x0 m! x& |- S7 b. X# j0 b! z- B" t
    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 s# N1 _/ |; W7 G$ j9 r
    //UARTprintf( "i=%d\n",i);3 f# l. I7 u% [
    //UARTprintf( "j=%d\n",j);
; n/ Y- a7 h% e7 l6 u! i% U    UARTPuts("Data mismatch in buffers.\n",-2);
3 a$ B% x0 m+ l4 m  c0 L    if (upp_interrupt_count == 2 && upp_error_count == 0)5 m" a) r6 k" D" e' s" {
    {
$ n; z" c8 c2 j& @& Z$ q        for (i = 0; i<upp_frame_size; i++)# A1 C$ y2 X! r% h# {) a
        {
" X/ |% P! m# x7 E1 W# x  S            if (upp_buffer_a != upp_buffer_b)
4 ]7 b/ `; i5 M+ ?) c/ X            {
) U. l% y6 k2 t6 d2 T                upp_error_count++;
( A" h( S8 e3 C) s: B) z- i            }3 g) _: l* d7 K4 w
        }8 s  w% c* K* s2 p! y4 N
    }
$ @, W/ N) {0 N7 Q2 [* |, n7 Q/ {$ q7 D( G# K
    /* 报告通信结果*/
/ `% _; R, }+ Q* N* c    if(upp_error_count != 0)7 Z7 O8 A4 B' G
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 {8 \1 r' g& c: h6 r    else" I3 ^. k2 x2 ]% g
        UARTPuts("uPP transfers complete!\n",-2);* m' M$ _0 f& i& @" D( F! O
; t& ^+ r6 ^5 p6 a2 v
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* G, r! O; D9 Z. [( ]5 a2 b    UARTGets(ch,2);
6 _; }: |$ O" ^0 }    UARTPuts("\n", -2);
) Z3 |7 B* F) o$ v5 \5 c/ T* x( B, Y0 i7 g* z) \7 [
    if(ch[0] == 'y')5 r. a2 c* R' s
    {& v4 T8 b2 H4 `
        /*打印全部读到的数据*/) ?8 d, b& U+ E/ T+ E
        for(i=0; i<upp_frame_size; )7 H4 j) B2 X* T* X1 q
        {
' Q% S( L& C! b6 K            for(j=0; j<5; j++)
: u0 q- Z9 U! \- ~0 i5 W1 Z1 Z. O* o            {
5 j4 w9 o8 N% r5 l* m" F                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 L$ r2 V0 [- r! L( \# ^
                i++;1 E: d( F2 K" D4 z) x  c
                //if(i >= 4096)
0 t5 v/ g" N/ B- ^7 y! M                //    break;
2 X( M# V- H9 X, o$ `' k& Y( n! B1 l2 Y4 c# z# R0 F
            }
- g. S& R" g( j$ N+ U2 c, E            UARTPuts("\n",-2);8 V- x* J6 D" U  s( t
        }
9 v! y( Q' k7 o0 A    }
5 W( k, R9 a2 \# B% l1 x5 M7 x, X" {9 [5 M
}
: H) \" x! t" s3 P. z5 B: B

! {7 V6 g  c( P* \) S4 E6 l: N( |9 V( m( o5 G) a) ~

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! @2 @. w5 `# y: X. I8 D/ v% M

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 q# E8 K4 D2 ~! x, y4 V





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