嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 z% A0 F, ^7 v8 u
Void UPP_TASK(Void)& s3 O. J. p! I  n
{
" J, X/ o3 [: Q; V! g5 l  `; \/ |  K) p+ z
    int i,j,k,target_int_count=2;. s, t0 k0 O3 T7 c
    char ch[2];' T- w0 S, k( d

+ [+ g+ D9 M3 f0 z% E8 Z. V; W1 I0 t% @. s

$ ^/ J/ N/ O" {# ~0 }1 b    upp_interrupt_count  = 0;8 p9 B9 t1 i0 V  I
    upp_error_count = 0;/ x- Y6 d% f# S$ e# O

6 W6 e! n0 q3 @( S/ S$ M    UARTPuts("\tResetting uPP buffers...\r\n",-2);& V" y! i6 m) O6 I
    // Initialize data buffers
6 j, ^" |3 Q$ ~+ D, N& ^9 z  a    for (i = 0; i < upp_frame_size; i++)
8 G- V6 ], ]3 c" C% H    {: D2 L! Q) ?$ m7 n
       upp_buffer_b =i;
$ t& u- ~, R. m( K       upp_buffer_a = 0xDEAD;
: F$ y! g# l. k0 |' Z    }! P: G3 Z, \6 Z# m, P* v

  ?8 U/ q1 f$ [6 _2 K# Q9 H    //for(i=0;i<1024;i++)
) Y$ M' h$ @$ S2 H$ z( t    //    temp=0;
- i9 f( f* }& L; m* X+ j6 \+ Y
2 N, I, d$ N2 A    //UPPReset();
0 K$ _" j7 T0 ~    /*启动UPP DMA传输*/
! ~* N+ w4 C$ R    UARTPuts("upp_prog_dma_i\n",-2);7 \; ^$ ?: }- E3 d& g7 u2 u
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;' V7 m" }( c/ E4 _; P
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! }' H0 ?- |0 J& a; b: T
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' i3 u, {' H1 j3 \( \: M) K- l% J8 W
    UARTPuts("upp_prog_dma_i\n",-2);
: W# A& i$ q* x+ b! L1 u    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* l4 u# G2 c9 t" B' |4 }( }6 [6 b    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 _) ?$ \1 {5 R$ @- s( ~( ]
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% r% k5 R/ r3 O4 ~1 a; J8 r3 T
3 [- t) L, U! a" k9 O4 P, }    /*等待UPP传输完毕*/" X. R5 c$ X6 j4 c8 p) j
    //i=0;
2 R) y: {6 V% E% F# e7 |    //j=0;
1 v9 J8 e0 e8 D2 }" V    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! H3 I1 n3 P% e5 e& K* ^    {! e% p1 M6 b1 O; s+ y; l# A- Y5 _8 M
        /*  测试UPP传输的同时操作普通DDR数据
* v9 T% D' u% U        temp=i;1 I) n/ t, D# h; D
        i++;* g0 q/ V- z5 I/ p" x3 q( m8 {" p
        if(i==1024)2 r) {3 G9 N7 u/ R% S
        {
3 c$ ?- A* A$ S  W3 A            i=0;" y$ E  u9 i" M. `2 f/ X+ q4 g
            j++;% `7 X' m. M( \! P0 i; F) o1 A
        }" Z  y8 @0 j- f; r7 Y
        */
6 q& Z8 e0 i0 t0 [* ~( J3 U/ v- \" s/ _/ z  x0 l/ w; d" j* A
       asm(" nop");
/ w; C( T, \+ u9 |  E; `2 k! ]( y2 ~+ z' l( I/ i
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 e2 w* \7 e( H+ {4 e6 q
    }
9 P$ s* m+ t/ w/ d# w
# _9 s4 y# b4 r  y1 L+ j1 |    /*检查UPP传输的数据是否正确 (loopback modes only)*/
3 r7 Q. m8 I/ ?% W    //UARTprintf( "i=%d\n",i);; V! ?8 N; E9 V6 _' G) a% k& p
    //UARTprintf( "j=%d\n",j);' d2 {5 r7 R) V; n0 p; a
    UARTPuts("Data mismatch in buffers.\n",-2);
. V; t! y8 ]* Y) h4 _2 O    if (upp_interrupt_count == 2 && upp_error_count == 0)8 B9 j- U% O, q, w- ^
    {+ z1 N+ {0 |- o0 F  k  G
        for (i = 0; i<upp_frame_size; i++)
1 E2 Q$ e/ g# Z/ o7 ?- F' n        {) |: l: P8 a/ k+ ^/ j# G
            if (upp_buffer_a != upp_buffer_b)
9 o5 f! |& Z0 _" m4 w- W            {
0 I+ A  u, d6 `$ X                upp_error_count++;
. m3 X4 p( k- u! |! `: G2 D            }! {8 _" p4 H% N: ^
        }
! T% _0 h6 L: E. c6 s6 e3 A* j    }2 Q/ u' S! T5 I# Y4 u5 h+ n

& j$ \! f% u$ w4 Q    /* 报告通信结果*/" o& H1 H) ~9 M. v' f; a9 O; b
    if(upp_error_count != 0)
$ Q8 X9 C; C1 `$ Y; u        UARTprintf( "upp_error_count=%d\n",upp_error_count);
- |* q0 u4 x8 l  L2 h    else' J' i6 b6 V* v* v
        UARTPuts("uPP transfers complete!\n",-2);8 z9 X# B4 U) s, E) U
  f6 c. c. Y' i) [
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: l% X' T/ {/ L( K0 Q1 B& Q" _% u
    UARTGets(ch,2);1 \9 }; N) C2 M- X: `3 {" t
    UARTPuts("\n", -2);) A! T$ t( Q; N7 t2 m7 R% X
1 E% w. ^1 w4 w/ r- t
    if(ch[0] == 'y')
; `' s' s7 x* Y& E    {$ H! h1 T8 L$ D+ x! }; F) @( f
        /*打印全部读到的数据*/$ M- R4 r/ X0 L! U
        for(i=0; i<upp_frame_size; )
; O" ^2 q4 }4 f3 g: B% G6 f. ~        {
: a+ v$ t' M5 q- q/ w* D$ _  N            for(j=0; j<5; j++)7 g: U- G5 c9 V6 S% K, o
            {/ M: N4 z  Z4 D4 I2 j4 i
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# A: [4 o/ m, P1 a$ L3 z0 C                i++;
2 e# O2 g: R# P+ X                //if(i >= 4096)
6 L& y$ |- S8 Q                //    break;
) R* t, B( u' F0 L' W! y: k9 O- h3 q; q; d6 K
            }
  W3 q& E/ M: R+ l6 X            UARTPuts("\n",-2);
' R7 y# ~( R( o/ w+ H: o8 W) G        }/ n! X4 _# t' u$ b0 t( Y" x- M
    }0 u' ^% [1 M" t9 o2 g! H- p/ ^2 e. s

. f% p4 Y9 \+ m% U" z% t6 H# ~}
; J7 |- p4 D& }0 s# X; [

( A+ d( h) i  s; ~9 N1 S2 z5 z( D( E+ U" Z$ ?- {5 `9 l( _5 s

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。3 H1 N  u! L3 _# N9 U( g+ H8 x

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 |% H5 g% g8 p+ F$ t, k8 W





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