嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* L1 _" z3 ?4 t) }7 J- H
Void UPP_TASK(Void)
4 [4 A; R; E( z7 Y* V$ u{4 O) b& [- h+ \$ i$ T- b

9 @. N; D7 Z$ {- A    int i,j,k,target_int_count=2;0 t* b1 I; R: J) R- o: H
    char ch[2];- `. ?8 {  x& L& I3 I6 ?9 h
+ r4 {5 G8 P+ y  ?1 ]8 u; I9 r
8 f  j2 x" ?  s7 s0 I8 w$ b
- h, c% o) s9 ^; J
    upp_interrupt_count  = 0;
- ^4 L+ |( U5 \5 ^# Z* O) G8 j    upp_error_count = 0;3 F2 C+ }/ t2 t( T! `  E( u5 L
: O: F7 u0 M& A8 C. n' E0 k& o
    UARTPuts("\tResetting uPP buffers...\r\n",-2);* `, R1 D! O7 X7 G
    // Initialize data buffers
2 V. M. c6 J- R# H    for (i = 0; i < upp_frame_size; i++)+ M/ b2 v& K7 m* T3 ~" M0 K! ]
    {$ j. J- G' @8 |. t  h' p, T7 k
       upp_buffer_b =i;
! M  B0 t9 C# r       upp_buffer_a = 0xDEAD;1 z2 x( E. v  ^- }. K
    }5 F+ B$ e. z, x) z6 x6 }
# K' Z8 B. s& t& \$ f
    //for(i=0;i<1024;i++): D- G7 \( F9 `+ K
    //    temp=0;
4 O. E, ?# r( G  x; \1 C1 F4 }) m- `" e5 w0 J+ Z6 s4 E7 o4 z
    //UPPReset();
& J# U' e; k& U    /*启动UPP DMA传输*/
: u1 Q" r- e8 Z! U2 u6 h6 l0 d    UARTPuts("upp_prog_dma_i\n",-2);$ ^# L' D8 ?% s4 a* R: f, `
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! B7 a( A+ Z5 q% l/ R    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 y# A0 H; K7 w+ J0 c4 `
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% J2 p+ Q0 i8 i5 }
2 z$ p  ]0 W# O6 `) z+ v    UARTPuts("upp_prog_dma_i\n",-2);7 o) q2 H3 k* C6 |( K
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 {+ F# T* o& `" h
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 N( c  u+ c! Y* w. r' E    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 j% [! |9 S- |8 }5 j2 Z

8 s% v0 a" R2 y) Q  j    /*等待UPP传输完毕*/" d3 _# y+ u' z# k' H' D  T
    //i=0;6 {; L4 T! {0 T9 }8 J1 z
    //j=0;& w# Y3 E" V8 l! G0 q1 V1 E% Z; h
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)0 R: U1 e3 R/ B
    {
- m. S1 v5 G+ i        /*  测试UPP传输的同时操作普通DDR数据
: W% r9 G% X$ f9 H7 @        temp=i;  G% w- j8 B; G; [% L& r
        i++;8 U$ {7 B) ^. G8 m$ P! f2 k
        if(i==1024)2 l) z$ e# B6 V) J, e
        {
  W3 W) C( _9 w% n            i=0;
8 D, p% v# H( u' I9 d            j++;8 Z$ P( U% `2 X
        }
' z& t7 V5 Q  @! N- t- D        */
; \4 ?( L  x( Y0 k% u' e& o3 j: D9 `8 y/ Z: c( R( q8 i4 W
       asm(" nop");) ]2 r/ f# C4 X/ M2 j9 x
; J1 R9 f' q" \3 g5 t, Q) K
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 |/ Y. ?+ D' w; _. I9 |2 F
    }' @+ `4 [0 N. t; ]6 I5 x
& }4 p+ c( p! }7 Q
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ E2 [9 Z4 W; {4 [: ?2 ?6 I- E! b    //UARTprintf( "i=%d\n",i);
7 [0 O9 |2 E1 }# c+ ^    //UARTprintf( "j=%d\n",j);" i5 E& g' Q& N3 H0 P4 b( n3 O
    UARTPuts("Data mismatch in buffers.\n",-2);
# S( ^0 y2 F0 f( R( I    if (upp_interrupt_count == 2 && upp_error_count == 0)
- O' V8 v6 `% J( b% h( t: Q    {. P! f+ V! M9 {5 W% a( N4 R  E
        for (i = 0; i<upp_frame_size; i++), A; o& g2 [$ i% s/ O3 _3 w
        {( L' j! i4 q& d
            if (upp_buffer_a != upp_buffer_b)6 T, w5 y( o( Q- N7 n. n. o
            {
& o" K7 D3 g5 d+ i, s8 z                upp_error_count++;
: y6 f7 Z, [: z+ T            }
: E7 _% R1 v7 U7 R) j        }
$ w1 ~/ u6 x" y3 ~    }9 m/ Y' w- Y7 S0 [! N1 O: N' o  N2 ^

; {+ E6 K; _* K3 L/ r# v    /* 报告通信结果*/
  Z1 L0 F5 g9 y, G. i0 X: ~    if(upp_error_count != 0)" |) K" c: e; S
        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 ^5 b, J& R% U/ [" c: y% t. V5 L
    else
6 b! `" [1 \) V' F; g        UARTPuts("uPP transfers complete!\n",-2);
% d8 y+ h' h% @' V* p$ s
4 G" n9 ^* v% H    UARTPuts("Do you want to print all the data?(y/n)   ",-2);( r- O/ L# |. f) d  [, @4 h6 f: j
    UARTGets(ch,2);, o8 h: T# y9 ~
    UARTPuts("\n", -2);
! j! W. h3 o9 ^2 @
$ E+ c1 l: \* k9 s" D* `! z    if(ch[0] == 'y')
0 C1 Y' v0 K" a4 C- Q    {3 }7 g  j6 ~) Z7 ~9 E
        /*打印全部读到的数据*/# |4 i7 P+ U; P3 f7 F! P
        for(i=0; i<upp_frame_size; )" V# H! @' [! J. [5 V* S( h
        {( I5 m! z2 ?6 G2 ?2 Y1 V! h0 x# d" P8 t
            for(j=0; j<5; j++)5 T0 E4 V" K$ t9 Z$ U1 s7 J
            {
) W9 L9 s0 U! c# r& @) z                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) d: X% [6 e' G4 E( h+ H$ c                i++;$ m2 t" Z/ Q# ]. }
                //if(i >= 4096)
. v2 ~* W- f$ F. a+ V                //    break;
# r) j, m+ }+ Q5 G1 _+ B. f) D- M
: ~1 A  j% {$ W/ B" g            }" v* f$ ?. b6 `: _" J0 K$ N
            UARTPuts("\n",-2);
9 p( ?+ w# J' O+ X' M8 W0 |! e        }+ N5 L" k/ o; k) @1 t3 j' j
    }
$ a0 @6 N4 j# S$ T# q' R* X  u7 N% t' C% m: K: U
}
+ l: q8 |8 e' _$ O/ y: V& M

: J  n. T" _: Z$ L7 B: {( }
0 t8 D1 s4 d/ F1 C2 q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。  p! [: q& c6 A1 I

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。2 E3 F' i. X( `) ?; F( n% I





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