嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
  |& b% I% O/ e+ y- x* g( M$ I
Void UPP_TASK(Void)
6 _) n. {6 c# g% d7 B: n  Y2 [' ^{& V: n# o) a6 ]
: _9 k1 O! r0 ]. q1 _% O2 j
    int i,j,k,target_int_count=2;6 _6 v  F6 g( h; U2 g3 v
    char ch[2];! Q1 F# [: _0 K0 j% u3 Q& Z. y

2 L7 Y& \; k6 J
8 m+ Y( S4 A) S1 h4 q* A5 L+ t: E7 w/ C; m
    upp_interrupt_count  = 0;3 S8 J% ?" w5 _4 H3 h
    upp_error_count = 0;& }/ r; s1 J; l6 _
! J( C7 [2 T, ^0 H1 z, _
    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 ^. S8 g3 B5 L! {: n
    // Initialize data buffers
- E0 n; S$ h/ X0 y% L    for (i = 0; i < upp_frame_size; i++)! s. R' z* d+ g+ X
    {
! z+ ^  G$ t8 a- P2 J, t) J       upp_buffer_b =i;0 i% P3 D. w0 m0 o/ J& _! `) o" c
       upp_buffer_a = 0xDEAD;
- [+ A5 ^3 n. q3 {4 h2 ^( r    }, D  n# i5 T) M5 }7 G* i& O

' E& s0 ~7 o- c  V5 w    //for(i=0;i<1024;i++)* W% G+ B0 f) S
    //    temp=0;
5 k5 B* K/ m. t. ~% n  Q/ `4 Z- [+ g# E( q
    //UPPReset();
' {, b- \- ], M5 h6 t9 t# t    /*启动UPP DMA传输*/
  E  m/ w" t5 D$ H( ?3 `& k    UARTPuts("upp_prog_dma_i\n",-2);
+ L: B% _; F$ X! J# H    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 H' d( K2 e; F' L! K/ T+ M0 _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" k0 w$ W) [. x9 x+ o% r) [. Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' N" _: E  {7 Z6 ]5 D, X( v  E! G7 Q) Y1 B  J- p, M
    UARTPuts("upp_prog_dma_i\n",-2);- K3 G# r( S( Q, K* _& `8 ^
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ x" c# e( V3 I% |3 e- R    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ Q0 `) I' Y! S' C  P; v4 z% }
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);9 E" G+ D6 ]/ n
4 ]/ o" [* a0 T7 a3 C) P3 K$ k  \
    /*等待UPP传输完毕*/
( |5 L4 W. ]% D8 y/ E    //i=0;4 b5 B; p& F* }
    //j=0;
" t3 n0 g9 n! X9 i+ R    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 u* W. b7 v5 n$ E; Y8 \
    {2 v& g  F8 Y9 B9 E( \7 X
        /*  测试UPP传输的同时操作普通DDR数据
# K5 t" f" G* ^; W+ |) ]        temp=i;1 P& D' _, t1 Z, J: _
        i++;
& v. R8 d) F; c' C        if(i==1024)
* [/ L# N4 X: d' @  A8 |* J        {
) T( L# o, {  R/ ?+ s3 z            i=0;
1 ?# l! P* @9 }4 H% j            j++;( H$ o) Z4 [1 U3 [. v- b8 B
        }) N" a9 ], T* w( |
        */
' |  N" t7 l, H3 Z2 p$ H4 N2 D# W9 F% H2 M! K9 D
       asm(" nop");' X+ {( A* e" A" N+ ~$ J8 ~
2 R  p3 @7 Q7 B) [: f
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ A3 O) S! s, Z# H4 b" f/ s    }% @( [3 |5 L# p

. A: c# U: a$ }, i* f    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( ~, i2 m2 G6 V: L    //UARTprintf( "i=%d\n",i);
9 g) @: K% Q6 V& c3 @. U    //UARTprintf( "j=%d\n",j);. }) ?9 V1 T' x9 O) i6 C) p7 h
    UARTPuts("Data mismatch in buffers.\n",-2);5 Z- m2 u, z9 |( E7 H: g
    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 ?+ ~: t/ c, o# v9 e( ?    {
& Y( t# y, g8 r        for (i = 0; i<upp_frame_size; i++)& k( u# s1 E3 ?& P8 E  d$ ]
        {
4 x, p7 [) x8 y# X* @: D* V) d            if (upp_buffer_a != upp_buffer_b)
5 S1 }2 \; e. e( i) A            {3 p8 W" ]$ C# z7 m
                upp_error_count++;% d8 z% ^+ _! U4 m5 r+ U# v
            }5 u3 D! c" o/ G
        }
4 i) }% }  n/ E- d# Q    }
. D$ r$ u/ }& @4 P# p7 A/ A5 w- l' M. f
- ^1 \  ]% b8 o( Z' C    /* 报告通信结果*/7 R9 ^9 _6 m# `! z
    if(upp_error_count != 0)
/ t8 X, l9 F" }8 Q$ p        UARTprintf( "upp_error_count=%d\n",upp_error_count);( ]( T& t2 `6 r& @9 y3 V7 x
    else
5 T* y1 J; q& F1 r: Y        UARTPuts("uPP transfers complete!\n",-2);
4 i0 Y/ U3 O& y6 E- f2 A, `' d* z* C3 F, F" a
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);# Z5 I7 U! X; A! q
    UARTGets(ch,2);
  D3 b4 x0 H5 F: h( E& L    UARTPuts("\n", -2);3 D9 D1 k" F  B/ c8 k" T0 V

2 F0 G! j( }' i2 o; e. F    if(ch[0] == 'y')
8 l" ~  `8 y& ]    {
2 c* Z" b0 ]1 |2 Q        /*打印全部读到的数据*/
) E, R. o; H* ~0 t        for(i=0; i<upp_frame_size; )
2 ~7 m& A, I6 k: o" I        {- |. A. c' {# q& A/ [1 O, C6 k. o: W) R
            for(j=0; j<5; j++)
  D( `9 ~# F9 E, ?" d0 B' S            {. T$ n2 w* e8 k3 j) d( ~3 }! X; P
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% \9 G, k/ q; @" J% z                i++;
; b: l' f( u+ q$ e8 r, Y2 n( l                //if(i >= 4096)
* |/ F; B/ g- t: @                //    break;* X* d0 V. a* @4 a1 j. O( [1 E4 r
9 ~; ?' M1 R1 V9 k2 B% q- ^* h
            }
9 [/ i0 M" p8 r/ W0 C: Y( i            UARTPuts("\n",-2);' @- J2 T* F0 E7 C- d3 B) Y
        }, A& F7 v% Z. k8 d- S' h
    }8 i  R* j$ B$ R' r
( C, s4 x/ A, p
}

' ^8 j8 p% Z5 f: }1 F
0 p) R" c/ e# z" r, A2 p
7 A8 B6 K4 X: k+ ^. m# j

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! N4 ]& [4 q& B8 `% O' C

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 a  @+ t; q3 s& H





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