嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 q, g# }& V* i/ {& X+ W
Void UPP_TASK(Void)
& B# M9 h' ^6 B9 U# V: z% Q* a{3 z) t9 S5 b3 j( q/ t" b

& k: O: f( G  l& J    int i,j,k,target_int_count=2;- v+ Y3 {, K2 I0 z6 P. i
    char ch[2];0 }1 @+ A- |. e1 G/ p. c3 f

2 U" v/ l$ z4 c- P6 R+ D; b1 O% @  `
* c! U5 ]/ Q% Z7 U: _: \: x! _
    upp_interrupt_count  = 0;
; p  B$ G; V& Z0 R  X    upp_error_count = 0;' Q0 m8 Q/ B9 d  z2 L# f

5 G/ h+ {: j* F6 c; i: B    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# m5 ~3 W2 u  n; E2 c: W2 V    // Initialize data buffers
1 K; b* X( h: @* t' V  \; `    for (i = 0; i < upp_frame_size; i++)7 a* u. K* U1 Z: C, h
    {
3 {, g" j8 l9 N+ x. O1 V       upp_buffer_b =i;, `: q* h9 [7 W
       upp_buffer_a = 0xDEAD;% D8 `( B# J$ R& {
    }7 D9 X  W  Z6 b. Z3 @
) [# A( c4 G8 k
    //for(i=0;i<1024;i++)
; @9 t2 m1 Z. c* C: o    //    temp=0;' M) S# |7 Y4 D

$ d" {* k# S% K8 w, Y4 r    //UPPReset();7 F: q# S0 |. u& M0 G
    /*启动UPP DMA传输*/
/ O2 F& s) A0 S+ ?" x1 H9 ?    UARTPuts("upp_prog_dma_i\n",-2);
: k" A, e* i% N8 _    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* j4 K3 r& g/ C" {    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% K1 e. y) L1 [# N8 Z) u
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& e( c1 ^9 e' n6 \! B& e

- d/ O1 \. Q( D    UARTPuts("upp_prog_dma_i\n",-2);: {$ k5 _; I6 n: W/ }- v
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) O% V# t) D8 ^% k5 X5 `7 L9 O* A
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 O' D% f5 O5 P/ a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% U0 r5 K0 C' w" _& E$ f) P
- Z* m5 P1 G& P# u
    /*等待UPP传输完毕*/* y3 Y+ _% r* b- @2 ~
    //i=0;
; \/ U0 n& e' u$ C/ d9 t: H    //j=0;+ o5 o/ ^7 g  U2 Z0 ?8 u9 {
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 S$ [2 m* z$ `$ s
    {
/ q% f0 g" Y, F& j* ?) y        /*  测试UPP传输的同时操作普通DDR数据
- k$ h7 Z% Q2 {% F. ?' Z( }        temp=i;
+ c' \/ E; e/ p        i++;
1 Q" i/ ~) T3 i. x" v; V        if(i==1024)+ p# s. Z4 U" y! c$ F
        {
& c5 ], E1 K# H, L, y1 i            i=0;0 {2 m' c5 J& @3 Z9 B3 z
            j++;
* k7 ?; K& w1 K        }# B7 c  Z) u. x% P
        */
8 Z1 I% V% b, ?/ V4 [- L3 p/ b2 ^6 z1 Y1 S5 U. X5 S
       asm(" nop");: k+ ^% F  J1 y# G6 `$ j3 [. {
2 s' T) J0 a9 f6 Q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, K+ Q$ `3 u" i& H/ Z% a+ G7 c
    }0 r7 o" L0 R. @( N2 V9 X

# A5 ~2 x6 P' L; _* I7 A0 B6 |    /*检查UPP传输的数据是否正确 (loopback modes only)*/& S) p8 B/ k# `
    //UARTprintf( "i=%d\n",i);
5 _* _' M1 s  Q5 V- K  L, k/ c    //UARTprintf( "j=%d\n",j);) N  d7 `$ f; T( [" k' X
    UARTPuts("Data mismatch in buffers.\n",-2);
1 G5 g8 M( L! g1 U3 T/ Z    if (upp_interrupt_count == 2 && upp_error_count == 0)) ^2 J% t" S6 R  ]* B7 J3 z
    {8 a8 I, e* `+ ?  z
        for (i = 0; i<upp_frame_size; i++)' b8 x- ^/ h& U8 u# P
        {
: t* u  I  @2 G  ?7 u6 b0 ^            if (upp_buffer_a != upp_buffer_b)- T4 u2 d% U# V$ K! y' T
            {
7 e1 V: f& i! P- T0 K% }                upp_error_count++;
. w+ [6 Q2 w' L7 u3 ~            }
2 E7 f' u$ y' f9 l        }5 b7 J+ U% B( ]$ p" K
    }: o2 E$ b- C2 \' f

- K% }3 R* |& R( \3 T    /* 报告通信结果*/& z! m/ {/ ]. i$ D
    if(upp_error_count != 0)
6 j; e5 @% p- ?% J! \8 O1 ~        UARTprintf( "upp_error_count=%d\n",upp_error_count);. g" a- q3 |9 x: l
    else
) g) b; v1 ]! h9 b% }9 Q* C        UARTPuts("uPP transfers complete!\n",-2);! X& h  q5 H  I# g8 N+ P4 F
: S7 P0 ]8 Z# {( u" L: x* v( z
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" H+ q! z) T% Q7 k# V) [: m) W% s/ `  k    UARTGets(ch,2);
- b& h, G& @2 v) l2 F    UARTPuts("\n", -2);% {% [! v1 S! r; V4 I( H! @: G2 E

3 z4 Y$ n9 {( t5 t& K. }    if(ch[0] == 'y')% Y7 x0 V) e4 v# f5 K$ w' A4 O
    {
5 F0 \5 T1 Z/ {" X- |; _3 p        /*打印全部读到的数据*/
% S- ^6 ]% s. u- Q        for(i=0; i<upp_frame_size; )
+ Z( A- a! b0 r' P0 F$ _+ r- g; _        {1 a( P8 Z/ p9 O8 a2 e5 j( T
            for(j=0; j<5; j++)
2 U# m7 @- T5 D* \( \            {
! d- u1 h- @' H4 ~1 q                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);4 M4 ~5 `3 p- o0 ^: P4 G# `  p
                i++;
/ d# L0 [& J  u% ?6 s: M6 m+ U                //if(i >= 4096); S1 F! N$ f9 S
                //    break;
- h+ E. Q3 ^0 r2 Q
/ y5 T8 z7 |( G& H0 P" C            }' |6 t) j" R" j  }# ^2 z% M6 ]
            UARTPuts("\n",-2);4 }$ n- l$ q0 B# j: a
        }( z; F2 G! v; \9 a
    }
$ |& J$ i9 W$ K7 W6 b: ^
+ c! C- n4 E6 d" t}
: c6 S; D9 B1 s+ u

6 ^; }  r, }& }; x( n+ A
* y+ ?8 ~. u2 T/ J) u3 w1 x# Y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. e( S$ K8 ?& k3 T2 G

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' x/ n5 o1 Q0 _! Y: a0 X




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