嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- m+ g! H, G; Z, N3 o
Void UPP_TASK(Void)7 j6 j% [* E% P$ `
{
' b8 n" v! L+ ?( ~/ O8 n5 F. y4 y  }3 h4 p/ J8 |
    int i,j,k,target_int_count=2;
) j; W1 [1 V9 {! A$ g    char ch[2];& `; V7 ~4 i7 R. ^2 w! w2 t7 j

% U- o+ L5 B7 |) m) F* L
+ b; f* F5 e" s! p% e( h) T; \; R/ x, `! o7 Y! s3 _+ d
    upp_interrupt_count  = 0;
% j' L3 e. j5 D    upp_error_count = 0;
, ~" B; w6 `, b
' \( t4 D6 T4 M+ z    UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 p% w+ I: |4 G+ x/ }$ u" z, B    // Initialize data buffers3 o9 u6 a; a! r7 ^: O( l
    for (i = 0; i < upp_frame_size; i++)
" P+ d  ~1 r0 q" p    {
( R0 D6 M9 g* v       upp_buffer_b =i;
7 H0 m' E  c) L6 z% K8 k       upp_buffer_a = 0xDEAD;
! t% w/ z  Q7 x    }
- H: O% U# J1 X4 c- T3 Q& z. D# V. X' o8 g
    //for(i=0;i<1024;i++)
; @1 |% ~- S5 c8 q; \( E    //    temp=0;3 D( \5 w  d7 x: x7 b/ {

  }6 \8 s5 v5 {2 R    //UPPReset();4 ^5 ^& T; s9 p/ r/ O* Y, Y6 u+ ]# ]
    /*启动UPP DMA传输*/
- K1 s7 \# x8 R+ a    UARTPuts("upp_prog_dma_i\n",-2);
2 Z9 H2 g8 f. |3 a    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;; c/ d9 r( |+ W, K
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 e, V/ t; N7 x    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);  H9 ~& t8 e. T) A
1 m- l: w9 }8 X& X
    UARTPuts("upp_prog_dma_i\n",-2);
' g. H2 Y& X$ A) Y2 L    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* S4 ]8 t4 ?. C% ]; U( m4 n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' b0 |. d8 ]$ @( |* N3 T/ u! A
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);. ?( q0 f8 E9 q0 }  t
% Q6 C$ g& v) P
    /*等待UPP传输完毕*/! F/ Z! [. R1 Q$ c! |0 ^
    //i=0;- b8 b/ Z& P) z( U7 z
    //j=0;
; Y7 H: g6 R" N( q    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! I4 U4 F1 J9 t( s4 @% L# N$ J    {- o8 ?( _6 j! S
        /*  测试UPP传输的同时操作普通DDR数据9 f  D. k4 T- h# s( {$ E: S+ J
        temp=i;
( B" x* M- t3 b) r$ M' i        i++;8 J7 f7 n9 T* ?& [
        if(i==1024)
" G( D$ J( Q4 ]4 w6 l& b        {6 N2 Z" T8 }; [+ N4 j
            i=0;
: F* T; s- ]3 s$ G  X' Z            j++;
! P$ d' x; L0 A7 r, ?, P! M        }
# r2 b! _+ L' v3 S4 Q( e/ t        */
6 D7 l* w, V! m2 r0 w! W* J" I( N6 Q: O; Y( T: k/ R1 |
       asm(" nop");
2 p2 {! E# m! J8 E8 ]0 t' E* {0 C) X8 t
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 L: W# P. \( A/ p; T4 L
    }$ l* l8 r( D% A  h2 O

; X* }+ o, x0 @7 u% u- M9 V, g    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 h; _+ {5 z3 {0 W& S+ A) h1 V
    //UARTprintf( "i=%d\n",i);
7 I- r" N) D4 A& t+ W    //UARTprintf( "j=%d\n",j);
3 O6 C7 k, j& g    UARTPuts("Data mismatch in buffers.\n",-2);  ]; d2 `5 H/ r7 F
    if (upp_interrupt_count == 2 && upp_error_count == 0). K: s* m& ~1 [% `" ~3 E
    {1 t( ^( L% ]$ }' c9 ?
        for (i = 0; i<upp_frame_size; i++)
2 Y5 B* g* t/ B4 o* s6 y, U  @        {
' o8 g; }7 L& Y" N; O( R            if (upp_buffer_a != upp_buffer_b), b" M3 l7 y! b4 X% |( Q$ i/ r" C* U
            {. x* D/ t5 v& a6 G) M8 P) i
                upp_error_count++;
, l2 K9 H3 z0 r/ K. y% ~5 K            }* w  }8 x* C2 t/ o) r
        }7 X2 U. \2 P) K4 @5 h8 f
    }
3 [4 r" Z2 F* a) `' H/ _3 {& Z. `( K. o
    /* 报告通信结果*/9 K% f) o* m7 J- k& ~
    if(upp_error_count != 0)
( }2 {( Q+ ~, m5 v  ~        UARTprintf( "upp_error_count=%d\n",upp_error_count);+ B. c0 S0 E# @2 f: _* N$ |4 C. A
    else4 z3 d' M! w& L0 w
        UARTPuts("uPP transfers complete!\n",-2);
- `" K( |! l8 l! t0 s2 ~& H" l$ f* O/ H) C; y; u) }0 r
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 [, U( y2 Q. E- C- C    UARTGets(ch,2);
! g3 }$ B, E& W6 |5 q! G- Q; ~    UARTPuts("\n", -2);
( ~" r3 }: A! l  T/ \; J' g5 Z% y
    if(ch[0] == 'y')$ ~  g3 V  I& n$ k% V) H6 M
    {3 W: v+ l7 s! n& i3 P  k
        /*打印全部读到的数据*/3 W( ^1 r( G6 |+ q
        for(i=0; i<upp_frame_size; )
) K3 E& }" h4 L2 N. ?3 \        {
0 s" I3 ?9 x$ x( V. }$ n3 p            for(j=0; j<5; j++)8 Y/ K5 Q. E6 L& i: W% l& {
            {* [' k! v7 a) F
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* i8 G& W6 y+ R+ ?) n$ J+ G- v                i++;( v$ R  g0 w3 J
                //if(i >= 4096); E- M  Z- A3 F: y  X
                //    break;) h/ I: d1 f, h5 w) L7 G
( }" M+ q0 g/ t' Z. U+ e
            }- v  K. U. [1 T" Q4 B- H
            UARTPuts("\n",-2);
0 p6 B% K' ?& n/ l2 k3 c        }
; h8 T6 A$ x- f9 ^    }* s; `/ U* V& [

8 f  [" o% }+ n' W6 i4 g% C- j: u}

* W1 ^5 B  h4 \3 _
3 H: A8 ^2 F3 a/ Y, x- N4 p# T

2 K2 L# @& z* z0 H6 {5 d
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ u. T! i. w$ o2 ^9 t2 n

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ L( [" d$ Q! `8 `$ c; t; z





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