嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 L: B2 {3 `3 x5 B0 k! i
Void UPP_TASK(Void)
3 I3 q, {9 v! D* W( q3 R6 R# B{: P' F" i- ?& V  O! g+ h, p4 W

1 v0 z% E) I$ e1 h  v* D4 }2 ~, v    int i,j,k,target_int_count=2;
' h6 C* O9 [1 W: q5 `    char ch[2];
1 ~* U; Y2 U  q$ X" f( h' L9 R2 g& R, T6 x$ b* r5 e* R6 @
, S: N2 l( T7 A
6 H4 O, @) T# N, Y
    upp_interrupt_count  = 0;
! r+ Z) s+ {( b  p" s* k5 y    upp_error_count = 0;# R5 V6 s# @! S
$ x- u3 t) B6 E$ S: q) t6 d1 F6 A
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, Q9 D4 ]# H& u: V+ x; i
    // Initialize data buffers
! h- B2 a. g" p: U! @; @# C' R    for (i = 0; i < upp_frame_size; i++)1 J, q6 n" x/ H7 }9 q! l
    {6 j& z: D) F* w  \) p
       upp_buffer_b =i;" n2 b* q" d% L
       upp_buffer_a = 0xDEAD;6 _4 {# W% r4 m9 v8 q2 i2 Z5 c6 F
    }
' t/ G* \. \- G$ U6 A  B. X7 N8 @+ _+ U7 {7 q- y
    //for(i=0;i<1024;i++)$ l% E+ }% {/ e4 h# N# Z8 g
    //    temp=0;" ~. {$ ?; @% W: I7 b/ r8 c
5 m( v- Y# |: s: ?* g$ o+ u
    //UPPReset();
5 H9 D2 C1 R# k/ P    /*启动UPP DMA传输*/! s% Y& @, X* R8 t  C
    UARTPuts("upp_prog_dma_i\n",-2);0 }7 k" s- O3 M8 C% d9 q
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: x7 C$ D. g" Y3 M' _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- l8 n& ~, Y/ `& k
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 S  K8 E5 K' ?
$ Y* K8 L3 r0 S: G/ P: b# i
    UARTPuts("upp_prog_dma_i\n",-2);/ [) s4 ]# `& C8 i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) M/ g: ~5 |5 S6 i( C0 L" O, Q' V    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% M: I5 ?5 C* B. x" e% D5 I8 r
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, w9 D7 k# E3 Q  Y0 W; ?8 y. G; W% [1 ^3 \, S* H! Z9 l
    /*等待UPP传输完毕*/
- B( f2 i, [1 @    //i=0;
' r4 ?! @8 u2 ]1 y" l/ Z    //j=0;
1 Z2 r+ c/ J  N7 _4 ^6 Y) W8 {& s2 c    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 T) L6 |& g0 o. j# F4 h( q  H    {
3 j" ^0 w  U& ^4 s( k+ G2 T, m7 r        /*  测试UPP传输的同时操作普通DDR数据- w% q3 s/ e* I- ]4 B; _# P
        temp=i;
  j4 E1 j8 N+ y3 P        i++;! {' J3 q* C  w( E0 ~. Q6 R
        if(i==1024)1 W5 M) W1 R; d5 W
        {
' E- G* B; W2 J! i) p            i=0;; S+ B, @) Y0 M# n, o4 _) s
            j++;
: A7 ~+ g2 A7 E        }
9 R9 q9 X0 u& v) v        */- n. x/ |+ q( M- c1 _
2 B$ \$ u& E) C% T5 B
       asm(" nop");& x$ x: U% I' x/ T7 [

. q$ c8 ]  k. O( l: P       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- J' o9 a' a# D3 ~8 x" Q% \8 D
    }
- b0 p  y) |1 y$ ?  k% A! H( W
5 b# S/ w/ _6 ~% P0 v% t$ U    /*检查UPP传输的数据是否正确 (loopback modes only)*/  \( W- l( a1 p5 V1 M0 ~
    //UARTprintf( "i=%d\n",i);
! a6 G/ R3 b: Q/ m: c1 i2 N. j    //UARTprintf( "j=%d\n",j);% ~7 I& t; E& _& N" [
    UARTPuts("Data mismatch in buffers.\n",-2);. b! S1 c) p/ G( Q5 B! h  |- H6 C1 f" @
    if (upp_interrupt_count == 2 && upp_error_count == 0)- @3 \1 j9 t+ c, V7 w% X
    {
; n* k4 Y2 h/ H7 v$ O) r. a6 T        for (i = 0; i<upp_frame_size; i++)7 I2 i1 N  x/ t5 c& ?1 G
        {3 g8 N7 n5 Y3 F/ F# [% W
            if (upp_buffer_a != upp_buffer_b)
8 `" t2 @" j/ a  B            {
6 g1 _" H6 A. U( P& b                upp_error_count++;3 z: F3 A" n1 I0 c% ]& t
            }
% h6 w3 P1 s( T        }
- K6 n" M5 Y. I; P/ F( A# F    }9 N% r/ y( D: u8 j0 I% A

! [( l/ P6 R3 x; l/ b( Z$ B7 j    /* 报告通信结果*/$ ~, Y' |8 m) N& o9 R8 }) m6 `
    if(upp_error_count != 0)# n8 M+ M' Z& B5 \: ~2 Q2 F: h
        UARTprintf( "upp_error_count=%d\n",upp_error_count);7 N3 e) t9 ^7 @) F) n4 P% }3 ?6 C. ^
    else
$ n8 d( X, K) J; Y( k% \; }        UARTPuts("uPP transfers complete!\n",-2);3 V* ]: o( K! I2 p+ O, y- X
; ^5 `- ?6 H0 k5 F$ j7 P! |
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' e( F4 U1 H4 Q/ d& F; g    UARTGets(ch,2);3 ^/ f+ y$ b  f% e9 ~
    UARTPuts("\n", -2);
. W, s- j( ^3 o! l9 B8 V1 L& S5 I* y5 p+ }6 @3 W/ C
    if(ch[0] == 'y')
1 s& f$ Z! R/ K    {
* T( G3 A- l7 V; v1 I        /*打印全部读到的数据*/
" X, w) \- _) s3 f, e4 s        for(i=0; i<upp_frame_size; )7 z! V8 ^# A1 h8 i$ A
        {
6 X) M. J7 Q' V1 R3 c5 D) Z. D            for(j=0; j<5; j++)7 r! g% \7 O3 A( m$ P3 y
            {
2 z3 N/ @8 ^7 j4 D( t( F) H1 B0 j2 g                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
" m! ]' h( _! Y' i7 a2 T2 I                i++;- l0 R3 }  o4 A8 e
                //if(i >= 4096)
  y2 X) u8 N3 L! n2 y. Y5 M                //    break;, C% S2 U6 w8 M3 \
* m) H: T" j: p
            }. o) l( A5 c; G+ H% V
            UARTPuts("\n",-2);
4 i4 V5 T3 O5 O4 N        }- d0 m2 Z+ {7 ?  ^6 t
    }
5 J6 Q9 o3 e; O3 m* h& B5 {6 |" g& e  p/ p' b6 @
}
$ `! ~8 {" _; Q. i3 b5 K3 N

/ U! m$ a! g9 G' p, D" B& i7 [) a# @* Z: ^) V8 b9 L, y1 m

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 j. ~: U  h$ ~

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" Z6 U+ w# F& l  G% @1 [





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