嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ W6 _' v3 ]2 n0 V
Void UPP_TASK(Void)
8 l6 b' B4 v5 j8 @- j: G7 r$ u8 s{1 J9 @! d8 n- F1 d0 U
) |6 ]7 _. I  C% X+ C. V7 }
    int i,j,k,target_int_count=2;
: @9 C, X8 }4 \: _    char ch[2];
7 Z) g2 }  c, T: ^' B7 o4 g% [. k" n: `1 b

, |) L& {4 b+ V# q6 c& z% X' V3 L
8 ?8 p3 e  O* U) o    upp_interrupt_count  = 0;
8 a) ]4 I9 k7 Y: }2 m2 i4 R! @    upp_error_count = 0;
8 x' J0 m3 |4 q" `; q; I! [
1 d4 `( O8 E. D9 x* f    UARTPuts("\tResetting uPP buffers...\r\n",-2);" C" E0 S, I/ D' D' d3 `" `
    // Initialize data buffers
9 T  A; i9 N- q4 M/ H2 Z6 j    for (i = 0; i < upp_frame_size; i++)& g, Z- Z' N% D0 s4 L/ F* P; y
    {/ _% Z( F. Q8 J1 B5 Y8 A9 }/ ^7 B
       upp_buffer_b =i;
, R  R( g0 G$ Q* L- e       upp_buffer_a = 0xDEAD;' C0 a" B- o" N" I
    }4 Y' f$ z% X8 R$ f

1 k; X' }6 X; s. r! u# ?" j    //for(i=0;i<1024;i++): `# D) L: _* O( a# c  L
    //    temp=0;
" _$ n3 V8 R$ U: x+ `
% {3 l9 H4 ?% Z1 y! p8 p6 r    //UPPReset();' j- I, y0 C" G
    /*启动UPP DMA传输*/
- T5 a- K4 _* N- i# F    UARTPuts("upp_prog_dma_i\n",-2);. \% {! U& g. B6 W+ a" g* h+ j
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 j6 o$ ]5 u; c
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 @6 d! r3 r' Z- z9 J) l6 D4 l2 S
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 @1 H5 F6 t9 n* G* V1 ^$ u; ~: x% p/ S1 ]* y5 \6 Z) x
    UARTPuts("upp_prog_dma_i\n",-2);* l3 {& h) m- F; I. V. F
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;( p7 D, T7 `. z1 i& ^
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; V6 `( g/ T( Q9 @8 I1 P2 n; Q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 m% l5 ^( b9 w  k9 z, i
3 u5 @& w& \7 k) H' a    /*等待UPP传输完毕*/6 j: Z! ?+ m5 ]! V% v
    //i=0;6 ]" O! k* |" C/ ^4 j8 A
    //j=0;9 o1 M& z; v7 V0 [
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ g! H$ m8 E1 @
    {6 M( D9 W% l8 {, j3 T
        /*  测试UPP传输的同时操作普通DDR数据7 [9 V: T; y( G( w. I
        temp=i;2 S( E, M7 }0 ]7 G% [. u8 o( R
        i++;) w; M  M' ]* n- N0 g7 ]9 _! `
        if(i==1024)2 D8 ?# J* S& c1 |* K% I
        {3 X6 n- |; o% t! r; B
            i=0;% A. |& Z$ e' M& x
            j++;
! v2 ~0 x; U/ b% y1 l# {3 ~) d        }
8 {/ u! A3 t' K' r6 ]3 ]; l        */% Q* _& A; Z" r* d+ R
+ ]1 v& ~, W8 h
       asm(" nop");0 r6 G$ _( U. ~8 W4 e

4 N7 Z1 U( N0 N4 d/ S! l1 [  o2 V       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- S$ f. s" m( T    }$ Q! K1 J# n* ^( |  j' N% P; v
  e! Q: d  u8 f, c2 k0 j
    /*检查UPP传输的数据是否正确 (loopback modes only)*/; e$ s, G# m4 \8 b9 ]0 ?
    //UARTprintf( "i=%d\n",i);+ X$ l% D+ z6 k" j- [9 n
    //UARTprintf( "j=%d\n",j);
# n0 b+ t- e# h9 I    UARTPuts("Data mismatch in buffers.\n",-2);
. |- Q  L& y  r- d0 p9 I    if (upp_interrupt_count == 2 && upp_error_count == 0)5 `& m0 }2 M" H) o
    {$ R' A/ E0 Y; |$ E
        for (i = 0; i<upp_frame_size; i++)& h2 n6 k) M* ]$ C- F) U
        {. g7 v+ `. q8 G) h+ _: D5 Q- ~
            if (upp_buffer_a != upp_buffer_b)
' s! M3 c- O  Q* h6 \$ W" y0 S7 w            {
* [  Y" R; e4 N- r6 P! R, @                upp_error_count++;' X3 F% s$ W9 ?( h
            }5 T8 o5 R! Q; p0 l( c& [/ _
        }
" F# X  r  D2 N    }
% ^* B% Q2 D* O1 c) T* p* [& ^( t. V2 f7 |' l- L
    /* 报告通信结果*/
" a( ^; T) l, F  H. M1 P% Y3 Y    if(upp_error_count != 0)* p* A' B9 d1 Z/ i1 V; Q. b( }
        UARTprintf( "upp_error_count=%d\n",upp_error_count);0 K, J5 P( p- o1 X8 v( b. W
    else
+ X: V+ D: V% q: T0 T        UARTPuts("uPP transfers complete!\n",-2);1 O- Q! G! `) Q8 ^) q
$ X4 B) A; S  ~8 c" t5 ^7 `" E
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
7 T# x0 f' {/ ?% s    UARTGets(ch,2);
6 E1 `0 J2 l! X- K2 }* N( d( \8 i    UARTPuts("\n", -2);! Q3 h. [3 u+ }5 x( k  @+ p- g+ g

! k* ^3 _" a" [' G5 a    if(ch[0] == 'y')& E0 q. u% f, k# Y4 Y* a3 n
    {- \" ?$ l% T$ s
        /*打印全部读到的数据*/( \1 P# |, y8 J4 a" |
        for(i=0; i<upp_frame_size; )
8 i2 U" J/ M8 c* {) M0 e$ G        {% ?# H3 Y. G$ K9 r% f7 Q
            for(j=0; j<5; j++)
8 k- r) p4 ~: s3 v+ e- j* y% o            {  `+ G5 ?- a9 b$ I8 c4 ^! [# H
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ C( g9 u- D( q! w                i++;! U0 K& d" ~- M0 s# V1 c
                //if(i >= 4096): W0 c- ]) e# B% {8 b; l
                //    break;
3 U: f, X& a4 O& A7 W& ?/ D& Y" O- z% n$ J6 A3 C
            }1 m+ F( s, F; M0 n
            UARTPuts("\n",-2);) y' U3 C6 r; [* B5 G' s
        }; f  R2 f, `1 k+ [7 \
    }  P7 }$ b$ s. ^8 L: x/ u' c
, |4 l  ?6 y: W/ a) I6 u2 @
}

- H% J2 S( o% A8 i+ x/ s* ^' o
- |: I9 j% f6 Q/ H& i
) _* W7 Q4 v) y. S

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. v+ O% y7 C  J, r
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ T- z. }+ r: l3 n2 A  o




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