嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' U' f) m  G0 |- v8 x
Void UPP_TASK(Void)
5 P" _4 Z' Z" W{+ L; d& F# ?4 T: F7 ^' h. Q5 }
% Z5 z1 ~; S% _2 k0 R
    int i,j,k,target_int_count=2;" G- G- b7 J* z7 T# R# w+ m7 ]$ p
    char ch[2];
( d4 @+ s, Z4 F% d
2 `5 C6 T, o- e6 f* R, ~7 w7 Y% y4 Q9 q/ A2 a  d

( K  j" G. e2 Z    upp_interrupt_count  = 0;
7 P/ w6 p5 e4 N8 W( u# W    upp_error_count = 0;7 |3 s  i/ h& P- Y1 I

) ^: N* R) q. y- U8 S    UARTPuts("\tResetting uPP buffers...\r\n",-2);: c  U( \3 a0 d! [+ w; P8 o) y
    // Initialize data buffers7 O+ B9 T: v- t7 \
    for (i = 0; i < upp_frame_size; i++); U/ z0 g, E; ~0 x5 O# R- Y" {
    {* x5 d! B4 k/ q- z+ t: O5 ]
       upp_buffer_b =i;- Z0 K3 S1 I6 |5 {0 d* O  h1 S7 c
       upp_buffer_a = 0xDEAD;
4 z- c8 O( |" M+ D) q$ G2 x    }
  x& U+ s) L1 C+ I- E% l3 ~+ J  I& F& L/ r; N
    //for(i=0;i<1024;i++)6 P  C. H! B+ K5 Z  ]6 l1 a
    //    temp=0;
- V; N0 u8 c* t1 z( S3 F. c( `$ l
) X4 \" g+ D7 C    //UPPReset();
# Z0 K' o  J1 k    /*启动UPP DMA传输*/. D+ [! H* U/ k+ e
    UARTPuts("upp_prog_dma_i\n",-2);
$ d/ a* l5 w+ Q7 E2 w    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; W: v& c$ U9 @+ h# b4 \    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ S3 a; [; ^4 B- o" ^    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 b5 M  e; B+ R, e$ V- R9 h0 d" E  ~! R2 V9 V/ Q7 E; L# O
    UARTPuts("upp_prog_dma_i\n",-2);9 Q" q) K1 R1 }) q1 |  D
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 w0 O8 y$ A, e7 s# Z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 `& ~) N+ A) p% I- t8 L  q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ k- T' U  {( p  ]3 m1 O& Z" n: k* `. f& r
    /*等待UPP传输完毕*// m  {4 u. M6 k0 ?# P7 ^
    //i=0;
) F/ j6 c; |! J- d9 G' R    //j=0;: Z- _# Z7 E1 b& s! ^
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)4 @+ V2 j" K/ U( A' v
    {
$ R& n& G  b, `/ y        /*  测试UPP传输的同时操作普通DDR数据
7 @* e$ R3 N4 L8 h5 i        temp=i;( {) L4 \4 }7 B, p  X8 z; g- H, {
        i++;# @4 X5 K3 s2 L4 Q  B
        if(i==1024)
$ x) d8 P9 k7 c! b5 X+ I        {$ B3 U5 B) c; A4 t9 l8 n9 T
            i=0;9 J2 S' Y" _  P% Y* ~
            j++;  O7 n9 Z9 t3 f7 r
        }8 C. C# W' h4 `  d
        */
! N+ \' o" @' V$ h( \+ S4 _
; {' V. k/ s& f       asm(" nop");8 i5 f! @$ |6 B% \
+ j# D9 i1 f+ H1 T3 }$ b; m, m
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 w6 X4 p# Q+ \6 E. t
    }
# q1 Y% E8 m+ j! u2 y
& `% f6 C8 D3 [0 Y+ o    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# ^1 b+ X! u6 w    //UARTprintf( "i=%d\n",i);
$ T  z3 n# ?4 c* O. ^8 l2 H' k    //UARTprintf( "j=%d\n",j);
) f! m  S* k% ^3 w# R0 u& V& a    UARTPuts("Data mismatch in buffers.\n",-2);
* E, @/ j: y% [6 _* A, Z    if (upp_interrupt_count == 2 && upp_error_count == 0)9 I$ w# |# \* E' s0 {
    {
& i5 h0 p$ v1 L6 J3 W0 i5 x        for (i = 0; i<upp_frame_size; i++): E* U7 \  I' P% C" M2 M/ z/ b
        {8 o4 Q9 i  N5 o  p3 j, B- f* w3 k* z) Q
            if (upp_buffer_a != upp_buffer_b)
% s# E, T" Y- K  l  O: P            {. i% [/ c! D8 T8 e
                upp_error_count++;
: k5 J/ J$ V- t3 e) Y- ]. V            }/ B: _/ S1 G4 X: B: s" {1 N
        }
1 j% a% e- |0 w/ U& b4 x# h    }
2 u$ K8 g2 i" S1 X. A: M
# i. K' {+ M: w    /* 报告通信结果*/3 S* e2 k  h0 q* C$ T# o- K7 k
    if(upp_error_count != 0)4 u! P' v3 q7 V+ r4 @
        UARTprintf( "upp_error_count=%d\n",upp_error_count);. [2 B! D) ]% j' r& G& \5 j" U" j
    else, L, U" H" N! ]
        UARTPuts("uPP transfers complete!\n",-2);* A2 a: j, _3 B$ ^3 F# m

- j& C2 W- F) D9 a) W    UARTPuts("Do you want to print all the data?(y/n)   ",-2);1 P0 Z2 d7 T: W$ G5 C
    UARTGets(ch,2);, w" b5 |7 f, _5 p- `
    UARTPuts("\n", -2);
% p5 b6 \1 d8 g0 P7 o9 H, I3 R) S9 m. `) J# c/ f* Y
    if(ch[0] == 'y')+ `0 X& \2 T7 d/ A- K4 @
    {5 u/ G" `% g+ r( _) m
        /*打印全部读到的数据*/* `. X# q# W8 U6 {2 Z
        for(i=0; i<upp_frame_size; )
: C& r7 w/ y) \2 X        {
3 a) ^9 G8 S1 `# ]            for(j=0; j<5; j++)
& L8 ~3 U* {* C# D4 \            {6 Y) c+ Q. V, m
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
: C, ^& Q6 F; Q                i++;  x7 E: {: N1 ^& l
                //if(i >= 4096)
: W5 P3 T" p) J& H; d7 ?! H                //    break;
; d, E# ]) r! a, K9 i& C+ w1 y$ d: ]9 A
            }
; w5 p% W. a% k: _$ C            UARTPuts("\n",-2);
! d7 L) j( b  L: A# a, t: ~        }
  A: D: O2 Q5 F2 \6 o    }! \( a0 \5 i, Z( z2 F8 x

1 I* l1 H+ u2 j# I}

# K! b/ Q( z1 U3 g' d

, L# ?! L, Z: j0 P4 ]8 E+ B8 u8 I5 T7 N' j% h5 [

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. X3 G5 n) P' l+ p( \. s
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" U9 t& Q. v- V( l7 U) N5 z




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