嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" Y3 P! Z8 e3 B" i* A
Void UPP_TASK(Void)
: \0 P8 h/ u& d& v# X% `{8 g; N" H/ c5 R( b" A2 y

7 S4 S6 V/ W0 k7 }9 i) ~    int i,j,k,target_int_count=2;1 S* q* @, A& c  g: h/ Y
    char ch[2];% `/ `, }! J& ?

& i- u# |/ r6 J* O% S4 h6 `# Z+ l" [" s
9 v# x1 p% A9 Q. m1 [5 W
    upp_interrupt_count  = 0;
2 Q7 s$ A+ ?7 J1 v' H3 X    upp_error_count = 0;& l$ L" y; R& ?0 Z; `2 C* M, a: @
0 r8 {4 G. q# |: |0 o, B+ d/ A
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 n; U1 ]  \1 }- ?/ E4 U    // Initialize data buffers7 M3 x& H/ q$ R+ a' z" M( i0 {; L
    for (i = 0; i < upp_frame_size; i++)
! |7 I& N0 ^! C1 B# q+ Z/ P    {
2 g6 e" P3 {: R0 P) G7 z       upp_buffer_b =i;
8 v) K+ C& {* i; H0 B8 J       upp_buffer_a = 0xDEAD;
, Y, u+ o, I8 ~+ I    }  |# W7 M: k+ i4 ~0 x7 M: B6 o

# y& _' V+ Y  H5 I* p. h( a    //for(i=0;i<1024;i++)
& u5 X" f3 J2 h6 H; o7 ^0 Q4 T; I    //    temp=0;
# W7 h7 m$ c1 R& @+ r% [* |
7 Y) K( e% U0 B0 ~9 z    //UPPReset();( K( s( N9 W6 R0 C. U
    /*启动UPP DMA传输*/9 }4 p$ b3 J: o* l+ e
    UARTPuts("upp_prog_dma_i\n",-2);. s9 A/ a- o& O7 ~' I& V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;0 ?) Z6 [4 z# J2 d. y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ J. G2 A4 N  ~! z6 z4 E* E- e4 I
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. r; w' o2 F: Z' r. `- P" k
+ v* J; W4 w2 S; A8 ~1 ]    UARTPuts("upp_prog_dma_i\n",-2);
2 y1 |! e% {5 B1 D3 j7 e, R    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 V: r! v2 c3 j8 y) p$ |9 a    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ C2 g+ d  E- u+ s6 @9 f    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ n6 q7 \" i5 a$ t" b. M0 F6 i! w, S6 L5 r% x- J! d
    /*等待UPP传输完毕*/9 k+ d- W( H- M, m. R
    //i=0;
! c& \7 S* s- ^# b9 V+ E8 G" }3 e    //j=0;
; F  z3 A) p+ n( A1 n% A4 s    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; v9 E  g9 l7 m7 H5 N    {0 M$ v4 U+ j- l- _
        /*  测试UPP传输的同时操作普通DDR数据
& ?/ B/ r; {4 A. b- y5 Q7 W        temp=i;
# A4 q$ N# R" P0 n5 n        i++;
% }4 E" w- u. c! t, E) x7 J* y) f        if(i==1024)
6 }/ d/ n. Z3 [& R& c3 O# _        {
/ }* @; Y5 q) o2 f8 ]& e            i=0;4 W+ l, s* p( c. \, |' |
            j++;
5 u* H5 d$ t# U/ L) h        }
/ Z& U& r1 r; [1 q        */$ {. N  k8 U9 e) }2 S: ~) K
* p2 N7 s% s- n# b) o$ T
       asm(" nop");7 t( Y8 b% S6 v' c7 \9 o

2 J" Q* n) ]/ C, H8 M3 B( A# u- h       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) g5 T" I  S0 F2 Z" ~    }
% g! j7 Y1 C5 g# c: P5 Q7 m" f" B8 E) z9 q6 i. J
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# T9 P* _/ \6 n/ o, A    //UARTprintf( "i=%d\n",i);
7 n) T% Q$ u' @; `, _    //UARTprintf( "j=%d\n",j);
: z0 c& x. u% M6 Y' X    UARTPuts("Data mismatch in buffers.\n",-2);
1 u7 d7 K' G& a2 Q3 t0 |7 ^7 }    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 H! c- q( D/ \8 @    {
0 n$ _, [1 y: w; Y        for (i = 0; i<upp_frame_size; i++)
- u$ f# h* ?  M- h' i        {9 l/ @9 C3 U7 `9 L& `" @
            if (upp_buffer_a != upp_buffer_b)$ D  e( h% T, U  M9 i/ U
            {
& Y) D6 E. R  J, {3 ]" K8 a                upp_error_count++;  `, C4 `! |: C  ~( Q+ D! U! ^! Z+ z
            }% x% \; B5 k) d( k
        }
3 u( K/ f3 x* G7 p# ^8 J    }0 ~$ d- t- f* M* e: V" U9 _1 C# H

$ X3 B6 o+ u; I* @8 n- ^2 W    /* 报告通信结果*/) a! Z* [& ?" ?' U& l/ d' I
    if(upp_error_count != 0): G1 @5 I* B/ o7 W" k
        UARTprintf( "upp_error_count=%d\n",upp_error_count);. I! o% ?$ P$ h- m, a* c- ~+ z
    else
3 Q+ I/ m" U5 u        UARTPuts("uPP transfers complete!\n",-2);. ^2 w% h5 h2 f0 J' z1 S

2 ?. Y# t7 i, \+ g+ ^* B+ f    UARTPuts("Do you want to print all the data?(y/n)   ",-2);, v/ [0 s0 ^4 ]+ y5 J7 {) U" b7 j; Q6 N
    UARTGets(ch,2);& S5 ^, V- e) H. H+ w0 g
    UARTPuts("\n", -2);) b: C9 U1 x" T
3 i9 b/ F7 l% ~6 o* o- b% e- N
    if(ch[0] == 'y')' e+ ]; T! k6 z6 T$ a9 `
    {
( W# Z4 y5 w( W9 P        /*打印全部读到的数据*/4 f0 l( w1 _( W/ v7 ~. f4 W
        for(i=0; i<upp_frame_size; )
7 d1 I3 l% T* Q' l/ L        {* S$ ^% H$ x" y! T, Z+ o6 v
            for(j=0; j<5; j++)
7 ?% b$ \* l! ?# H            {
* D+ [8 j0 q: M+ f4 ^8 T                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
  x1 g1 J: t" t1 T, g; G: Y                i++;. Q7 A  C/ T0 A* @& Q* K3 h
                //if(i >= 4096)) [+ r$ |# H# v7 H, }2 a, @
                //    break;& r+ P, o( h5 v( I5 C5 X
  S( c8 L1 u' u& c
            }
$ Y" A2 E3 C  }/ a0 B* ^# ~            UARTPuts("\n",-2);
8 b6 g7 f: d2 u0 K& k) K& w        }
* g( M  n9 K) [# e% Y1 B- E    }
3 n2 v3 N* k+ S' ^2 K  \& a5 l
! w+ c$ G6 i* W3 ~* t}

4 ?9 p; Z; ?; U/ p7 u5 e- k2 d* f

) s" p  t3 n+ Y. ^$ \' v
8 K: O2 O7 F) i
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ {) G8 I$ ^4 y8 C5 @
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( E5 M  j" v$ U2 R1 t6 J





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