嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* J5 a( Y. u+ Z0 ?! t
Void UPP_TASK(Void)9 [6 a9 u" v/ ^0 G1 A( \
{
" a. Q' T8 q; ~1 M" L" \8 p+ F  u
2 X5 I# S, E8 u; C+ K& ?: `    int i,j,k,target_int_count=2;' I& N! b0 c) |7 i2 F* C5 J8 I; ~
    char ch[2];
9 a+ T, B5 m. {9 ]( Z% }% @: h- H( ~8 M8 x7 k
% R5 ?  S  n4 _$ d  q

% f7 H# B; E, G' v& I( w$ s$ A* n2 k    upp_interrupt_count  = 0;2 h5 N/ f( L9 D
    upp_error_count = 0;
8 ?7 Y4 c7 P' R! {# L# s' L% W* Z, X0 j+ U1 |
    UARTPuts("\tResetting uPP buffers...\r\n",-2);: j2 h4 b0 s1 }. ?9 q7 z  t& J/ F
    // Initialize data buffers
" V# Z: U( u  r7 a1 c    for (i = 0; i < upp_frame_size; i++)6 F5 C- o$ {; ?2 g8 W' T3 I6 v
    {! n, V! o" S4 i8 ^1 S* N7 {
       upp_buffer_b =i;
* j5 M( L( H2 g* Y( u5 ]       upp_buffer_a = 0xDEAD;
+ X) `4 U; {/ E0 I. [    }
0 k9 A4 r8 x) W9 b7 t1 n2 K# Z  ~4 X* f
    //for(i=0;i<1024;i++)% Z6 E5 N* ~) {
    //    temp=0;/ S4 u$ |9 E6 N8 X0 S" H

2 Y3 ]) J9 V  ?9 {$ {+ T" w    //UPPReset();
: C$ r. p& A! H/ A* b! W; K! |    /*启动UPP DMA传输*/
, S' ]. ]6 q- I6 f8 b2 V* e    UARTPuts("upp_prog_dma_i\n",-2);
1 ^) \  ]$ E: @2 K( z    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* G2 d+ T  x, Z  f  o    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. u$ x5 s9 Y6 H/ ^+ f, m! R2 o2 x$ G
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 v6 s" h) |  r# @+ O6 O2 o" ~4 \, e' }7 K( ?! T, ]
    UARTPuts("upp_prog_dma_i\n",-2);
: z  j( u. R3 L- c2 T, P* l/ X9 p7 I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 ?) Q7 Q9 W$ p2 }1 s/ a
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 A& @: m' f5 g9 k) B    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 u# c- }5 U) F$ _6 V4 f
0 B/ L7 K) I! _( @: R- m; S    /*等待UPP传输完毕*/
: Q% V* D' _2 Z5 ^) ~    //i=0;
5 |* |0 v8 t# X9 c. J# r' G    //j=0;
; [' R1 s8 M% I    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 V! u3 P9 ~  X- {3 D    {
# a! X7 q1 d( X+ O        /*  测试UPP传输的同时操作普通DDR数据
5 v, a- a4 {& o! X. L) `% H5 l* A' o        temp=i;1 U/ Y& E$ E$ F
        i++;& v: R6 Y% u" @4 e1 m/ H$ I* c% b
        if(i==1024)
# U/ [1 L# p; K0 O6 [5 D: q        {
( k# E  D& Y' R( }- ~5 M& T            i=0;" l6 b! P5 i( [* `- Y
            j++;
" @+ l1 g$ P) d! O7 g+ J        }
4 N/ j' w6 E0 s1 r- M0 t) A) ]        */% L3 {9 ~- A9 K, Z
/ i3 U( Y6 v- M/ P: E. Z( H2 F
       asm(" nop");8 d5 R3 g; z" G7 Z" d% E! i/ [6 X
- N" J3 ~* U7 D$ h7 k8 ^
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);3 J) L; D8 _! d6 F: H4 r
    }
  |) K! e( _4 f: ]$ L. ^& q) `4 V4 T; _( f! N$ D3 }2 t, E
    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 R0 w: H& ~1 B( i
    //UARTprintf( "i=%d\n",i);
+ A8 ]0 g$ m# i7 c4 }* I' O7 `1 Z    //UARTprintf( "j=%d\n",j);
* l; D7 a, Q2 |6 _    UARTPuts("Data mismatch in buffers.\n",-2);! \# A2 P. j+ N7 y
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 x( t; X2 S7 p6 f: s) |    {3 ~7 L" G' |7 E& _- Y
        for (i = 0; i<upp_frame_size; i++)
4 [" v+ `0 @% @: Q6 I5 u' b        {
/ a" b  z# B9 M; W+ Y* m' W            if (upp_buffer_a != upp_buffer_b)
7 |' g% F+ ]% f4 B5 D3 H5 m            {
! X% }, j; q, V                upp_error_count++;
6 w5 n: j! B1 E9 c' t1 }            }  j- t; T1 l& a6 \& [+ H
        }
; t/ Z, H! \2 r. z( l    }  Y2 l9 h) M1 j, I) O' g
+ Z; C! x  ~2 ^7 h8 K+ I
    /* 报告通信结果*/9 y0 K1 Z/ z3 w; @* [4 b9 D
    if(upp_error_count != 0)
5 m$ _+ \# U- g+ p4 _5 @9 X- p        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 s" u; T  ?) Q0 Q* P4 R
    else
6 r9 \; p  S: Y5 j' }        UARTPuts("uPP transfers complete!\n",-2);
0 S3 E6 L. C6 e
% }; N7 [) J/ H3 [' v0 X5 o    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 J7 l0 t* R# `& L    UARTGets(ch,2);' q: x; _' L/ N$ k7 y
    UARTPuts("\n", -2);2 R$ p, @( ?" ?9 H3 A8 v& j

7 e6 p# W" _! T7 n. D' y+ b% D* [$ G    if(ch[0] == 'y')% X0 U5 L3 g& h; J
    {5 {4 F' F+ J) F; d
        /*打印全部读到的数据*/: u; l: x: _& P! j8 y3 T( A  H
        for(i=0; i<upp_frame_size; )* N  ?3 H$ [, r- c& W: G% P1 U6 j
        {
) {. p1 |6 T# `# K) F5 j4 m& z2 p            for(j=0; j<5; j++)
! E; B* h3 O0 `7 J, R7 ~& w            {; h, J% A# \: @- x6 q
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);9 P1 a4 C0 c" x7 c" [
                i++;* ^5 D6 L& |2 _9 ^5 i
                //if(i >= 4096)
  K( a! |" @  H# J" h5 I& `                //    break;" `6 f' A# c, B5 n$ B

$ J% F- P( I% b! N, Z            }$ N9 e: X, P9 Z) @( X* o7 u
            UARTPuts("\n",-2);$ J3 s* y: f8 [9 J
        }- T1 V. u5 O( }7 M0 L' u
    }
8 [! W8 q' L( x/ O* F! Z. v8 X; x
}

- {% r( \5 L9 h' h- b0 V
  ~  m. e. b2 j1 R$ p& S
0 a0 P" J3 G1 Q/ c% i4 s

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 [) b3 a. O  r' s0 o  H! W
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 j4 Q* Y: B$ L% h  A




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