嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 ?/ T: w: a1 Q
Void UPP_TASK(Void)( B# `! _% d. j
{) g8 g! P( l$ j! v. b$ D2 ]4 L
2 ?! k) F3 Z& X8 P7 M; e8 K
    int i,j,k,target_int_count=2;* F. j0 |; t/ ?4 T
    char ch[2];. S# v7 w6 x- M7 A5 _

& V. B- N4 ~5 t( d4 i- F% c; H# \( c5 |- _/ d

9 x" K2 N$ ^8 s0 Y4 J0 J; |; d    upp_interrupt_count  = 0;7 w0 x5 W  U, X8 r) h: `+ Y% L, f
    upp_error_count = 0;7 N; @, m. d8 Y! |

3 h' B" S/ Y. u, ^5 }, D; g    UARTPuts("\tResetting uPP buffers...\r\n",-2);1 s) r# G- I. ?5 ~  k" n1 M
    // Initialize data buffers
2 ]% u7 I% x+ m" q/ Y' |3 K    for (i = 0; i < upp_frame_size; i++)
, y. {2 g* Y" `' p0 {% l+ F9 |    {
/ o( P! N8 ~+ U& O. L       upp_buffer_b =i;4 `- \  k3 Z, S. U  k9 U1 x
       upp_buffer_a = 0xDEAD;
" o' x( i, ^* I; t2 z5 I    }1 l+ J7 M% K9 J2 R

: r* m7 B! _+ x( P    //for(i=0;i<1024;i++)
4 R1 ]! A4 P3 k1 S9 T+ I    //    temp=0;
% z9 G0 B5 `; {/ _: {" i! D5 F; ?, H  y, P% r. o; h# f' b7 i) {: L( B8 z
    //UPPReset();
- U  f+ M8 {( g2 q, S0 @1 G    /*启动UPP DMA传输*/
% i1 f5 ?5 r% p8 R  G5 C% k* A    UARTPuts("upp_prog_dma_i\n",-2);: }5 @+ f* X( o" m% P, E6 \
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! O$ O! Y: W. }0 o1 g5 W4 E: B" O
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. Y- ?5 [3 ~* S: ^
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" ?& A  B* Z0 C0 {

2 M* j# P, n& h4 B" W+ t- B0 ?$ U    UARTPuts("upp_prog_dma_i\n",-2);
( R- y% w( @; T3 R, k/ f    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' {+ j) e4 G: t6 i
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" B% B. N) `$ ^- ^" N
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 {+ k) {) l: c! c6 ]

7 ], b; D; T4 w" F8 W1 @  W    /*等待UPP传输完毕*/# Y5 X! O6 T; P, T, P) }
    //i=0;
+ j& n6 z  R- P9 |. a# l    //j=0;1 U$ ~9 ]! z, O3 w! [$ s2 @: r
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 W; p! _! Q1 n! b
    {
6 F: ~8 X, g- d- Q6 w        /*  测试UPP传输的同时操作普通DDR数据
9 o* }. E  u2 O+ }* B        temp=i;, i+ a5 o! B4 K
        i++;
7 C2 W$ I! h4 B: m- h* H        if(i==1024); B7 V8 @( T1 R  N
        {% [+ t# i+ V& G, t- l9 G
            i=0;4 \1 b- l* T+ s& E
            j++;
3 r8 V5 k1 P' r! \        }0 F) s9 {3 t+ P; A3 N( B; F
        */: X% L; @! `# K7 V

: S6 a& Q% [; C" I+ R2 G  L/ l6 {       asm(" nop");& A/ J7 r2 _. z6 C. ~
0 y7 Q/ v6 {7 }. b) t2 D1 n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 ^5 o, n$ G( z( d8 n3 p
    }. S# S2 i  P2 T

4 w9 U/ F+ N+ d  i% c( [    /*检查UPP传输的数据是否正确 (loopback modes only)*/! M; S: x1 o( L. Z' I
    //UARTprintf( "i=%d\n",i);) a* i+ P6 p4 p
    //UARTprintf( "j=%d\n",j);
5 O( _2 A5 f$ p0 G- O' i+ t9 ?    UARTPuts("Data mismatch in buffers.\n",-2);
2 c2 o4 Y* S, u4 W: c    if (upp_interrupt_count == 2 && upp_error_count == 0)
) n$ N1 A  `! O2 |  c) e# {    {( t! F1 {$ E/ A6 V( U$ I0 t
        for (i = 0; i<upp_frame_size; i++)
  Z" y3 l& y' {8 n8 {, L        {2 C* e1 t6 P9 P  ?' e( u7 U
            if (upp_buffer_a != upp_buffer_b)0 ^, L+ ^; q: w) Y. c
            {
$ `4 ?/ O3 x8 D9 k. m6 Q                upp_error_count++;4 u9 I0 p' @0 Z0 o
            }7 a2 x- G  G% K, d) T
        }& d8 @: d7 ]$ R5 D
    }
5 `2 m1 l) Z  i# j5 [5 H# V5 {: y
. B2 X' Q8 g- o/ W/ E) P& w5 H    /* 报告通信结果*/
% y3 j8 @1 B7 D! d' Y; U    if(upp_error_count != 0)
* {& B6 r3 C3 @& k, V0 t( Y3 v5 Y        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 Y7 ^( g" g$ [; {. j$ K
    else4 e7 Z* A+ C/ K4 I
        UARTPuts("uPP transfers complete!\n",-2);0 w: O. s% ~' |: o/ M  N
1 y1 X8 q3 a# y) D3 r) O8 }
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 J2 G& m, o2 [' j/ d' H) @8 V    UARTGets(ch,2);
9 O/ i6 N; A6 q7 l, W+ Z8 p* a    UARTPuts("\n", -2);
* v  I2 g0 j) v6 s$ y# `' V1 y; u0 E
    if(ch[0] == 'y')
' M: \( d* u# w0 i1 H    {
, z, ]: E9 C: K* ?! c5 N        /*打印全部读到的数据*/
8 A1 f8 S9 I9 R- _9 D- w; Y        for(i=0; i<upp_frame_size; )
' b9 o% Y/ t' C- L        {2 H0 D1 E; M1 D
            for(j=0; j<5; j++)
$ {; [* c* F' {" P6 Q) W3 Y' r; k            {5 ^: F) U8 E  G6 q6 G9 c
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 l  H8 M! l0 G8 b; s& e
                i++;
. M1 w+ Y- h/ q$ t  O, K                //if(i >= 4096)
9 U+ D* j9 K' S" L' t                //    break;% b" w3 d5 ~  I' z0 X

0 A" z( L7 ~5 v* I, j( f            }) T3 q! _6 k" x! y5 Z5 ~
            UARTPuts("\n",-2);
0 E! m) }5 A4 r+ k  n: C  w/ `7 z        }* U; _7 C2 M* x6 p- r& _) V
    }) y0 _% H0 Z" J4 _- ~# |
3 O# k. z# D+ t
}
& J+ m) S2 G4 c* [, T
3 `0 Z- x% j3 C: A6 t" v6 b

! b. _  d; a; N1 s7 e9 a2 g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 V/ v4 L, _9 [$ y% k

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  i3 p8 C' u* J2 J




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