嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ m5 C* W; U/ f: D+ V4 D7 n0 M
Void UPP_TASK(Void)9 r# @( `7 B3 f( M6 D
{
: i7 [: h7 v7 A) E' i4 I+ c: P/ c8 P# z- P0 |! D$ R6 l; A
    int i,j,k,target_int_count=2;
5 D0 i3 d7 }* C' Z- T    char ch[2];) \6 \4 l9 j6 Z* ?% J/ a

  Z2 |1 g) z8 X6 c$ ?; a2 _
4 |) i. p( N3 R, L5 H- P: a' {5 b: ~- n+ p" _
    upp_interrupt_count  = 0;
& g( d, J, B* S; X    upp_error_count = 0;) w! b$ B- e7 g" t5 z! l5 ~2 t
3 j: Q! ~2 ~% X7 p1 N4 Y! N1 [# I
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
% W, F' M0 n$ M    // Initialize data buffers. j4 K6 _+ ]0 q; @9 f. U: b
    for (i = 0; i < upp_frame_size; i++). y- Q/ }3 _! T5 K
    {: z  j$ E7 K$ v$ Z+ y1 z
       upp_buffer_b =i;
% K+ j: t1 Q+ x$ d- y       upp_buffer_a = 0xDEAD;8 M  e1 Z  d2 ~$ V  r
    }& Q% M& {2 j1 P- z- X

9 \" j: t8 B5 u7 Q. C7 j' x# G    //for(i=0;i<1024;i++)
6 N9 B2 t( o/ {! S( n    //    temp=0;
1 n! s7 F1 A1 ?% I$ c4 C1 x1 R% d2 B# ]6 i8 @0 O" Q; W4 S
    //UPPReset();
0 G& z8 @  ?, K* L7 M2 d5 D7 w% L    /*启动UPP DMA传输*/
3 Y3 q3 X& y' u6 t* s% v. ]    UARTPuts("upp_prog_dma_i\n",-2);: D& Q, Q9 o, c2 ?  h
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 E- A% o( M+ l
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) [9 @- N& ~' R' E/ C0 I    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  S7 V4 S  C) h9 B1 p  v3 L% H
8 L$ X/ }4 Q- s% _: Z) n9 K    UARTPuts("upp_prog_dma_i\n",-2);
2 c+ A% [# N( ?3 P4 N$ k/ t- U# n: a    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: J9 ]  g8 i7 q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. ], H) R4 e' I    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: T! M, f* @0 T7 w- H, g0 C0 k
& F' n8 g$ v+ `  U  z
    /*等待UPP传输完毕*/$ |8 e! J; u5 A2 a1 z. E
    //i=0;) f. y3 N" Q/ F0 h( r! X
    //j=0;* E' F2 {$ z7 T' b
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' w" t) [) J6 h3 |, t# b- n    {0 P6 A. s, U; `
        /*  测试UPP传输的同时操作普通DDR数据4 W' I0 F' |1 I4 a, [0 J
        temp=i;$ S) K1 m# `5 @) e
        i++;6 }9 @1 {* ~' x. h
        if(i==1024)* z: J' D; x8 E3 n3 G1 \: f
        {+ R4 E! |5 ~  a2 y
            i=0;; A( q6 w( D4 C1 n' H  d& W, A
            j++;
! [  q3 s9 c1 }  R        }- ]# f& D/ R2 h2 n
        */. S7 {: K, O, x

1 q# O6 g# s* B  ]5 d  u! J2 }! u       asm(" nop");5 n% g' D2 ^) G& {+ }$ b5 Q! L
: p; R% L7 U$ O
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);3 W% `% I* D- |3 R& p
    }
( h, C  }; R+ Y
# a) d* V8 p; _6 |    /*检查UPP传输的数据是否正确 (loopback modes only)*/% u8 E1 N  m) }2 `
    //UARTprintf( "i=%d\n",i);  {) J* p; Z5 p! R& j7 [
    //UARTprintf( "j=%d\n",j);1 w2 K+ G& [/ ~+ f; R' S% `$ U
    UARTPuts("Data mismatch in buffers.\n",-2);, O. ^& P) ]0 M3 s9 Z& v  o
    if (upp_interrupt_count == 2 && upp_error_count == 0)
; `% o6 G/ ?# v5 K    {
9 F* A# |1 k/ l- Z: H        for (i = 0; i<upp_frame_size; i++)8 ?2 j9 p3 o1 S1 c, `
        {, i- f! @9 [' t( T
            if (upp_buffer_a != upp_buffer_b)
$ ~$ r3 s2 V8 R! B  G            {
2 a) ^8 m* d4 Z( i$ V$ [                upp_error_count++;' g" R  }, O8 j$ [& \( G
            }
, o$ v2 `6 G' Z        }
; _' o: h# b$ s% n9 A+ v    }
' B- M0 j# |9 N5 e; @. i3 Q. e0 {7 B* S) Y+ M: ]( A
    /* 报告通信结果*/
& D3 W. N1 Q' R6 W/ z6 a    if(upp_error_count != 0)
6 ~% E$ x7 G9 i+ c; {: Z. K3 R% W        UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ T& r" s) d; ]& h    else1 E* B$ A$ w1 O! w: n4 I
        UARTPuts("uPP transfers complete!\n",-2);
/ V" o9 D+ Y4 }4 p6 {' f& G  A4 b
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* n% Z- j# S7 X- f( j( ?- b1 q3 Y    UARTGets(ch,2);+ I+ {1 _4 h7 S0 V  {: O1 L9 l
    UARTPuts("\n", -2);
6 g5 F# d6 j# z, J+ U- z
0 m3 y- g$ U7 b8 L5 f& B    if(ch[0] == 'y')6 J4 a# Y3 i, ], z. i
    {
* x, ]: F5 \7 i- Q+ _' a$ V        /*打印全部读到的数据*/
  Z7 S* b! A0 F5 `. |) q5 M2 U5 b        for(i=0; i<upp_frame_size; )* G4 _! W% w! Z7 I! c. C+ f9 s1 ^
        {+ t4 }- W+ E) N) y2 n8 D( ]
            for(j=0; j<5; j++)5 w3 C6 t( k' [
            {! D$ ?$ m1 r0 E2 ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
! g  d0 i- z3 G) u                i++;
% b4 x/ v$ y, x/ Z" E                //if(i >= 4096)9 B( \$ u. G( v  p% t
                //    break;% h3 F8 [' N0 a; ^; V+ n
* R5 d8 [9 D% X, g/ H1 P+ ~
            }
& J% t1 ?: r6 G6 w1 @! w0 _3 B& ^            UARTPuts("\n",-2);3 B2 z& p7 [/ [% H
        }4 A7 }" d) M) v4 H" j
    }6 z2 m& t9 `6 _% \$ k0 c+ o  h! i
$ k8 e8 y' A, J: ^6 R8 J% Q/ K4 r
}

  {1 m' g' T% X) P" O4 [& t+ `

) V9 C+ ^% Q' x- o
  r4 U1 D5 s  Y0 g* v0 o
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% n: E! p: p; b2 h9 s$ M
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 l9 u) s0 [$ z  d+ ~5 q" x




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