嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# D8 P* b8 z) n1 f; {0 t# g' B2 Z; [
Void UPP_TASK(Void)
1 Z9 E+ \% v# P& ]8 F2 S6 m8 k' G8 w{4 E1 r/ ]  l1 s& q. Z1 O7 m
9 G6 Z/ ~) z8 E- n& o. x
    int i,j,k,target_int_count=2;) d6 S+ {& a. n  Z
    char ch[2];9 o4 A& l& M+ ?) C" V! Q
. I2 D5 @! y, W1 ^" Q& @

3 j1 Y, e% C+ |. [; m, f: j; {4 x& W: B6 j9 Z
    upp_interrupt_count  = 0;
- t5 o$ {, @+ U) B    upp_error_count = 0;
7 E& D- E9 `! h( V/ b# n, q5 A7 I  I1 K0 k; H
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
% L/ {- u% L; {) z, Q    // Initialize data buffers' I5 h- g1 b" @0 H1 T
    for (i = 0; i < upp_frame_size; i++)
4 `7 U. _5 u5 L; g$ T: s* w    {
2 F: C; X- @* h, Q: `. ?$ M       upp_buffer_b =i;
# D) w! C( z7 r/ y' v0 {- {; R       upp_buffer_a = 0xDEAD;
3 Q: P8 ^5 E8 y$ P0 Y5 c. Z4 _7 ]    }
: n9 X! K! C' E  u; m% B/ S6 Y8 t4 j7 Z2 \
    //for(i=0;i<1024;i++)
  k( U" y2 c+ q1 o  {    //    temp=0;4 X8 F' _2 a6 ^5 h0 a5 _/ [0 k, V

5 _& D# E# z- R' j    //UPPReset();
" |& i9 ^0 N- H# a% e    /*启动UPP DMA传输*/
- F) E, I' C3 ?% p8 Z* F    UARTPuts("upp_prog_dma_i\n",-2);
+ L/ r. D- f. o4 ^5 k( o" U: F    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 J& [6 a# }1 h- z. U$ Z  ~  b$ O) i    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% Q! d7 m6 M% ?* Q/ [9 R
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 J1 |/ l8 W+ W. q1 Q$ D  [1 x: ?9 v- F& C: N" ~1 S! r/ K
    UARTPuts("upp_prog_dma_i\n",-2);4 w7 P1 |9 N  u
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: f6 F( Z5 u2 a- W7 v: X5 t
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  T$ s4 V* q1 O( g9 g    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: f( ^7 o* ~9 x" g+ I

7 K' l( A& f9 p    /*等待UPP传输完毕*/
0 n" o9 J; c8 x, ?4 C    //i=0;  l8 Y7 ~7 R4 r$ C3 M% T
    //j=0;
5 E2 X. q! F8 A7 M. \    while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 t5 p$ ]) t  A. V( c
    {- t( ?2 l. e( T; t4 I
        /*  测试UPP传输的同时操作普通DDR数据2 {1 W. N- y8 {
        temp=i;6 y& j5 n1 m4 \" c  X- t6 m1 y: ~) p
        i++;: l- T, K  ]" y& E9 u9 t0 m
        if(i==1024)
/ n; ^: p  ^+ h        {8 Z  G9 b: A$ d1 L
            i=0;
: {, c, i! n, [7 x: |2 h8 x            j++;1 X% j4 }! F% {
        }
4 r$ Y$ n5 S/ T' O        */5 {: }1 Q; _- H$ R3 L0 x

+ y( @9 J; p5 A  w       asm(" nop");9 A' a& ^+ p3 f" t% h
. L6 B! a" M" i3 y( r! W3 {
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 n0 P3 C& Z0 }3 w
    }, p' X" Z% ^8 d- c. y1 B

9 @& g/ `; w# H+ F& I  y; }: A    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 R9 {3 j6 g- D    //UARTprintf( "i=%d\n",i);4 T4 O, B" R. }( p
    //UARTprintf( "j=%d\n",j);
3 m$ Q- F- x( {! \% ?    UARTPuts("Data mismatch in buffers.\n",-2);
5 Q, B& E6 s/ W7 P; }    if (upp_interrupt_count == 2 && upp_error_count == 0)
. r3 v6 v% a8 h1 Z; o/ P" V" ^1 g    {: T, ^1 Y6 ^$ I$ z: v2 M
        for (i = 0; i<upp_frame_size; i++)8 F5 p- k! e$ Y4 P
        {, `* L# V0 Z$ b* D2 o% a1 P
            if (upp_buffer_a != upp_buffer_b)
+ M0 d0 R  d: {            {  Z8 R$ E, E- Q2 C+ {
                upp_error_count++;
5 N. f; _. ]5 W            }$ P! v& r* X- X+ ~. e" v0 V. y
        }
7 y) z* E2 u. U- c3 _5 b6 r; `    }# j) g) t6 ?; j) q$ B  J( A
, ~' z; Y/ L9 \) [( V1 V
    /* 报告通信结果*/
) P  J# ]% k4 s: j    if(upp_error_count != 0)
1 Q: e5 ~) a2 ^7 Q        UARTprintf( "upp_error_count=%d\n",upp_error_count);  C! ^' [5 Q. R$ h
    else8 c: e  J7 u+ T$ e5 o
        UARTPuts("uPP transfers complete!\n",-2);
) ^9 d6 O1 `- N( l. S. D0 u! O1 ^+ U8 K4 [; h* J
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& j0 y# q. u8 W& Q3 Z
    UARTGets(ch,2);
. L3 u, x$ D! [5 u* ?    UARTPuts("\n", -2);" q' M% {+ r! s+ p  B- z
6 [4 m; Z# e* H# }5 b+ z' g
    if(ch[0] == 'y')
# [$ j0 G: F) H6 m# R    {
: D* Q/ s8 d( e/ A7 N/ o        /*打印全部读到的数据*/
3 H# S( J+ r; G! S        for(i=0; i<upp_frame_size; )
1 k' W  K5 P$ p0 U. x+ G        {- m9 O5 I0 w; {' b* Y, |
            for(j=0; j<5; j++)- c. p% D% \  N" x" ?0 h  `& o
            {; I# o5 }' P4 s+ a
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ z" Z' \3 D* M. \6 I                i++;
6 d0 p3 w) `: g5 E- M+ g                //if(i >= 4096)
& u  H$ v4 b0 ]- w) r' A8 D                //    break;  I: q# O$ u. [5 `
5 F" N( ^& z9 K9 H4 x: C8 O& p
            }
/ @0 A2 N( o- ?1 T3 @            UARTPuts("\n",-2);
) v% B3 K% y* Y) r1 L$ H  Y        }
) [4 p- i, k, ?! m    }
7 [7 G9 `" `  d' a
/ h; ^8 T/ u: C8 V# P6 Z- c( b}

9 X4 ]% ?2 x# u5 [2 q/ X' a

2 F- D. O5 M6 U
( a' v2 g5 H/ S5 {  t: z6 G& O+ \' M3 I
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& N! ?7 q: [* c. }' b" n/ I
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。2 d/ ?7 v3 w6 L, K9 {4 _1 ?





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