嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 s0 G5 H: P9 n0 t" f
Void UPP_TASK(Void)$ _! U; X6 Y9 U/ q9 E
{7 O0 U8 H0 c' j$ m) ?1 T  ~$ c

: q/ ?9 _; x7 `& P    int i,j,k,target_int_count=2;
7 ?% H- n1 n" ~' c3 M# w    char ch[2];, u, U) M; ?. r0 U# q. I* @

/ i! ~1 o& c+ i4 b( F; E) T8 h7 T/ Y. O% l% m

9 m, K" y8 ]6 g5 b/ t2 h6 L    upp_interrupt_count  = 0;
9 v$ @) g2 f" }5 N# b    upp_error_count = 0;. p1 u; H% j9 e+ P8 \
) R. j, a. z# O. G$ }" C* n+ _! @  Q
    UARTPuts("\tResetting uPP buffers...\r\n",-2);* u9 r7 J$ }" e7 [- h
    // Initialize data buffers8 q/ h$ u  j  K0 u4 E
    for (i = 0; i < upp_frame_size; i++)# b) `. d1 ~* S. ], J
    {4 e, H9 V  m1 ~! o/ D
       upp_buffer_b =i;
* M9 L4 S0 J6 B' I% t) w# I7 F6 U       upp_buffer_a = 0xDEAD;5 y" d4 a: I! ?* [. r0 |4 Y# u
    }4 k% f! ^9 W; Y/ C: c  ?
5 }) g- X3 B8 Q) k/ I# p7 N& F
    //for(i=0;i<1024;i++)4 m4 _/ m8 ]. C: h
    //    temp=0;
) M) b1 ]& r% B" ]! d4 O4 B% a6 g0 o. l) \" z. X" E
    //UPPReset();
0 D& u! W0 f* z6 d: T3 Z    /*启动UPP DMA传输*/: \% @7 h- Y9 |4 {  H! {/ C; R
    UARTPuts("upp_prog_dma_i\n",-2);' q4 {( S. Z0 B: m& {+ d
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ ?1 F3 W/ c9 j6 Y7 ^% O6 O) L
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: B) y. X, ^4 d9 R3 ?1 w  J    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% k$ h% a" l$ N3 l

1 b6 H, e  y: U; i% m; i/ v: A    UARTPuts("upp_prog_dma_i\n",-2);
( h; r+ u: s+ n: i8 k6 c( Z$ C    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 e4 u# n7 v1 A" ^: P    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 ~8 v+ Z3 {: O
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) X) k, I: P/ p
* W& ~( q% c; Q- D6 u2 `0 J    /*等待UPP传输完毕*/! S9 d# ]  }; ]* [  q7 X( H
    //i=0;
( g+ C" s/ f' T# b' }& y$ ]' o" K    //j=0;
( Q6 @; {, _# j/ j    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' v' {, j: q& ~0 S0 e! v+ {    {
7 w- ?, u. V) a9 q$ R+ N        /*  测试UPP传输的同时操作普通DDR数据* Q  `- R9 k1 p8 Y5 m/ B7 J! t" k! Y. {
        temp=i;
. i1 ]9 q/ n1 p9 M+ i        i++;
" }6 [4 N& v9 [1 f5 @- _6 H% Z        if(i==1024)) ^8 [4 A4 D% G. X2 h, y
        {* z( Q( B& s5 ^8 a2 q
            i=0;
+ x4 \- U! U0 l( W% I% e            j++;- {- X" `5 A1 d# O
        }
' A& [7 Q' G2 O        */  ?+ s- w, d" ^4 b- y0 W8 ]
- S2 d/ I3 D! M0 U
       asm(" nop");
' _) P6 f4 i. b0 }0 ^
3 c$ I$ N. S! l! c. I       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 b9 ]. D  o- y! y8 d
    }  Z5 w7 C* ?3 D, {, s
+ I: @, V3 z# h
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ S4 l/ d$ F: d9 P; {. d, G8 a2 L    //UARTprintf( "i=%d\n",i);  B2 c: |6 R; D0 V- Q9 O
    //UARTprintf( "j=%d\n",j);
% w: @$ I  I8 T7 z( S5 B, ^2 b    UARTPuts("Data mismatch in buffers.\n",-2);: _3 {7 K3 ^3 W- O
    if (upp_interrupt_count == 2 && upp_error_count == 0)
. A; D% I2 C4 {% a# R, }$ c1 z9 n    {0 w1 ]( H/ H5 H* V( J, T" y
        for (i = 0; i<upp_frame_size; i++)
1 L- ]( ?( {0 |: y- {) P3 E        {
& V  }: E# {; u            if (upp_buffer_a != upp_buffer_b)
/ {0 `* A$ w3 O3 {( J. a9 f# ]            {3 ]' J8 r% B3 k7 q* r4 R
                upp_error_count++;
9 Z5 J& C  T6 R8 _5 z) Y/ `            }
0 s4 {- M: ^5 H, \        }
! W% l! ~  O; |/ O/ S8 |    }
# ]  ~& C7 i5 _/ b
; a! e/ ?5 U4 X9 R: j    /* 报告通信结果*/+ ^  `: c- V0 i! ~! q( V6 ~- x
    if(upp_error_count != 0)% T. k" q  |. y& ?, Q" [
        UARTprintf( "upp_error_count=%d\n",upp_error_count);8 I6 h* L6 Q7 I0 N
    else0 z* }  f" L% A# n  j/ b& K1 C5 v; j
        UARTPuts("uPP transfers complete!\n",-2);
# z0 r( a" U' m, c3 ~% i
% e" E3 T% V) w3 }4 D    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( p: u& J  a! b8 n    UARTGets(ch,2);" e4 s1 T3 F1 O% W! i4 S
    UARTPuts("\n", -2);6 t1 x  W8 y0 U' Z2 \" z) ^5 M" q

$ L- S7 l1 D& s    if(ch[0] == 'y')
: ?8 F; s1 G, _" q& D' r4 Q& V    {# U" G( `% C' @5 X: S3 r- |1 H$ t
        /*打印全部读到的数据*/
: s9 F1 t" D  E- i* R: p) ?, P9 m        for(i=0; i<upp_frame_size; )0 D- O3 M( h* l# q4 m8 Y# r" C+ U
        {
$ I& [" O* x6 ^' ^' v1 w0 h            for(j=0; j<5; j++)- P7 ?9 T2 n' f2 N! A* H
            {) ]6 z7 S4 D- l6 G9 e; `! R
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 j& D1 C2 X* @. [+ @: O! @- d; l
                i++;
# s3 J: [, m$ z9 G  X. ]; Z; \, ?                //if(i >= 4096)0 D. G4 M4 p# v' {
                //    break;* Y0 ~8 d' g  I$ @0 l# m; o" R
8 I) x6 F8 k; p
            }
) K& ~* ?' \) T& ?+ `            UARTPuts("\n",-2);, V9 P# ?7 {9 ]. q8 T
        }% y  R3 h# Z4 V9 L. T8 W
    }5 |4 Y/ p: D+ m* V% H
  J# h: S% v* }% v  Q
}
: T2 @( p1 [% S( |8 S9 E, i

) T. V1 |6 z- C9 Q  P/ U
& @' V2 g, ~; d6 N% u" g. E' Y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' H& e" t, g" g
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 I: O1 _2 ~9 Z* l: q




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