嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* u1 ?0 N# i, Z1 C
Void UPP_TASK(Void)
( x4 c  k8 h/ m0 O) M{8 }( j1 l/ {" Q& C
+ v, B( c- d/ ^- g
    int i,j,k,target_int_count=2;2 ^+ L8 V5 b. T# ^' [2 Q$ W
    char ch[2];3 E2 `; ?' Z% J. @

9 p* ~5 L6 W. Y# s, c/ Q8 }
) O: g3 r- Q# H- r- E- s. N! C# b; B
    upp_interrupt_count  = 0;
2 T" w7 G5 A: X( ]( \  Y    upp_error_count = 0;
( D$ [# S  M' s  B7 }5 N
3 r  f- y$ N$ }+ N7 l/ ^" A& w    UARTPuts("\tResetting uPP buffers...\r\n",-2);- f  R- i" k# I2 a% r" J
    // Initialize data buffers0 o- A7 y- P! L. M
    for (i = 0; i < upp_frame_size; i++)- c: t. j  Z3 u& ^9 l7 l8 M
    {. }& Q4 k! D2 l
       upp_buffer_b =i;+ a# I2 Q  z: K( E
       upp_buffer_a = 0xDEAD;
( @" a% O+ R  U; I5 }4 p- s    }
, i' T/ ]9 R- ]; X. O
# v3 N% ]0 |  ]1 T4 P( Q$ M7 \6 R    //for(i=0;i<1024;i++); }; M4 z' b3 K( l1 r, K! m
    //    temp=0;
& m3 H$ G3 k  K3 x
/ I7 u" v2 g* W: L1 h8 q7 X    //UPPReset();3 C; a3 Y9 D! N
    /*启动UPP DMA传输*/6 B7 p  {. Z7 y$ z' d6 S3 L
    UARTPuts("upp_prog_dma_i\n",-2);
6 F. @* Q- O/ C: F' Y( {    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 U& R* t) D! O& F
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' m# ]4 ?' B+ N( `) B; E& `
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' n% r  X: t8 P  A6 B& {3 a' }4 t
5 K4 Y' C& e" d8 a2 {) z) x    UARTPuts("upp_prog_dma_i\n",-2);
; D% e5 H. j! R& U( Y2 [  Y    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% E! [2 P1 r  I/ u6 L
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' r. e' I( h, p2 j$ Y& l
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ A6 Y4 ?$ z' M+ i& e7 K: c
$ H5 q- \# r8 m( O! V, F: \2 Z. o    /*等待UPP传输完毕*/
) ?  r, w( l+ e. |" f. n    //i=0;" U4 \7 u  ]6 ?% Y7 _& y/ [! n
    //j=0;7 c" J! L. p4 f: R
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: o1 p% a6 _' q    {
  G4 C# Y4 j& `( c  d& r+ ~        /*  测试UPP传输的同时操作普通DDR数据4 w3 ~; q  l2 `) G4 k
        temp=i;
, o, b. P+ V- Z        i++;
) V( t4 c! P$ w        if(i==1024)
8 i( {1 H0 D, L5 p4 i2 l$ _( t        {
/ M0 h% m* n6 B2 R- w+ {: z            i=0;" c% Y5 A% V8 Y' F
            j++;
3 K" l* m) S; S% x. [& `. g5 J        }9 F& t( }% [! l4 Q' N7 g
        */+ l! G0 H( R9 e  j

- a' H! }. `6 h       asm(" nop");* l( ~3 P* C8 K
. y( s& |) R; C3 M+ i1 y/ @) O
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; V) ~% g1 Q" y( T% j9 _: N/ v    }
$ p$ E* |& |( P  I5 y+ D/ A0 M  _1 v/ ]: Y
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ Q, |+ @5 e. B  }! s  u1 p    //UARTprintf( "i=%d\n",i);( d6 ?- ^# Z: U' m
    //UARTprintf( "j=%d\n",j);
7 `) F4 l4 ]8 n. o; G) y    UARTPuts("Data mismatch in buffers.\n",-2);1 R. x9 G+ w6 R. g7 o+ v6 M
    if (upp_interrupt_count == 2 && upp_error_count == 0)2 n$ r4 `& `$ a8 M( n/ }5 x0 y
    {
) n$ j4 x5 v3 S" E; N( J9 }2 s        for (i = 0; i<upp_frame_size; i++)
( d% w/ K0 z+ ~# O        {9 p/ r' p) \7 P
            if (upp_buffer_a != upp_buffer_b)# m$ k  `" q/ o; C/ {
            {
1 \5 ~& D. j8 y& _+ ~  t) R                upp_error_count++;
1 x( `8 [2 ]9 j. J( x            }
" F' Y; {+ S3 V; p; O6 {        }
! _# n9 L2 z& n& f( ~    }
8 @7 z& f% W: G2 v$ o
6 P. z0 }/ m4 `" P    /* 报告通信结果*/
' _7 }! n3 |; ^- u    if(upp_error_count != 0)' N- Z* e' c( k8 O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 @4 @& l3 H7 q7 c& z5 c7 v
    else
1 B9 o+ c* Z7 T) j% V3 ^1 ~        UARTPuts("uPP transfers complete!\n",-2);; q9 S+ |0 t) ]
3 `, _  L0 e4 ?2 b+ Y6 b, j* m+ Y
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  n0 T& I* ^8 G/ _3 J5 x4 g/ g    UARTGets(ch,2);
+ [& E& q; @5 D: T/ f3 S    UARTPuts("\n", -2);- l! k+ b6 x, N- ]: `
2 u' _$ d8 u, x5 Q
    if(ch[0] == 'y')
% H! G$ F; K* k- e' |$ E0 _6 @1 a6 J/ R    {
7 |& w7 M2 ?, j! j: T( T        /*打印全部读到的数据*/# o( T. j+ h2 I# R0 k  s. p: c. D3 a
        for(i=0; i<upp_frame_size; )  M6 K9 Y/ W" E/ I) X) [& b; ~" l
        {, k+ a" w8 a0 t5 P/ g
            for(j=0; j<5; j++)3 v' a) t% D5 \2 x; ?9 ^; E' `
            {
& ], T0 W) V" l- s5 R* n                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- n. h4 Z) h( _* _1 A. J
                i++;  v* I  f- @  \
                //if(i >= 4096)
! l: R3 R3 E& G" g3 {7 X3 l& Y7 l                //    break;! e0 {+ G! z( N$ W( r

5 k/ W, n" |/ w& i" ]% x            }
- ^$ d- {" `- U1 [! v2 a7 e: f8 S            UARTPuts("\n",-2);# R) ^/ E6 V: o! P3 p% C5 u- m
        }
) H& A% g1 T4 d) ~    }! S2 G: W9 |& O, N
: G4 \* o4 |# S( ]; m3 H: n: ~; X
}
3 `' c0 O- v9 i
9 D* T0 x% a. w, N  {
5 `/ Q$ C: E8 V; k6 P5 a2 p

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) `( V9 I/ J! A; i( z# \

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% s) l; g; _2 |





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