嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?' T# `- k( }4 F9 P; H1 e
Void UPP_TASK(Void)# q3 F+ r9 J# z7 [
{
$ {4 J1 M% V2 O$ Z& p% \( a7 a% ^7 C$ K7 \0 l: g- u
    int i,j,k,target_int_count=2;
" s$ n: b! J3 b  x4 }. D9 V. ?9 ?0 j    char ch[2];
! z9 I& B# Z0 O4 A3 B
' v/ f- n/ s$ \
2 q# z, u5 @  Z+ C
1 }7 a& H9 `6 I+ @2 v/ n" Q    upp_interrupt_count  = 0;
$ T3 q' M4 c& _    upp_error_count = 0;
# e/ I% I, P: [* g
9 `, p0 q- @$ n, }2 c4 D8 R: r    UARTPuts("\tResetting uPP buffers...\r\n",-2);- e4 N0 h, z# |) @8 r! R
    // Initialize data buffers
: V. k9 k4 S$ D    for (i = 0; i < upp_frame_size; i++)% M2 C* f5 ~. R) e  f  X5 ]- p' P
    {- e: v/ A6 ~% b+ g3 L# A5 Y
       upp_buffer_b =i;
/ T# g. }0 i/ C# j/ v, W       upp_buffer_a = 0xDEAD;
. T  m- W# P* |; V) t    }
; R$ ?. j9 W( D6 j  R  V! o& B8 c; ~! X  h
    //for(i=0;i<1024;i++)
3 _; I! X2 }% C4 _+ l; i$ x    //    temp=0;/ V! l2 }3 w, w4 G

! R/ ^# v9 H' Y" U; x' I( o  _    //UPPReset();; ~2 ?7 |* g7 k5 e! r6 n2 F
    /*启动UPP DMA传输*/, {9 C' z, a! t
    UARTPuts("upp_prog_dma_i\n",-2);: n) @! K) w. N8 M; @' t9 n% Q. X" V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  d8 q7 g5 w9 k) Y0 I
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  o0 L. l6 o8 x4 ]( w4 S8 @. M: E    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; L  v, `" u4 g8 y1 B

8 b  D# V2 K- g& ^' h* R- m  V    UARTPuts("upp_prog_dma_i\n",-2);, J+ w, F* R0 I( i; R- q' G; B) F
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 ]2 o9 V% W: k, B; X% S2 S& M9 S7 I    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' l/ h1 B5 L8 D7 i- S
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# }2 i) Y2 `( X+ {- P- b6 j; d
4 A  o' C5 x3 ^0 z5 C0 l+ U
    /*等待UPP传输完毕*/
/ l" Q$ ]2 A0 D* J. y+ X    //i=0;
# P2 B3 i- c' n. D8 F( q* n    //j=0;
* r" n0 s, z' R    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ M  Z# G! L) U; d( P6 ?& d7 a5 [
    {
! }8 t7 X6 A/ I& n3 j9 |1 K& y# c. U        /*  测试UPP传输的同时操作普通DDR数据
2 p! E( S* E8 f; G' L$ x        temp=i;; Q$ l6 Q! z, S  C9 g
        i++;, n1 z4 }% I3 L% W  {
        if(i==1024)
  \& j  M" V" w: u; @/ }9 P! @+ L        {
4 D6 l8 m: @. U) V0 Y% [3 i            i=0;% ?6 F# j# Z3 w
            j++;' \* h7 K! R8 k2 b, A
        }( a! P4 r% R9 e: h' z, `
        */0 [! H/ V3 A2 N- h8 E2 ~7 @, p
' J" Y& B* C. W' P, T. J
       asm(" nop");- {: E$ x- L. K3 Y* V  z) a" G9 z
+ a1 s$ I/ m' e2 T7 h$ U
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( G/ P+ `) L6 T. I    }; [/ b: y, e' r( [7 G/ [

2 j3 U" o- P  q; ]4 u, N+ Y, X    /*检查UPP传输的数据是否正确 (loopback modes only)*/# ~, l* @3 D+ t5 k8 |5 X
    //UARTprintf( "i=%d\n",i);
9 N+ v4 B, O9 q, h    //UARTprintf( "j=%d\n",j);
0 {, `. c, Y$ g* S8 d, V    UARTPuts("Data mismatch in buffers.\n",-2);* ?4 `+ J! o$ ]/ q
    if (upp_interrupt_count == 2 && upp_error_count == 0)( ^3 B7 ]3 k  G# Z
    {; m/ M0 ?: _, m3 H+ [
        for (i = 0; i<upp_frame_size; i++)" W( X, p" N3 r5 d, y
        {$ M! x7 {/ \2 g) }, X
            if (upp_buffer_a != upp_buffer_b)* l( d  g6 [% B  `) q9 y
            {& L1 [8 o5 G( f9 x! a2 W
                upp_error_count++;  Z3 `# H; q$ o$ F+ X
            }
. O5 c% Z4 w' e) F( _+ `) j        }
) p6 {* x4 X5 u: _    }  b* D# B+ G' L! n1 y5 G; {

; @9 D  {! n% F0 b& O) x* N) I2 l* C    /* 报告通信结果*/
* R6 D' I. a0 v- V6 M. h    if(upp_error_count != 0)* X2 b  j8 Q+ \7 ~2 j) c* X' s; G
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ j) ~/ Q  e* }1 p0 Z
    else
( F- R- i* w* S3 `9 x        UARTPuts("uPP transfers complete!\n",-2);9 E0 b) @: @3 P6 F7 G/ f# I

7 v+ G, d  I3 C: S4 s' W: z    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  \8 K  S# S! y' s    UARTGets(ch,2);
/ {6 N7 O. M- J$ b8 I0 k9 f    UARTPuts("\n", -2);. L5 _8 k9 U' n' l& i1 \/ J7 w
' v! [# D- u( Q# l2 `/ L* Z. m8 H8 Z
    if(ch[0] == 'y')" M. e4 u  a# k" @4 Y
    {: k! y0 ?3 V: l) `5 T/ s  m
        /*打印全部读到的数据*/
% b) S" ^" D& P8 G  Z5 A        for(i=0; i<upp_frame_size; )
) {  R' q8 G  B; `# U7 \* c! {+ _        {, X/ a+ P# s  o% r% v( b) u
            for(j=0; j<5; j++)$ K! u3 q3 L6 M4 B# t
            {2 D. A/ @8 \8 t! y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);; U! B8 v! ~: o/ X7 q
                i++;) z  H) Q6 M7 M6 \
                //if(i >= 4096)
$ ]4 {* Y- T2 c+ j, v$ R$ W6 y                //    break;" i6 j% |. T8 `9 m3 t' a$ X; q
# F& A  B* _- c( f' m
            }0 k  I. |1 A4 a5 o2 I7 A' L$ J
            UARTPuts("\n",-2);
$ ^) n' V% s% u, a8 l/ d' L        }4 r  E( H8 j7 c' p, F9 i7 U
    }
+ \# T& ~* w- W$ @+ N% H# n
& f/ i) h# k2 ?+ m9 q6 R' P}

9 Q! b7 B8 t# I  Z, ~, w; d

! S2 d. G! ^, {# n
5 i0 o, ~, |: G' R
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ i, Q' T$ B/ {9 d0 z  {  e% A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; Y6 D' E" ~2 N( _4 r




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