嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ N( i5 B' k7 Z7 ^# h  d" Z! F; ~
Void UPP_TASK(Void)) ]% F4 S/ P. n0 d/ \4 N
{) p4 e# b1 Y/ x6 G' j# T+ P" ]

6 O) P; t! k6 j' t9 `3 x$ g    int i,j,k,target_int_count=2;
8 E) F' d. g4 O/ M* I" {5 K    char ch[2];
8 d+ C9 J# j9 D, i: ?" z
, A0 Y7 x- Y4 e* |, q2 T/ L1 b
+ g! j  M" w; P' M" i( E4 W1 O4 C4 Q! b% D6 R( h/ e8 h
    upp_interrupt_count  = 0;
9 a, U0 M5 l/ k  O    upp_error_count = 0;
9 K  X5 j  c) t7 q2 g, o2 ^6 j( r% y  ?/ l6 D$ E+ U
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( P, }6 @0 O+ B# `    // Initialize data buffers
; V! F9 F2 m* Y( \9 X' e    for (i = 0; i < upp_frame_size; i++)8 |: ~, k$ m7 @3 t3 O
    {0 X$ e0 ^- }- G, o
       upp_buffer_b =i;
5 v2 ~/ A9 C7 x       upp_buffer_a = 0xDEAD;& L/ @4 \0 e1 E2 X8 s) n5 \6 L* d$ `1 v
    }
! }" Z* u, t. K+ F' _6 H
  H. l0 Z3 s5 n, ?0 u  Z( u    //for(i=0;i<1024;i++), Y: H* O0 Y/ S4 Y9 v  K0 O& E
    //    temp=0;
4 M8 U' L) e* V# S/ i  S" |
% A: q) t) v" ~2 ?    //UPPReset();) v* A5 f( w' V; @
    /*启动UPP DMA传输*/% o: s0 _9 d2 T% W0 w
    UARTPuts("upp_prog_dma_i\n",-2);5 T9 A8 R/ B3 c; T4 T$ u
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;' E" K+ T5 R0 J
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* n6 f# ?+ I- Z& W
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' O. a3 e/ d( u- ^. a. ~/ f) I7 }& M: T4 i9 ?
    UARTPuts("upp_prog_dma_i\n",-2);. K" f' \" |5 }- _, w1 p8 _
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 F& f3 E0 O% a* m9 ]    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# h2 R' F+ L+ `6 e+ N5 D
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# W/ k: [* j7 j! ]6 B, [  b* F0 w& x2 `  g- L- E
    /*等待UPP传输完毕*/
! f6 @/ a$ C$ }9 B2 N, i2 }    //i=0;( v  S7 P8 U- i, }; r; V& ?
    //j=0;
- M, L( @& s+ c0 d    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- Q% k0 H1 Y: {. ]" w    {
) j3 j6 z% D8 s        /*  测试UPP传输的同时操作普通DDR数据
, M- o& p$ r% S* u! q" s$ s" j- L3 O8 j        temp=i;$ D' z9 R! Y+ _
        i++;2 ~/ |" f$ v" i+ M1 W1 }( B. c( x- m4 m
        if(i==1024)( O% J: ]$ D: M9 y; ~
        {
( q8 U8 o+ E9 b            i=0;
. u4 w8 K' F. C8 s" L2 l            j++;
! ~  J6 m. F# ?7 ?        }
8 u" u6 A4 c" r1 ?        */
1 q- |, \& Z2 ?8 m, p& H% q& A5 Q4 Y! R1 m3 \& J
       asm(" nop");! M7 _- N0 O3 ?0 ^- W8 V

! a) z6 c; {/ Z# l       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 C3 f" ]- I8 z2 _. ^% T! _' S    }
: @7 R& K: q: ~' ?' c% v; j, ?0 H' X5 ]  N, V+ E; G& l: X' ^
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( z- D+ s. l# N" z/ P    //UARTprintf( "i=%d\n",i);
, j9 l* ^1 v$ N    //UARTprintf( "j=%d\n",j);
$ c% n9 p5 }) C    UARTPuts("Data mismatch in buffers.\n",-2);
! [3 [3 L3 |5 _( P8 f2 r    if (upp_interrupt_count == 2 && upp_error_count == 0)
  {. O$ L7 F8 C0 D( R    {5 w# O2 E( u' S% C4 @3 J* f- g9 v6 u
        for (i = 0; i<upp_frame_size; i++)/ x( C- `7 `( _: |
        {! W  K: j/ c; E/ e) f! H- W7 G  T3 J
            if (upp_buffer_a != upp_buffer_b)
  E. [  _# X7 G( a6 @            {
( }0 T& K9 I. m                upp_error_count++;
0 T, M+ |7 F: j            }4 F# h" M3 }; M( v. |- N5 f
        }& G3 o3 F( f- w/ z& `* L
    }
  k. g6 e/ x7 U: z& F6 }/ G' C+ }! j  L  V- h! P' ~
    /* 报告通信结果*/1 L+ B+ U4 [, q: L
    if(upp_error_count != 0)
& @1 p) S) f9 p+ h) |" K        UARTprintf( "upp_error_count=%d\n",upp_error_count);( D1 b+ ?  b& [$ J* H8 Q
    else
) b! w- y; O" u& a        UARTPuts("uPP transfers complete!\n",-2);9 z- y3 B) R  ]5 \9 w* i: ?' ?
' a5 |2 M7 Z/ }4 Y+ I. X
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' j/ |% u% p" V3 m4 S1 {$ S/ y
    UARTGets(ch,2);
6 v5 s, e3 T8 D" y' Y8 R+ H    UARTPuts("\n", -2);
- B, z0 S( i  H" R6 q
! {8 p2 l% J5 n  Y4 ^    if(ch[0] == 'y')
0 J* w3 c3 J. }7 |    {
1 T# ?7 I4 N3 p        /*打印全部读到的数据*/
9 ]  ~4 f3 V' C5 Y( D        for(i=0; i<upp_frame_size; )! K7 r2 H% {+ Y3 I, `
        {
( _" g  R! V( h0 J: y            for(j=0; j<5; j++)7 M+ P/ K2 i+ y1 X
            {0 D* U& V* t5 c3 d2 w  a1 w
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! B8 p3 h& _' ]  U' r4 m- o: t
                i++;' M0 o5 q  R- r. v. e4 Q; z4 z% a! M
                //if(i >= 4096)$ a0 e2 K  }2 j2 w
                //    break;0 |* A* v$ L4 s9 t2 M% r' X
4 i8 I9 ^* |! Y2 _
            }0 V, d3 ?2 d  L4 z2 j! ~% N
            UARTPuts("\n",-2);
+ ]3 A2 L$ s: |6 V: m; c. R        }
* s0 q$ }+ n' N. s: Q    }
. e/ {0 v9 l5 ?. f% Q: _  H2 a; I" j( |
}
2 K: ~( B0 Y3 Z& Z& e6 m
) `1 w' p' |; A3 I6 Q" m- ~
) y) t" d! I) W2 e) ?

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" p& I' G( q6 |: a& W
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& z) Y# d: {$ F: i6 Z





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