嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- u9 j# N: z4 ~, u
Void UPP_TASK(Void)
: \, }8 E; \$ ^) X! D+ D{
0 s/ I4 B/ Q6 W5 V: L
, a( j  k* `& K    int i,j,k,target_int_count=2;
  h; B& H- [, p    char ch[2];5 s5 H6 J! g+ t8 q+ P7 o

3 r9 L' U3 l- J
' [8 `+ B0 V3 K2 g( |- k+ _4 r2 D# }) j" V
    upp_interrupt_count  = 0;
" f1 G8 i. u) c) v5 U% P8 F. u    upp_error_count = 0;
) R2 m! `% x9 {! H+ W: k- w) V3 h
, P0 e! K2 s- P7 [* e3 y9 {    UARTPuts("\tResetting uPP buffers...\r\n",-2);& h  T& L" S+ g( r
    // Initialize data buffers$ D% Q, \: C& j: Q, e5 z+ O
    for (i = 0; i < upp_frame_size; i++)* @) ?2 O! S. L# T6 w7 R8 m. i
    {# s6 a% z' b: }8 K
       upp_buffer_b =i;
) d, E& \6 n9 _& `* t, C+ h$ x5 M       upp_buffer_a = 0xDEAD;
; J, g. R3 V" Y5 G$ i+ {    }4 Y1 W. p  }9 h1 D$ t* s; Z7 t

" h. A$ U7 h! C2 Z9 l5 I; @    //for(i=0;i<1024;i++)
+ S, w* o8 z' h    //    temp=0;4 Y  E8 J2 R. N, r( _+ u

8 p! @( z8 m1 \" o- X* r; @    //UPPReset();, }. ~  }& l* ]
    /*启动UPP DMA传输*/3 s& E6 _" P: m9 r* ]
    UARTPuts("upp_prog_dma_i\n",-2);" o$ Z$ b5 c0 F+ S1 h" e
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* P$ g, T( A1 _. Y/ K; q4 z( d8 C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  r' d9 B0 w% @0 F' M2 j    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, t5 H; z' D" x/ [
& n, I: I/ @+ U& x4 U
    UARTPuts("upp_prog_dma_i\n",-2);
; {& `8 \9 U3 k4 F9 X3 _1 r8 E; I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: i! q. x7 s- |: h$ p
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* [. k( q) c! D+ m& |2 S1 R
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 J& Q2 {/ @# d# I  V( j8 @% N

- S; z$ }8 x3 m9 Y8 g( l' Y5 l7 b    /*等待UPP传输完毕*/
" }; u" G1 h6 J0 n: G' K* ^    //i=0;0 b) y  w% n5 V7 _
    //j=0;
5 c3 C. ~# N4 ~4 P7 a8 L; Z    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" }8 }7 z6 @7 _7 a5 a
    {# ?% m, [# X) f. ?
        /*  测试UPP传输的同时操作普通DDR数据/ _# C- w/ l0 ~5 y3 D
        temp=i;
0 B3 q+ a9 U# C. L% g' }% n, I        i++;
* O: w& A% ^! D5 F        if(i==1024)( K% [/ F" }! V5 s- b
        {
' I$ f9 s) q! Y2 x3 t            i=0;
+ w8 d2 O. b) {; Q            j++;5 W# t/ ]! p- r# n9 w( b$ y
        }( |7 R  N1 }: Q7 n  c8 ?- k/ _: D
        */
% i, {# m* ?/ T$ {7 q
8 s6 Q9 Z" ^  N4 ?       asm(" nop");# ?/ m/ N3 ~( \% p( f8 q6 s2 b( U

1 \2 A1 }/ q; j, X; T) x/ O8 R       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; Z2 `! E0 t+ B8 q/ i    }5 K8 ~( ^3 m5 h/ d* i
$ ]' s# c, H3 d# o3 f
    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 F  m: K, n& |- x) U1 U5 J
    //UARTprintf( "i=%d\n",i);
4 e/ C2 ^) P- G7 P2 p' r* [    //UARTprintf( "j=%d\n",j);
* C. t, r* e, |! I3 \+ ~    UARTPuts("Data mismatch in buffers.\n",-2);
( S' B& _' ~& s    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 m$ v- s: ^2 ?9 [6 y5 r4 O2 S    {1 x) b7 {% u: g' ?0 y2 F0 z
        for (i = 0; i<upp_frame_size; i++)
, {6 \! E+ `6 h. w2 }        {' V5 ?/ U) x" l
            if (upp_buffer_a != upp_buffer_b)/ l9 A2 J5 R! {5 J2 d  t9 ]
            {6 C, A( a% }# ]) i' d# \7 \( R
                upp_error_count++;' p$ ?' B1 t% o# i  I" [+ U
            }
' R0 O1 {: V* W+ _; y4 i        }' U& ]  N8 W, Y. X0 @
    }! h) n9 z2 `/ Z1 Z0 [
# T, `+ R0 t" A9 b8 G6 C
    /* 报告通信结果*/7 m3 P+ d" a( @/ d% q1 z. G
    if(upp_error_count != 0)
0 |7 Q8 C' ~; G, Z        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' P2 W+ B: }/ [- N! Z2 U3 j    else) y. I0 X& X7 ?
        UARTPuts("uPP transfers complete!\n",-2);5 r6 D: V, [* p% }* j" h" Q$ |
: m4 x% Q, w2 q7 n
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);$ r$ W( d  z! B- w* `7 t
    UARTGets(ch,2);
% e/ O& ~' B7 Q$ I& u* ]) u    UARTPuts("\n", -2);
5 z4 k6 ^8 L. F# ?( v. F( U: T0 B
3 u, u; q& n% D" a6 _% x2 E    if(ch[0] == 'y')
: [4 v' H) ?9 z* ]    {
# }; F* G/ I4 ]        /*打印全部读到的数据*/
) H2 @1 ?( x% m/ Z, X$ T2 n( s( z        for(i=0; i<upp_frame_size; ): o  N7 T2 B% q$ [: b7 x
        {4 P  e3 h3 L$ M! c/ \+ X
            for(j=0; j<5; j++)% `) l3 X3 e9 M5 Y5 a( y
            {) K( F; ]4 H) M) l& Y/ [7 x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 \6 M1 c& z# R2 {  q) I- U
                i++;
4 Q- [& a2 b- a$ i# Y9 T                //if(i >= 4096)
& Q- P  p) h2 k# u1 M3 t( Z" d                //    break;
  p: V; f( t' `& s2 {5 \0 @! u% q/ z8 Z
  n, o, Q. k) A6 w1 U3 @. J            }
, r! v& `- T" b$ i; \            UARTPuts("\n",-2);9 C. ~8 s# x3 t- Y8 Z8 }8 a. z
        }
9 a9 i% J% ^# e- ~* Y/ t6 X    }2 {5 ~) k8 {' Q( U  N  A& [
1 z. u6 L7 Q; s- k
}

/ I5 ?8 Z4 K- h& k% p3 e
( }6 ]/ N. X! G1 i

4 p: N. ?8 b+ t* l/ i: `' ]
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; d+ ?0 g/ ^# F/ `5 m7 N
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# L5 H, i" N' K' ~6 w/ w





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