嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: q" a/ u5 C+ U# h# @
Void UPP_TASK(Void)( o( G# G( e8 V  ]  y7 H
{
& Y/ K/ ]* W7 C" S  j
8 |% r+ e# n: H1 o    int i,j,k,target_int_count=2;
0 |! L. H3 ?# E  }  B    char ch[2];6 ?4 Q, g3 h+ w* a; d3 o. Q8 a7 i
6 ?7 O. a/ t$ N4 B5 X& I1 ~
5 A- @* X1 P- O% U9 O
' M9 C: T/ g: g9 P
    upp_interrupt_count  = 0;. C8 L" h  V, a- ~7 e- @% o9 I( K
    upp_error_count = 0;
6 ~5 [" Q" M' H9 E5 D0 p) W9 b& S1 o' U( G/ x4 e4 E8 \
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
! V- \+ z0 N& g. P+ H5 L    // Initialize data buffers1 t5 u& ~* A- Q" q" K6 H
    for (i = 0; i < upp_frame_size; i++)( \5 f4 k$ O5 J
    {
% m" w8 A5 T, j       upp_buffer_b =i;
% n. h+ r6 U0 ]" U; o       upp_buffer_a = 0xDEAD;
6 a( A4 S8 d# I* J    }. k' Q* }+ f& y+ Y3 P$ y5 }

9 I% e/ G6 m* [1 W    //for(i=0;i<1024;i++)% f. |. p+ P, y/ Y/ G( X, B3 t2 o
    //    temp=0;
! _) t) k/ p1 M! w3 t' |( F3 h4 t$ U! X8 a0 {- L1 ~
    //UPPReset();6 r0 J: Z; }) h, C9 T& v
    /*启动UPP DMA传输*/
$ J2 r/ U# E6 H! p- u    UARTPuts("upp_prog_dma_i\n",-2);' E. R  x( F# h. y
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;0 ~! ^) l. J& w
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 Y3 w; @2 _# I2 K  n: M    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& d! L, O# {1 m, ]8 @1 u! I

! t6 I$ Q3 _& o: o: p    UARTPuts("upp_prog_dma_i\n",-2);4 o. a! P+ ]6 k, D1 ]5 i7 |
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 b0 h1 S8 [' U" @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 M/ O" w3 z+ t- R8 w2 W3 g# E: e9 y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: u3 P* O0 G. M5 b  P; x. e
1 w. v) A4 q4 p* w. C    /*等待UPP传输完毕*/) y+ F; r4 F, q) c
    //i=0;
* ~8 o( [9 `- M. G    //j=0;
/ U8 r- x' W1 R" b7 U    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% H' S  f" V0 _
    {. B  [* X. A% y
        /*  测试UPP传输的同时操作普通DDR数据. w, V% A6 E- t/ e) [
        temp=i;- `! X/ d( [- r; c) g2 G; q: D
        i++;
$ T  A: M" z1 m& _* {; i        if(i==1024)7 R6 D& ^6 @2 J0 E/ `* L9 M
        {) m+ K9 t: Q$ }5 j
            i=0;" f- |5 x' ]# ^# _/ }7 Y
            j++;
- p; V; Y4 G7 S& N        }
0 c* ~! c( \! y        */
1 u: a" u1 y: v1 H  u0 h
9 s" e) c7 V; \! d' o       asm(" nop");4 k5 q1 x& _. n

* b7 @5 c" |1 b" \3 X' _       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ u0 o& a  h- C5 x7 g3 x3 M    }2 n6 N$ r; c0 q% S, W" ]/ U9 X1 A
( m/ G6 V8 |( _( C
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* N; h/ d( t  A, D* o7 ~: [# A$ _    //UARTprintf( "i=%d\n",i);
& v- n# V2 N0 T' Y    //UARTprintf( "j=%d\n",j);
9 x' l' Y# `3 n+ n8 j  W    UARTPuts("Data mismatch in buffers.\n",-2);
! d- D( B6 m! ?9 {7 u3 q& ~! i    if (upp_interrupt_count == 2 && upp_error_count == 0)+ b; |4 h/ j; j+ Y, S- d& D! @
    {1 d: x( [4 S1 N! b
        for (i = 0; i<upp_frame_size; i++)
, F3 f: J" o# c# o        {
5 }. s9 z. S- [4 S, U( }            if (upp_buffer_a != upp_buffer_b)
3 m0 f: }4 d1 m" F5 _( G            {
1 B5 O* C- D7 X5 L3 V! h' L                upp_error_count++;
, Q, \& d4 W/ N% N9 o            }
. O+ ~9 w( e9 C! l5 H        }& b: b- M% H9 w2 k* a; m# L! p
    }
) _, |: D! W( M- K* O; a  v: L+ }. ?4 X- r
    /* 报告通信结果*/
9 V1 p& w4 o7 y0 l0 ~    if(upp_error_count != 0)0 b% L7 p/ `; B& i; n8 w; I8 v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);% o: [% J  B8 G! r/ L" J) q8 n' |
    else
9 K/ E. h$ Y3 D1 `: ^3 G9 o        UARTPuts("uPP transfers complete!\n",-2);1 b7 ^1 V# V& k

0 K2 R: a, M3 A4 I" K* \  z3 [    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' X( j9 a* J  |) n    UARTGets(ch,2);1 h9 V$ i3 L, q  E: D, V
    UARTPuts("\n", -2);
2 Z# y: P+ s# J* [  F
4 i+ j- e, t+ q* C    if(ch[0] == 'y')) h" R8 Q: F; ~; F
    {7 o6 ?/ {& ?' w
        /*打印全部读到的数据*/
0 y9 s1 T3 |( t) `; b! c3 B        for(i=0; i<upp_frame_size; )  H/ f5 _- I1 F  S. E& d
        {
, x3 u! s) a0 {7 `7 p            for(j=0; j<5; j++)- g2 \$ q0 g9 I- i( f; N
            {% [( m3 n  ^8 o5 |
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, W! m* V9 R) S& e  b; [% m                i++;1 g' u! X0 Q% Z# Z, j3 F2 S
                //if(i >= 4096)
% E0 F2 F. Z; |1 d/ B9 d; ]4 B                //    break;+ L( N/ f: E+ }) O* G" b" u
% Q) D. p& V9 U/ |; R
            }* L9 u& x0 T1 i5 i
            UARTPuts("\n",-2);5 t3 A' a  q3 n
        }) |/ x' V! f7 n0 q
    }$ R6 J1 z# c% y9 r7 `

* [. S7 {! c" a1 [" W0 ^  ~+ E}

5 d3 K2 o3 Z0 s8 E4 {

, A$ f9 t) g: e' U& s/ v" p$ F2 ?. S3 N% W

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 }% j$ \/ f  C% @9 W2 D  W

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. j; c/ X7 y8 |( P4 Y5 l: E




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