嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 Z7 F# {6 D( v! y  I
Void UPP_TASK(Void)* u, v- E! N; S; `3 _5 ]- @% j% S( A) e
{
, k; L9 G, h2 B& M# o7 d5 b/ d' b. ?& s- ^4 S4 j
    int i,j,k,target_int_count=2;& Q2 O. Z- {. P, U9 C* d' c
    char ch[2];
) m! _9 B6 S2 n2 D3 t. c, a! Q7 G; U2 }0 }0 \
5 b  r8 q( X' c0 D7 Q( r/ Y' s

8 s% C/ J0 ~  T4 E" T    upp_interrupt_count  = 0;% K9 q6 C5 f: K$ e* c5 S" ]
    upp_error_count = 0;. ?0 p3 \+ t; A- l8 S" a5 F

5 J, ]% Z4 O& X" o. }3 P( k    UARTPuts("\tResetting uPP buffers...\r\n",-2);- O' F. y" D" _9 f& b1 s' B5 z
    // Initialize data buffers
/ H6 h: K) `( `' n1 `* ~0 k- z    for (i = 0; i < upp_frame_size; i++)
9 }# T8 l5 X( O' @8 h, ?    {
) k" ?5 I6 V" M$ P       upp_buffer_b =i;
0 i) ]. I5 M5 B0 w, }+ O2 J       upp_buffer_a = 0xDEAD;
0 `! @& a/ f/ T/ y2 h2 S    }
2 a& E' a, N& y; X7 v1 Z; c! |) f! e1 e2 J
    //for(i=0;i<1024;i++)
% s* |/ w  t# M# a* W    //    temp=0;
8 p8 r9 @: I# V* u% z2 h/ w7 W( r3 W" w* i- l, w+ E' t
    //UPPReset();
/ ?& w' g- p( e: U1 @    /*启动UPP DMA传输*/
  C  u& I' a1 M, ~    UARTPuts("upp_prog_dma_i\n",-2);
4 [2 w, Q  e. r# ~* {7 Y$ g    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;2 G9 j6 r% U0 j/ G8 R
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 [0 u/ j+ D! a+ s
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);2 q# C% N  N2 \4 ~
: \) s! S% E) |# \" G) M% y; o
    UARTPuts("upp_prog_dma_i\n",-2);/ o( C9 n& g0 b5 S( A1 g* \- G+ e
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, H# f' K. n) C6 A( |! e: K, }$ S    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# I( X0 i3 @, L4 G, d5 Z$ C
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% h1 X- L* Y9 C4 f5 _
: H1 }/ b& a0 w    /*等待UPP传输完毕*/
3 Y7 B5 j+ I( x: }. P: t    //i=0;
- f: r; {3 O) D    //j=0;  x2 r# r/ k7 a) a7 i% L5 u4 A( c
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  q, E) I+ i: g8 L
    {
+ R. v9 L" B" ?3 x        /*  测试UPP传输的同时操作普通DDR数据7 p( G0 k' P* g7 k
        temp=i;
7 p7 q: c8 ^3 T) o7 A% W1 n        i++;7 z* P9 s- I! l, X4 g
        if(i==1024)
' j. g! c  K4 B8 i. j2 X$ y) P        {, K: V) _! r& v! ^& O
            i=0;
' S; W* P" q: R$ H            j++;0 y5 ^# b5 L5 T% J. T" f
        }
; z: ?9 u' f$ t* |3 Z        */
* A; Q4 g$ J- M2 }( k6 K' o
6 z6 t( Z6 U" v  f       asm(" nop");$ \: M, ?# z; p- `! t/ Y7 g
/ ?$ A& z7 J7 v3 v, R5 i9 L7 {
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ L3 X- h$ L" w4 Q4 B, X    }4 m" e8 i# U' d6 u" O! J& \

4 [$ y- I$ W: b1 g' f6 r6 {    /*检查UPP传输的数据是否正确 (loopback modes only)*/; h& w8 O& \" ^$ B; d
    //UARTprintf( "i=%d\n",i);% e/ n3 h$ D" D  }0 i
    //UARTprintf( "j=%d\n",j);
" p7 X* a: f/ S' x$ P    UARTPuts("Data mismatch in buffers.\n",-2);" }; v; T3 ?5 K1 u4 C( K( `2 L6 Z5 W
    if (upp_interrupt_count == 2 && upp_error_count == 0)% Y: V8 z$ W6 r, C) g
    {9 r1 h4 ]" m! A
        for (i = 0; i<upp_frame_size; i++)
6 @0 F! w: Z/ |- y4 \. e6 l        {) Z& M, |( z0 m/ I( J$ I
            if (upp_buffer_a != upp_buffer_b)# h% c/ i8 _) i# E& _7 k8 ~  a3 y
            {; y3 q! W+ c+ _# s0 g
                upp_error_count++;
. t* p+ Q2 `0 i$ w            }
6 f3 N+ w& _8 i+ b5 X! W        }
- {' C) ^, l5 ]/ U, B7 Q  |9 {6 K    }
( \. r+ ~% U/ f' |
! X! c- Y3 Q( ]( \) m8 }; b    /* 报告通信结果*/8 ]6 _1 @. Z% B3 }/ B
    if(upp_error_count != 0). V! W" v, b, \" V7 u. R1 ~9 X2 W2 b
        UARTprintf( "upp_error_count=%d\n",upp_error_count);7 c7 R. c& _) `' X! w
    else
2 T: }! I0 Y% W2 ~* n  ~0 [. b        UARTPuts("uPP transfers complete!\n",-2);8 ^) o! q- b8 x. n5 E9 F; g' ]
+ n% i$ }- e( c
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: ^8 m( ]" B$ e* z* w# B  U1 T    UARTGets(ch,2);4 O* k) S) G! Y  M3 \
    UARTPuts("\n", -2);3 \' i, n5 E( c4 y3 K1 T

, `+ g- h# X' l! d    if(ch[0] == 'y')
" ]- q" A- \9 o+ h* X6 ^    {
. P3 q/ Z; D' T) ^( b7 M( v; R+ L        /*打印全部读到的数据*/4 ~! y7 g1 j3 @% X
        for(i=0; i<upp_frame_size; )
( E( p- G2 m3 ]* M9 f; V        {
: q0 e" I& c! V5 n1 U; m' C            for(j=0; j<5; j++)
9 C- _# _  j( z) G            {
9 n$ P; t8 g: R7 ^                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( S& r; H- h& c8 ^7 S3 e0 k                i++;
- O5 [' n/ Z8 P9 i# ^) T                //if(i >= 4096)$ }" Q3 H- h; V- l& B
                //    break;
7 [3 a* K) E$ X" Y% a; |2 _- e" \) C2 v" u1 H( z0 X0 {, X$ d: D) j3 ?
            }
& E5 ~# v( f6 @% L  ]+ k            UARTPuts("\n",-2);; C: {. h! |. `; D* Y1 B% h$ a/ ~. b
        }% ?+ F% G* N+ o$ Z, U
    }* U; y2 v* U. Q7 T% d
) m' W2 G; g- q( P
}
0 e' k9 `" g8 }  e. h$ Y, b6 `

& a  C1 K3 {( K2 ^, A7 u* ]. a. R- G& F' v  X! X" D# D3 Y

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! L1 P. [, \- v/ e

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  m/ S9 {7 e  X+ n" V: a




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