嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' S0 P1 Z4 o% `3 D
Void UPP_TASK(Void)
5 p! J  z9 J2 p" s( ~{/ L8 F6 O& `- G: P# v6 I# Y
4 l/ M2 [2 N: i0 b
    int i,j,k,target_int_count=2;3 E. v. D! M6 X2 Y; H
    char ch[2];: }! J; q) y6 m' O7 I

( M$ ~9 i" Q+ D
) C9 e" W( G, u' I
5 J" {  P: i; V) t    upp_interrupt_count  = 0;
# P% g- J. ^/ R% l    upp_error_count = 0;+ _0 B- A% N" o% z

1 \& O# [6 V& ~: w" B# u8 x# x! G% u    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# t" G; P! S9 q/ @* t9 W    // Initialize data buffers
/ K. Z$ C* K4 I# A$ M5 F    for (i = 0; i < upp_frame_size; i++)' D7 R  w1 `  H5 V2 @+ }
    {% k; X+ \; s" c- D3 J+ N5 P& s
       upp_buffer_b =i;) m, h8 F6 h! m; }& R
       upp_buffer_a = 0xDEAD;* F" P" a$ _3 I2 l" ~
    }
3 c1 @' W, F5 f* U1 O7 y1 c( B" `6 h+ m: {2 v
    //for(i=0;i<1024;i++)5 i$ x* v, d/ A, k1 S
    //    temp=0;
8 A9 u& X6 }( `- ^5 q' [  o- X5 C7 s9 @; x  m9 u
    //UPPReset();
% F/ r0 b7 e- G) F+ W% _    /*启动UPP DMA传输*/  ]: _5 B7 R8 i
    UARTPuts("upp_prog_dma_i\n",-2);
' k# t" j* e% E/ d    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* M' U) I3 d5 s# ^. l" }    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' S# n2 ?6 u' S0 W+ N6 @- y
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: \" K8 L: N: U3 U: ]( c
. I6 d( y, N3 ?6 `
    UARTPuts("upp_prog_dma_i\n",-2);4 o% Z% c. R8 D$ G! \1 m% f2 M: u5 _
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;2 M* E3 A2 Z% }2 Z1 z7 q1 S0 a
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" J) V) w5 X( ^  T
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) D! l- O4 L+ F9 J7 T0 y: m6 b; |( s

7 g5 E( q/ K- h. @6 X- g" v& |    /*等待UPP传输完毕*/( w$ ~+ m* Z+ o$ N
    //i=0;5 D4 [/ u2 u: F
    //j=0;
7 |7 S4 X- e/ ]0 e6 O7 x2 r    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 t. W4 t) E" v8 M/ N$ p1 C" F, z! P$ C    {
' h/ S: T/ ]$ c; I& a        /*  测试UPP传输的同时操作普通DDR数据3 t6 z: N' a- i/ |1 Y) j7 [, k
        temp=i;
. }+ C# B( A% I" Y3 w& {( ~. V        i++;$ M/ O7 z; \/ ^0 {; a0 q6 \( d3 k9 f
        if(i==1024)
3 w7 p4 d! ~% I  v* Q        {+ T; z" x: q6 u* x! |, r/ Z9 p
            i=0;( q, Q- M/ L; x7 y4 ~/ ^. f
            j++;
7 F1 J& E, \3 ^, ?. N$ E7 s! ^        }' Z6 Q2 E# j* k
        */8 N$ Y4 O- Q2 ?) I6 a$ K8 j
$ }8 E6 R+ H$ [" G3 A9 f
       asm(" nop");
6 Q, m0 `- T9 T+ Q6 `" Y( A) h/ X$ r$ C$ w& h
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- e  K; X' F% G! x; ~6 K    }4 Y" U6 @0 ?+ u; e( q5 K0 U5 g! f

/ l" a; r! Z" i    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 Q' a! G4 A8 T( ]; ]0 G    //UARTprintf( "i=%d\n",i);
' r4 p7 D4 j+ P; X8 P    //UARTprintf( "j=%d\n",j);
' r1 `- f/ m! d1 ^% }    UARTPuts("Data mismatch in buffers.\n",-2);
% V: e8 y7 [1 {- c8 H! l9 F( k    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 N( ?% r' C3 l+ ~& d! E    {3 q- G" m+ z) o( X2 u, n9 e
        for (i = 0; i<upp_frame_size; i++)
" O1 G2 S2 K0 ^        {. O- p! O3 [6 H0 e- L" \" F8 `
            if (upp_buffer_a != upp_buffer_b)
) k: j; L1 W% k7 L* |            {
& }. {  H( G1 v                upp_error_count++;( J2 V" m( ]" b. f
            }
, X' I, \0 V; g# S9 c0 p        }& |6 _# `$ e8 y( g6 l" N' v
    }7 z, e2 r! V) z( k. E. v1 \
6 o7 R7 t* W% n. r# n8 T
    /* 报告通信结果*/, F* h$ `3 w5 R" a$ K, J6 ~
    if(upp_error_count != 0)1 w$ `+ I" q+ G  p) Y  q
        UARTprintf( "upp_error_count=%d\n",upp_error_count);  U/ I5 T. \4 v* K; K! d) }. L
    else, y. g2 U2 I" w3 r
        UARTPuts("uPP transfers complete!\n",-2);" o9 v4 I8 Q, U3 m% q3 t4 C

. j0 R5 Z5 C* M! I    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  |6 y; b) z/ L
    UARTGets(ch,2);
/ p4 l7 |$ {# R    UARTPuts("\n", -2);
' b& C9 J' D# A9 G8 p. ^9 F& a# a8 V, v7 m# x
    if(ch[0] == 'y')
1 `% p6 C0 q, ?+ F    {
- ?1 e) a0 S" ~3 k# X7 |4 u        /*打印全部读到的数据*/
) g% w) \& R' j' U        for(i=0; i<upp_frame_size; )
4 Y, j$ f8 C6 L: ~5 U8 Y1 b. w( U        {" Q$ ^( E9 q: O+ x! {- _* L" e
            for(j=0; j<5; j++)
+ m: s; }# p( t$ e% G. r0 h% d$ x            {
% v- A1 y! P9 Z8 t' V# V                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" P) D- l/ f3 _, B+ G, t6 }7 `
                i++;/ U0 X/ g/ B' A' Q4 ]) _, I
                //if(i >= 4096)2 i' s" s- R, s1 K
                //    break;
* z% a% @  G% o
. H! k8 ]. D5 |6 b5 C            }; v$ D# c7 ^$ t* i
            UARTPuts("\n",-2);
1 E& K$ l' E6 H! R) j! T        }
& s$ Y  O) ~- S4 B" V! h- t    }
- B3 M% @: V" \6 S( Y5 W8 z
6 ^  [' i: A- c8 b" r}

( U* W; g( i$ d1 n+ ?- i4 t
" }; g/ K  ?) |$ _$ L& `
6 S7 t& k$ J0 |' T: J# E) Q

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# [7 L) A8 D1 Q. K

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# ]  }) Z( w3 n0 V* [8 ^" G  b; Y





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