嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 s5 \5 Z0 }( Y6 P9 i7 n
Void UPP_TASK(Void)- W% R' c. c' |7 ~3 |  y2 f
{( M) a' q2 ~. w* m( e; Q9 L

0 }- ^0 H' `! ~3 I8 [, [' F7 T, h    int i,j,k,target_int_count=2;3 w8 g: Y) l4 z; [/ M" K' n8 P) n; ]
    char ch[2];. H- B* N# n7 L7 }3 q9 g" Y
! x7 `4 i" o; L4 J8 L7 _
% `( S6 o( a& S" N" T
" M0 ^; |; t: V
    upp_interrupt_count  = 0;3 |) K6 t+ y& n6 d% Z& v0 x# P
    upp_error_count = 0;! f8 X) J3 B) j8 `" E. q
0 I' B" r4 |. n+ E
    UARTPuts("\tResetting uPP buffers...\r\n",-2);1 b* j) O1 F) H5 V
    // Initialize data buffers8 v; _; G. K7 Q! i( u0 b
    for (i = 0; i < upp_frame_size; i++)( S: T7 L' t* F( Y0 i- D
    {7 C* w! ^. N' O
       upp_buffer_b =i;
) a1 ]+ Q6 C+ U' Q6 b: `: a       upp_buffer_a = 0xDEAD;/ [# X. e" z7 Z) E
    }. d2 D; ^6 z: u
2 O2 v( {) T1 ?4 j
    //for(i=0;i<1024;i++)
) T" g% y, q4 O' S* @, Q    //    temp=0;, m- \0 Z5 \; s2 p

+ s5 f# V! d4 J+ Y* j    //UPPReset();
- Z5 m. A3 J5 S    /*启动UPP DMA传输*/; n, v+ D' |  t7 [
    UARTPuts("upp_prog_dma_i\n",-2);  D+ Y1 z9 N# @; h% G
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 y4 c% n& D6 {! m5 J% q    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 y3 Z6 w" b. E, G5 W! B
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);  b$ O7 G/ g) d

& u! r3 ]" i9 H- T/ v/ A& I% Y, v    UARTPuts("upp_prog_dma_i\n",-2);
3 K* d9 f9 N# Q/ N( v$ ]    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& C9 q' |6 @: W% O( U
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) w9 v, m+ P* u
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% {2 s) U  v: B% v( W" |% C9 p. A
3 @! L0 U6 L; }2 M
    /*等待UPP传输完毕*/! Z. L5 E7 A. r$ N
    //i=0;
- f# v, i  x1 e& `, y' V' Q    //j=0;
" {' Q8 l6 s+ D. Z5 k    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. y2 T+ ^* w  p0 Y1 R    {
1 A! a4 J5 m. z. d        /*  测试UPP传输的同时操作普通DDR数据
2 e! g/ R) o8 h; f        temp=i;# V4 ]8 H7 U. J8 p/ G. F+ g( z& W
        i++;' @4 R: k% |; d; L
        if(i==1024)% Z% W6 p" ]3 N2 z4 s4 e" t+ z
        {6 H3 G4 {' c+ w+ x8 o6 X
            i=0;
1 T* x/ U1 ?4 M) S: J            j++;
) _2 r3 e9 |7 a! j; R        }
( P, g, p+ @* W9 q- A        */
  \. s; y& v9 @) v3 K$ l: U0 K6 s
2 Q! R$ ^1 U' ~1 F& U3 y6 c       asm(" nop");
, x; M. M& j# d: X: M& Z
4 K1 |* I6 m" v: O; [       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);5 F# b* P, e6 {. u
    }8 f& C6 q7 G5 ^. ?2 ~
/ B0 l) h3 A2 p% P; ]. v9 I9 o' m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
" q2 U; n0 s0 C, {: }    //UARTprintf( "i=%d\n",i);9 B/ c) V$ D* l7 c) W! G
    //UARTprintf( "j=%d\n",j);
! M  c$ D/ I+ Q: ^) }. ^0 S4 T    UARTPuts("Data mismatch in buffers.\n",-2);/ {) V- I" T# c3 f0 O8 _3 x/ x( w
    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 S( B% V7 @: L+ R6 O: J4 i% m    {
9 k! f2 R5 n: K# y# P3 Y        for (i = 0; i<upp_frame_size; i++)
- c' I" X% i  f: }0 H4 G1 K        {
* S. W; R; S" A6 ?* D; T            if (upp_buffer_a != upp_buffer_b)( M" S/ n. U. L6 A
            {/ d* l9 ~. J% E% _
                upp_error_count++;
  B) ], y# T3 S( n            }
' ]$ l# T% ?5 A- H6 d6 m7 C        }* p/ s5 \6 H! t8 P- p
    }
& p7 l* Y: O( d! t, p  f
# L3 r2 ]+ c" y# _" e, b    /* 报告通信结果*/
5 O9 u/ \6 w9 \+ S, C% l8 y    if(upp_error_count != 0). d6 H! L' H+ I! e6 v& K
        UARTprintf( "upp_error_count=%d\n",upp_error_count);0 t7 T( D0 g! F: i
    else
0 M5 H- x3 I2 E4 I' o- A        UARTPuts("uPP transfers complete!\n",-2);; U4 d0 M0 h: S
5 b% ^* _& N# ^6 v4 D6 R
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
% T8 s% A5 ~8 Y) }7 o    UARTGets(ch,2);3 Z7 U6 p* V' t& P4 d
    UARTPuts("\n", -2);
! l' M4 |1 v' H$ h( S8 }9 C2 M! |7 i* `
    if(ch[0] == 'y')
9 w7 x5 g. v; I+ o    {; h, i8 n* `# R, `8 g/ M
        /*打印全部读到的数据*/
, m! C- w$ V, G1 j" \, T( L3 n$ W        for(i=0; i<upp_frame_size; )% ?! B9 k3 k0 c+ A5 ?
        {
1 g8 R3 @4 U) R7 x/ [+ D4 Q            for(j=0; j<5; j++)
( ?9 f; [+ G0 Z            {
1 b& G* X6 X" e- o: m                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) d/ v  X! A6 G. x% S" q
                i++;
/ W/ T6 r: X; `: j: X9 u                //if(i >= 4096)
: V6 V6 g3 C0 B& J                //    break;
0 ]  y$ \7 o/ E! `: j
( Y) L* ]5 ^  o  e! J4 S            }( E7 `* `! `$ d9 H$ P
            UARTPuts("\n",-2);1 Z. W" p  D- D
        }
3 i) v( C& K/ J, c- J& h    }
  G% i4 R1 V! O# L& J% R: {, ~$ p: c  B, i9 A* ]6 M
}

) w. F  I+ b; `6 \* k$ {$ F# ?

' V" \4 ~" i! N- E( J1 g* v) P+ S2 K* K) g2 E9 ~* {5 P

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ x* [8 E9 h+ c; R8 X

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 s9 ~! a- B' F) l0 i' }& q& p* N( ~




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