嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; r* K* i7 C, v( J
Void UPP_TASK(Void)
+ U7 S4 g* L2 U& e{
1 m. H2 i% H( f* f2 n- y8 ?  a8 w% {5 L% m+ v8 w' |; ?
    int i,j,k,target_int_count=2;
% x& f3 [9 f# e- g( s    char ch[2];) w4 b  F, A) w5 `, o  R5 S

. ?9 X- ?) u0 D9 g+ |
0 |3 v8 X9 P# c0 M5 z* F2 I6 u9 y' k1 l. z
    upp_interrupt_count  = 0;# Y1 W# K( q; w- g4 W
    upp_error_count = 0;0 x/ v6 ]8 {( @7 j% ]$ C
; A4 }4 s" \5 {
    UARTPuts("\tResetting uPP buffers...\r\n",-2);( y# j% w5 u8 [. r- Y( s
    // Initialize data buffers
* @+ K3 z7 E/ k( Y) }! I    for (i = 0; i < upp_frame_size; i++)" h$ q& u4 Z% _+ Y2 V9 S/ h7 i
    {
+ @; W3 H  o  _) s8 k: h, `       upp_buffer_b =i;$ y) B/ o" R5 a& r1 x. o
       upp_buffer_a = 0xDEAD;
) B8 U3 ?: x! h) M+ [4 D( A    }& m" Y5 s. C" z1 C7 }  i

1 G) [, v$ S0 W# u    //for(i=0;i<1024;i++)1 e  h( G& O7 A* Z) b
    //    temp=0;* t3 x7 v2 i) q; E" A: @  ^+ a
6 V/ C4 v+ f4 b3 [& {3 I, J+ L
    //UPPReset();
; J7 S) I* x- p; ]    /*启动UPP DMA传输*/5 `5 r- @* l" l4 q
    UARTPuts("upp_prog_dma_i\n",-2);
9 A# Z/ t1 `6 b& s, I    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( M5 p* Q! f% `/ H' n1 u
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! a2 X9 G7 p* K
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);/ F8 ]/ |; V, i7 D7 V- a* B/ @" C

. d' J( @- W. s: t2 v    UARTPuts("upp_prog_dma_i\n",-2);
; @. u/ X' g; x) {& N3 b: H% f    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- ?, j  N* x* ^8 ^3 u+ D- ]    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  X4 ?1 R* V  x4 |! K' @
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 {; R4 i5 \. `9 N2 N8 P
- K  j. J; H3 M3 c
    /*等待UPP传输完毕*/
9 a0 _' @4 k; J# g    //i=0;
% R/ t0 B; c1 q( _    //j=0;' \6 A& P3 Z& }# W2 c
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 C( G- K5 p/ J( n' N    {
2 K1 W. g8 p6 _- N! W        /*  测试UPP传输的同时操作普通DDR数据  v* o1 g( `+ Y- P+ c
        temp=i;4 m6 }  f! J* L8 C$ z/ b
        i++;' T$ |, {' }2 T( |1 O
        if(i==1024). v1 [- C3 }8 u" O9 A6 Q' S
        {0 K+ M- f# ?3 X) H! p
            i=0;
1 L' E4 E" q7 F# a* j' X* v            j++;
* i6 B9 b! I) ~5 }        }: f1 E& T6 d, n
        */: O4 L+ o3 K5 P3 C! Y7 y* D

6 Y$ W' N' J( s: N+ K       asm(" nop");
  R' `* m7 t# }8 [  u
) E1 C9 }9 N$ t       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- y; g5 L+ U& m: h+ O0 e
    }
1 z. P! h+ p4 n% q5 g! D
$ b5 n( J' j: K3 w    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 t  Z6 v' i( k1 ^5 v$ T    //UARTprintf( "i=%d\n",i);' p0 E  J+ o& g: l
    //UARTprintf( "j=%d\n",j);
* f' M5 |/ w6 t8 S    UARTPuts("Data mismatch in buffers.\n",-2);  B# M9 Z( J  {& F
    if (upp_interrupt_count == 2 && upp_error_count == 0)
& D8 w) ]" n. r3 P5 e    {$ M; j, ~- K* b  A/ b
        for (i = 0; i<upp_frame_size; i++)
6 O; |; D0 }5 Y3 j& \% F% M        {3 @8 E4 E. }/ ~6 b$ Q# w
            if (upp_buffer_a != upp_buffer_b)
6 r2 U' p7 A) a" j  V8 t            {
. x$ o0 ^7 `# |) I: K6 }! Y1 O+ ]% f                upp_error_count++;
, D& H& _/ C- d$ e6 k( r( o            }! z5 e8 c8 j' y9 O/ P$ z
        }' _* k1 G) Q4 j; a8 H% N2 ^
    }
; G% }9 M' Z, @- P8 o# L- q* ~" h3 e) T2 ?1 |5 Y" P' f$ E
    /* 报告通信结果*/! s& v' N2 b1 e
    if(upp_error_count != 0)
- q+ z5 X* h( ~9 _: J- r- @/ n        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 }. ~0 I3 G: l& o% E    else+ N  U. `' \9 j. H4 n
        UARTPuts("uPP transfers complete!\n",-2);
" J, t7 ?5 y! k0 v3 u; G
5 v* i! A7 N4 m    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ z. D! C" Z! g* a' O( o  h) R    UARTGets(ch,2);
% G2 x1 |8 Z, T4 U8 c6 I    UARTPuts("\n", -2);
+ U; X; P7 z. U- ]6 e
8 {' p. J/ V9 Z' t    if(ch[0] == 'y')
1 ]: A0 l$ B; c0 H    {
% {& i" m+ Z8 {$ a7 z$ @( P. k        /*打印全部读到的数据*/% a9 D, ?* |2 x* f3 J
        for(i=0; i<upp_frame_size; )3 U4 ?/ f$ c) v0 t6 |
        {4 D5 D! H0 F, Y% E. y- p
            for(j=0; j<5; j++)0 {0 A1 `( s+ F3 g. |' Q
            {% U4 t4 n' }3 y% H* @* F% w& A- L
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! ?+ e. n& y" G7 Y
                i++;
0 a: O9 d% ?9 F4 g                //if(i >= 4096)
1 d( R: u3 j( D+ l+ v. N4 `  ]+ S                //    break;# D6 ?9 p; g1 Z7 o  N, U' ~
9 x; [' J" A: P' ~* H  l* {3 D$ k
            }
9 m8 q  e( s% j2 D2 v! `8 G! v, h            UARTPuts("\n",-2);
& r# e9 }/ F( S& O- l        }
7 q+ G  E" q2 ?* i! _3 l: R    }3 e. v. U' n; Y% b: d
3 j/ Y7 b# s! m& ^: X
}

, b4 q) q. [4 L$ g/ _

3 D; y# m  \# v  r% [7 A! y$ a
% s$ r3 H1 H/ r( X" }+ Q" ?
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 Z  J0 J6 a& X, D3 F
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 G" u3 L) n3 s2 Z* i/ {




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