嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 t! }. L- F7 L7 {& i
Void UPP_TASK(Void)5 p8 e1 j* G2 u5 J0 z( n
{! A% ^1 M" N. A* t

- T4 S* _( [% g  ?  j    int i,j,k,target_int_count=2;
9 T: {* f4 ^6 E) _    char ch[2];
5 @9 [& ?0 q% `9 u  l5 D+ {
& x8 D3 a6 m) x- s: t$ g
" E- K  M7 O8 [5 W1 T
- X: I0 [# Q0 ?" m4 m4 P; g0 A' z" M    upp_interrupt_count  = 0;% s8 _! q3 k5 G2 [
    upp_error_count = 0;
$ h$ r! I8 w0 U  W( x8 o# _
8 X/ x$ m9 f3 k$ o1 ?( S    UARTPuts("\tResetting uPP buffers...\r\n",-2);
' g3 ^7 H: N( r; c    // Initialize data buffers
( g( }. e5 p+ [# o& R    for (i = 0; i < upp_frame_size; i++)" f& u9 K" `' ?3 m, ^) u
    {
- ~4 O. j" m' N0 ?# n6 e/ X       upp_buffer_b =i;3 Y+ G5 }' B& c. }# ^* o: G% _
       upp_buffer_a = 0xDEAD;
! R- T- ^& }9 T/ l    }; ]  N/ M0 R' I

( R6 [/ G2 Z- A    //for(i=0;i<1024;i++): W4 @. X, h: I% {
    //    temp=0;
( J5 Y0 Q) ^" Z2 i5 U" L5 P5 H9 I8 m1 x7 _0 @1 Y+ |2 X! o- r! K
    //UPPReset();/ J0 L8 ?+ H: u) F. ]& w  u% b1 y# q
    /*启动UPP DMA传输*/$ Y+ i& A, Z' e
    UARTPuts("upp_prog_dma_i\n",-2);
2 a+ G9 f$ J2 H: ]$ v5 ]! S    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;$ v0 t" y& F# E+ u) z0 a
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& s7 E; p$ J. ?! Z4 A  ?3 S
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# e$ C# f3 s. L

4 _! {( L% ^- P3 v  }    UARTPuts("upp_prog_dma_i\n",-2);
1 z+ W$ B: G6 _8 ~9 C( l    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. `3 X0 y. ?0 n( Q# B$ e* u    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; S: F" S' P; d$ X5 S' g    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. j/ j. @1 H9 J/ s) }% J
. I% j' p5 t" w! S8 }    /*等待UPP传输完毕*/
0 h. ^% l. D  K5 v+ m5 ~" i    //i=0;5 s( X# p, e0 g7 W. w' P( P- X
    //j=0;
- N3 w4 G+ L& y    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" G( H8 X# E1 j: _& j
    {
( a' g6 _1 Q7 ?+ A* r' J3 E! l        /*  测试UPP传输的同时操作普通DDR数据4 J7 U% o0 e6 j1 A6 B
        temp=i;
/ i, A0 O3 p/ T) T& c# ?% C0 O% Y        i++;
/ \) T3 V$ ^/ c! ~& }1 n        if(i==1024)
2 h8 v) t1 P6 ]  S2 @& m        {
% F1 X8 s8 I, y5 u5 k: s            i=0;
/ b, W# y5 x  l6 u$ Y* `0 o            j++;
) O2 j: L7 P( }8 F5 d, h, J        }
5 j( \' R) k3 G% S- m4 q. s3 E% H, ~        *// K& k2 _4 m! \* K! e
4 J) V( n* _& F3 l# r
       asm(" nop");
4 W, J$ P0 l9 Q$ t8 w7 E  Y
5 P* J7 c( @$ i+ j# O       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) p9 I$ X0 ?: C2 X! ]  @; N    }  B$ H; B2 u- j: q4 F! N

9 u% ^3 d. S# Q: p+ g    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 S+ N; V7 |3 x0 r  \! v    //UARTprintf( "i=%d\n",i);
0 @3 j4 m, m" Y9 w5 M2 q    //UARTprintf( "j=%d\n",j);
- z, z  t8 S7 U$ d' ^, {    UARTPuts("Data mismatch in buffers.\n",-2);
3 L4 o& J8 U+ W, F    if (upp_interrupt_count == 2 && upp_error_count == 0)6 O5 t2 [' D" y; e) e
    {
4 ?0 F, n$ a7 ^        for (i = 0; i<upp_frame_size; i++)
! x; z# X7 _' g        {
0 S& J+ K9 W; Y1 |, Y% C, m( W- e% ], Q            if (upp_buffer_a != upp_buffer_b)+ h# j& k4 }- D0 L% m
            {
) q% u, J5 A: m7 |) i! {) j4 @4 Q                upp_error_count++;
2 d+ `( [$ B( @2 G            }. l! r0 L$ k7 |# A; c' v
        }9 h, j" V4 y- U
    }
) A7 E: k+ s  ^5 Q: S5 C4 N# m! B6 K1 Z7 ~: e1 ^1 \" Z  H" ~) a
    /* 报告通信结果*/
: Z/ n5 u# k; a% \# O    if(upp_error_count != 0)
' j/ K1 I5 q4 z" H: G* O        UARTprintf( "upp_error_count=%d\n",upp_error_count);
  d' d7 C/ Z# l/ I% Q8 ^    else* S5 ]6 b5 i" \$ z1 D6 D8 \6 d
        UARTPuts("uPP transfers complete!\n",-2);
9 \2 r% H' h; \6 O3 G- t7 D7 W" S9 l  v  o* u
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);" O6 [4 M9 s8 I$ w
    UARTGets(ch,2);! [7 J7 T4 n3 t" }8 z- J$ g$ z
    UARTPuts("\n", -2);
0 }" A: z( [% k9 x5 b9 J6 j' V, r: w* n8 e& y# p
    if(ch[0] == 'y')
2 {, t1 v6 Z" s# N    {/ R/ p; N) d& n! J/ E
        /*打印全部读到的数据*/
1 @( x, o9 t9 q; V0 F$ ?- ^/ j* D8 U( I        for(i=0; i<upp_frame_size; )+ B  L. s$ R, |
        {$ P( T, I& g' H+ f/ P% L$ P
            for(j=0; j<5; j++)0 r9 {9 q% Q9 X: w, T1 @
            {
, q( y. v0 {. V! |1 o, p2 k                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
' c3 g9 I7 W4 l3 s* [  y) y                i++;" p9 \* n$ i, c6 l" O, ?) b; ?
                //if(i >= 4096)9 \& e2 e  j. {9 Y
                //    break;
/ p# Y  m. z4 B1 E8 \) G& H% m- n  E* D# l
            }7 k0 w; k: W" Q' V3 |  J
            UARTPuts("\n",-2);
: o) A, c& h6 y. Z        }
2 [" q0 n$ D- z0 G    }+ H" o; V- m0 v  A: a8 O: M+ e' P
. A! a+ M4 X7 M, l" M  G
}

$ s9 _( S( d/ ]+ d. e

1 x4 C% v3 {( Y/ {- s
, X& s7 _) Y& ^5 W3 S+ i# _, p
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。2 m9 m* b8 j6 O4 k$ `1 o5 ~1 w

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。' n' n6 n  l7 I9 A: C9 h' x2 d





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