嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. ?4 A3 o: O' `
Void UPP_TASK(Void)
5 X  g3 E1 }: x/ @6 G, M8 g. h% q" c* `{
, B7 L5 \  t; H) S' S# O% S! |7 J6 O" K! y
    int i,j,k,target_int_count=2;, s- N( x3 m5 Z! k
    char ch[2];6 H6 \0 b$ t0 i/ b+ `% B+ R5 A$ f
4 \! B, ]  R( l
% k' `/ y. _" D

; l& o5 p, y+ _' H    upp_interrupt_count  = 0;
3 K- R) v3 b& h: s; W5 k    upp_error_count = 0;
* R: G2 O: q- Y; f$ H( J- L& P' O# f' ]/ W6 ^- l0 C
    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 }% E  _! m7 @7 k! Z! H5 k! `1 l
    // Initialize data buffers
. b, }+ X2 ~* \. B  ~; @% Y    for (i = 0; i < upp_frame_size; i++)  e) Q/ b0 f. e' h* Q4 r( Y( q
    {
8 B6 }( @2 c* `" I! p5 f       upp_buffer_b =i;7 _4 Y( d  }& `  [" `. H
       upp_buffer_a = 0xDEAD;
" G8 W/ B9 p" h$ F& p/ N    }
# n4 ^3 ?0 e5 j# ~3 x. a* q
) I/ G+ [" ], k( O2 [2 t    //for(i=0;i<1024;i++)
* m8 R3 B% r' k; S; {) I- K    //    temp=0;8 r4 y% k/ f: P; _4 P9 x
- D  s/ \& V* E  D% E4 j
    //UPPReset();4 I5 |! \" \. A4 z% b3 ^. h' A. S
    /*启动UPP DMA传输*/
) ~; s. `7 x" o$ L4 e  _, m    UARTPuts("upp_prog_dma_i\n",-2);% ]' p8 L1 Z# q1 V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! `7 P1 W" V# Q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* Q- f% a8 p+ \8 K! f* z0 x! Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 p$ w! }9 ]# k) a# O2 o" `8 ?/ L
, g2 a3 A- @  Y1 Y; x
    UARTPuts("upp_prog_dma_i\n",-2);( B! ?% |, o$ H0 |; C" F
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 P7 J9 L; C- q* L3 o/ O    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. I  ^6 _6 P$ |% E& s9 ~, W. a" X
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  V( p+ s2 `9 D( ~( [2 ?0 G" P) y% P4 D+ K1 Z$ s2 ~
    /*等待UPP传输完毕*/  \3 v  ?' o/ Z
    //i=0;
4 K6 H2 M# c6 h/ f3 O" W    //j=0;
  z9 U$ t9 W1 e# l- ^' [8 l9 v    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 c$ }  k2 c, T8 Y4 x: M
    {
1 i1 L/ F( C) c3 E# I' g' A        /*  测试UPP传输的同时操作普通DDR数据) a/ v: u: g$ S, H% y& b
        temp=i;
$ _9 E  G" v9 j! r- n: Q        i++;
+ t' y( R+ p( B- `        if(i==1024); G' q" V0 H6 Q1 E/ H3 _
        {0 v3 G9 ]8 \  ~$ ~
            i=0;. D4 b/ e; N' H) _" o; y4 _: Q
            j++;
6 y+ o( Y7 ], T% T        }
% C8 n" T( f: S, i( k" q        */( s" l3 M6 Y4 o$ {0 m7 T5 j; R6 d
1 C# L$ _5 P# z, [8 w9 q+ ~
       asm(" nop");
. c5 R& p8 l+ [2 M- F% y! r& O- P' Y. F6 \- I- T6 I5 Y/ ^2 q( L
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);  a* N" C& T: o( V
    }
3 X) I1 K" ?- f$ p, t( y4 P! j1 E5 d0 E
    /*检查UPP传输的数据是否正确 (loopback modes only)*/: f! i1 w, O% S! H* r* p
    //UARTprintf( "i=%d\n",i);
4 `* Q" I2 v! Y8 f    //UARTprintf( "j=%d\n",j);( V7 x# k2 c" a
    UARTPuts("Data mismatch in buffers.\n",-2);
# h3 f- }% e6 n1 `( s    if (upp_interrupt_count == 2 && upp_error_count == 0)
: @- Y4 V5 F8 K  q    {; y: f% x' g# S5 M6 @* ]; w* m
        for (i = 0; i<upp_frame_size; i++)
% ~- a7 o; E4 \0 z* k2 D2 S        {% d! q% D6 ?% \8 @% ~( s4 l
            if (upp_buffer_a != upp_buffer_b)
. [+ k. h3 `8 _3 R9 U3 n/ m- e            {
. C. f" G9 s  X1 D5 i                upp_error_count++;. |1 q% R' {$ W  g
            }
* }4 [, a9 w7 e' M  f% W+ G" W        }
. D8 o2 K" h% A: {    }
1 u: E- H0 N! W, O, K5 _4 |$ o& x
) w: }- r' Z$ i4 e( _    /* 报告通信结果*/
. a/ Z7 Z2 i" k$ x" d* p    if(upp_error_count != 0)7 }* h9 f; ^3 H, T7 [4 n6 G+ V
        UARTprintf( "upp_error_count=%d\n",upp_error_count);' R# k0 j6 `; ?  H+ a$ ^  e" u3 [2 F
    else
, N5 y- d$ `5 V/ g$ x5 H8 J        UARTPuts("uPP transfers complete!\n",-2);
% X# [4 W. X! O- H' l6 M
" \2 l9 L5 `; N+ r  X# O; r    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: _, |4 t5 L% V, _# w9 s    UARTGets(ch,2);
& O% A0 V1 h$ F; {    UARTPuts("\n", -2);& w" F' i  {, |( H0 [$ j+ V$ X2 B
1 Q% f+ w) H$ x2 B" r3 r
    if(ch[0] == 'y')6 H# X5 M* U/ ]8 |
    {  D! r* L$ r1 x& a
        /*打印全部读到的数据*/# d: }. m3 g3 f$ u6 a
        for(i=0; i<upp_frame_size; )
- W6 N( H# t  E! b. [2 j        {
& L7 {" b: `. Q8 }5 @$ z& D            for(j=0; j<5; j++)% @: D% v7 E$ }: u9 w4 B
            {5 m4 ^7 ~5 H5 U
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
2 _7 V/ ^- ?, W, T$ C5 U                i++;- h6 m! C# D7 |( z+ D3 h( Q
                //if(i >= 4096)
8 I3 u$ b4 Y$ E8 z5 q1 v                //    break;3 u# i, O# ~: v: P

; O& K1 J$ N" ~5 F% d6 L& p0 p- i- W            }9 z. ^/ B5 [5 h, t: ?
            UARTPuts("\n",-2);* k8 O8 E9 i- O& Y" }
        }0 n$ N; P- v3 z. ~- ]: @
    }
  Y9 @5 {3 y& ]: c, v9 B( _. ]& X5 D/ d4 V
}
: O4 Q) Q8 R' a2 y$ }3 c6 C

& u6 ?' L2 {& p) N' Y+ C# {$ e( F
* h* p1 p. q& m) u& J  Q* v9 k
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) h/ y4 ~+ S& ~2 Y/ A7 l

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 |9 L( v1 m$ U% S. X+ C3 [





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