嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) Y! Q0 d: B$ k3 W
Void UPP_TASK(Void); j& b3 p/ M# f. Q& Q0 i
{
5 L0 \2 V3 Z, Z! B0 c$ c4 D( M& @# v; m2 [  k( P  f" o, g- E, V
    int i,j,k,target_int_count=2;4 `) y# H; T4 ]! d) m4 w
    char ch[2];
- [- p. ^* I8 H. i! j
/ i5 ?: I& O6 u3 U4 H, G& [( Y
; ?% G/ Q: [, _" ]7 u: B5 n
6 D. w: M3 Q, H( m# J4 o# A3 ?    upp_interrupt_count  = 0;
( k1 f* o5 c- \- a! X. _* g- l% u; I    upp_error_count = 0;1 B5 W4 |) `1 M+ w

. g. u0 `' |; i0 s    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 a1 P2 h7 |! h+ [
    // Initialize data buffers
0 _* O& g6 B8 I( n" p$ \    for (i = 0; i < upp_frame_size; i++)' _3 ^8 K1 m- L$ b' e9 G* j
    {
/ F3 v9 ]5 ~! \$ i7 ^       upp_buffer_b =i;
9 f8 f" r8 @& b/ r       upp_buffer_a = 0xDEAD;1 x1 C5 ?3 c( i: g3 |0 N' T
    }3 d1 M, y: c8 _' R+ F

' a- B" d) K" D% _9 T& p( F* o, c5 ^, e    //for(i=0;i<1024;i++)
/ y. u6 h  M0 I6 R9 K3 |/ l9 ~' t    //    temp=0;* J" e4 k7 h5 p% ~4 z8 B
2 H1 D! D2 y) @* y) Q3 n
    //UPPReset();
/ C6 P3 F! {. w    /*启动UPP DMA传输*/
6 V7 t- J; @8 J9 `    UARTPuts("upp_prog_dma_i\n",-2);
5 A& u0 n! V6 Q( o" R1 |    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! M9 p7 Z- c) c) v$ T% f2 k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ m4 p4 U$ `7 s: z5 e5 v4 l! u( w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ x7 Q" J* a2 U5 v/ x4 w: [! k9 V) r$ ^; v" Q8 v
    UARTPuts("upp_prog_dma_i\n",-2);
- Y6 j+ c# `4 e& h/ {9 ^- f    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% H( M( ?1 ~$ o! @  Q1 g
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" \( D, J& J" N* D4 m    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 L9 T/ l2 s/ u1 I0 _* I4 Q: v
$ f# R9 [( P% @& K! L8 m' ^' p8 L1 ?    /*等待UPP传输完毕*/
( @6 i" @1 S+ O- K    //i=0;
$ y3 n2 w. x+ W: }; X    //j=0;
% \1 k- O3 Q4 x9 O2 q  O    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- S" q  j) O- o) n. e
    {3 l! B* K: G; j2 I( d3 X
        /*  测试UPP传输的同时操作普通DDR数据& H& u. C; w' u! q
        temp=i;' w3 a# m. Y9 i' t; X; i
        i++;- W4 o7 N) v- a: Z, I! [
        if(i==1024)
% c4 A2 p, f8 \8 J+ j# R' {5 S. s. x        {
/ Y" n/ \, F: O7 Q8 R( f            i=0;
4 D& K- F2 J! J  o3 L# Y            j++;
0 E; y" p5 p/ n# n        }: y/ r/ t  k" `$ c
        */
8 V; u' U* O$ A8 S+ Q$ S" R1 @+ @
       asm(" nop");
0 j. f8 |& D: t- E7 s! F4 J9 k5 ]: R2 H$ ^: F
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! i! ]2 n" B% u8 `/ m    }. v  a( A; u0 u1 K. k

  |' z2 [4 k2 k1 @! K! B( ^    /*检查UPP传输的数据是否正确 (loopback modes only)*/; ~, P. J  m* l* L: l( i
    //UARTprintf( "i=%d\n",i);
; v3 h  N6 ?+ ]' t+ ^    //UARTprintf( "j=%d\n",j);1 B7 I) V! T( ~, q' I: L! k& E  }
    UARTPuts("Data mismatch in buffers.\n",-2);
; H+ V' d* d: \6 c6 N    if (upp_interrupt_count == 2 && upp_error_count == 0)- E3 ]' p- V6 C
    {; g6 x6 P+ Z$ @1 E3 c7 m
        for (i = 0; i<upp_frame_size; i++)/ Q$ o8 s7 B4 J/ ^
        {/ z8 T" l. C) D% z( K0 _8 w
            if (upp_buffer_a != upp_buffer_b)
& W  K( v; x4 f+ J8 n            {
- a8 ^+ a4 w1 z  y, w+ b! w2 r7 O                upp_error_count++;$ E  p  q6 D/ c# _  y* R
            }: A2 x5 @+ G* Z" A/ t
        }
' s/ x! Q% e" u% E4 l7 Y    }
5 Z$ {6 K7 n2 v
, K; F/ I# P2 R: ^/ o. j( u5 S. r    /* 报告通信结果*/
+ K6 K0 J3 k: X! @) T  h7 `2 b    if(upp_error_count != 0)4 e% V/ ]* r) D# I
        UARTprintf( "upp_error_count=%d\n",upp_error_count);, B( v: l  G( n
    else5 s8 c' v  D. ~
        UARTPuts("uPP transfers complete!\n",-2);
8 m, q0 c' Z" ?! e! j4 Q
' \& G- A$ a  y5 }    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* O! Z0 Y* f: B, _4 n" \8 C
    UARTGets(ch,2);0 d/ M7 w* d9 x
    UARTPuts("\n", -2);0 I7 H8 B# z5 N, _/ w- _: q
1 i. ^- [( w& @9 {5 {$ q# x  i2 }
    if(ch[0] == 'y')' f+ b" {- B& R! N/ w2 j
    {, M9 W. t9 M3 [9 N$ k  K
        /*打印全部读到的数据*/
& }' [* X! s8 `) Z: H2 Z- M        for(i=0; i<upp_frame_size; )
& K2 ]# Q) H: M( d0 s# h) I" J$ n  \        {
& H2 O4 [: Q! k" d& F0 \            for(j=0; j<5; j++)
( F# q5 O2 t$ P% j            {
# O7 @# J# a2 F7 C8 T0 {                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ X. E. w* D" F: {! i1 F                i++;% ~7 K* e4 ?4 H$ j9 S7 c$ W
                //if(i >= 4096)
. [4 z* Z9 [3 ^7 ?% \6 ^                //    break;
7 E5 y& N6 L2 {/ k4 P
* z* P* P. m- F9 G- I2 G6 u            }
: d' J& E/ ]% V9 A            UARTPuts("\n",-2);9 {+ m  }9 n8 R. D3 f( c
        }1 W6 \/ l9 c3 h
    }& A+ Y: k8 k2 F; E8 L

- T* `4 |* L" u) V9 E}
0 d" b! _2 G: }/ |$ J( z
, W* c2 n0 R' u* E5 z* ]
& d' q9 W* y9 h; a! s8 g  ?

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! J1 h1 d: X9 p

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 c9 z4 N4 [; t) w5 n& [





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