嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) {( H2 F' c8 e. k. X2 O0 C
Void UPP_TASK(Void)
7 u8 Z& c, _0 ]; G4 K/ V0 w{# f% g* z; b. ]0 \8 i+ L

. V! \9 x: l* G* _+ m+ ^+ W    int i,j,k,target_int_count=2;
, c) _8 |$ c; x) g( a" c4 Q    char ch[2];/ g. |7 x$ I+ U; u2 V
! H" T  W. F! O7 T0 I1 R
3 t7 Y2 M* |+ G
% r+ h  |9 d4 J$ \5 J6 X; j
    upp_interrupt_count  = 0;
7 q) x6 G1 d1 d2 {! I+ U" o- y3 T& k& {    upp_error_count = 0;
4 u! I* ~4 }% Z. U7 M* e! e, F0 h3 x) q4 ^9 A! t3 c
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ U# h/ Y  O# z1 [$ e    // Initialize data buffers
8 C$ V- r9 ?3 N3 {    for (i = 0; i < upp_frame_size; i++)
) k: \: Q) e( d$ g6 d7 q    {- {' g& J" P% `& b4 i8 l
       upp_buffer_b =i;2 M& c4 [; I8 Z5 ]) j5 d5 \! ~
       upp_buffer_a = 0xDEAD;
" [! \: N% R* F7 _  h6 ^) ?! F; J    }
+ {4 j. I! M) b: o* Y7 D3 f
8 `+ N! d5 J: P# z. x    //for(i=0;i<1024;i++)+ ]- i; k  }: g4 A+ K$ n+ X
    //    temp=0;1 W& {5 [- `/ _+ I& F* f
; i0 C, ]( i- W
    //UPPReset();
7 E% x. K+ ]+ X; H) z1 q0 `0 ?    /*启动UPP DMA传输*/
( V  k4 D. C" H0 }* w    UARTPuts("upp_prog_dma_i\n",-2);! x: Q3 G+ F  T0 u4 v/ |
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  h. |, Q* [6 g2 F& o
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: z* L- f% x$ s" A# d; s0 ]" z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" {: a; ~! c3 r, r& M9 u
7 J' a  T* a# {
    UARTPuts("upp_prog_dma_i\n",-2);
* C" f! K: F1 K+ `8 [    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. _' J% X9 r* z4 C4 p: _    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: U3 x9 P5 w9 r+ [( v, P7 |& _
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% U: X/ z9 k% c5 X& E- ]; |. T2 i, h- j7 h
    /*等待UPP传输完毕*/! F0 ]: V, b3 M, O! V( G. ~# j
    //i=0;+ j6 o  m7 r; q) M: t  q! w
    //j=0;
. S4 \$ C( K8 L7 f* O    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 |) z0 v; B1 q8 L6 ?
    {
: E7 R! Y, c; I4 R& w        /*  测试UPP传输的同时操作普通DDR数据4 V2 l, ?& F& ^) M; h4 A8 }8 v; Y
        temp=i;  V2 z0 D. S% Z7 q. W
        i++;
: T- p- z$ p' b* z        if(i==1024)
1 n$ a* B0 ^) o) i        {" K  s8 s$ K( i
            i=0;
( j( X8 s  C, M9 I            j++;$ v; ]+ v( ]/ G
        }$ ]/ ]& n2 ^. B/ X5 _) L. \
        */
; v4 L1 U5 j* r1 K, x  N" {* L) ^. H+ L) l9 U/ ]( q
       asm(" nop");
6 P9 b3 D' k4 B5 k  n
' n- s2 v" p2 o  A# Z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* p" Z0 Y) I( D4 \7 ~, I  W    }% R) b" q% z* m0 X8 `; I

! j# {1 e8 ~% M. X    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  W3 e1 b+ e" p0 d+ B    //UARTprintf( "i=%d\n",i);
7 I6 g- k9 K1 `    //UARTprintf( "j=%d\n",j);( l- |4 k  ]' Q
    UARTPuts("Data mismatch in buffers.\n",-2);* }8 f' n* i& v! Q8 o* D4 h7 b
    if (upp_interrupt_count == 2 && upp_error_count == 0)* w, U0 y7 c, Y" G7 a
    {/ u5 q* `/ `2 ?
        for (i = 0; i<upp_frame_size; i++)2 ~1 k5 ^9 K4 o, q. b( ?8 P
        {7 c' D/ \' ]9 G8 a- K" @
            if (upp_buffer_a != upp_buffer_b)
; X1 ?8 `: s7 \; H4 Z% C5 C- s            {
+ Q8 g5 ^* E! z                upp_error_count++;# S' f, x- x0 {+ p% B2 g9 \/ Q
            }
/ q' Q4 }6 y9 V8 i5 V8 T        }% H6 q' u, f9 d3 a0 f. b
    }  e& Q5 i( B; C8 Z" y

' z9 [" N# b) v- J( M4 l    /* 报告通信结果*/& R5 R1 ~0 {! W3 L
    if(upp_error_count != 0)
9 f  t. S* V* D  f4 w3 F% p        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' ?" k7 S$ i, E( [6 P    else
' u7 d* Y/ [7 x* x+ \7 ?1 U        UARTPuts("uPP transfers complete!\n",-2);9 H; `' O  E0 Q9 D
8 r9 g8 f& _/ D) S9 D
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; \3 u; f  C( A! V- X
    UARTGets(ch,2);5 _. C& p3 \' B- b. Q- v
    UARTPuts("\n", -2);) }0 O( C! ~5 Z2 R8 ^
) a+ o: K# H* @1 ?. X% y9 b; o/ A
    if(ch[0] == 'y')" h0 K- |/ x# d0 W/ s- G
    {3 z) x# X+ ]. V( U& N$ d4 ?
        /*打印全部读到的数据*/% p6 }5 M3 t& O9 ]) O1 X6 z
        for(i=0; i<upp_frame_size; )
7 q* \, B0 @4 E" ?        {
+ O4 P1 {& X1 y& P5 O8 x            for(j=0; j<5; j++)
, o1 b* m2 z4 \5 Z. i7 {6 D9 U            {$ A) r+ C" f" k; R: V5 N
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);1 a& r4 X( n3 a4 d
                i++;
& J3 K# }0 o9 `8 J0 j                //if(i >= 4096)
( n/ o% e) h! R, r* p                //    break;
+ d" f, N0 c) X. Y3 V  i7 f+ |# D  f
            }
6 J  a/ L0 r1 A: a2 t( b            UARTPuts("\n",-2);
: o# C; B; x4 D  z# C9 `        }
; q7 g: g' v: V  K    }
4 \1 }- ~/ a7 K8 |( W5 B( T
3 ?6 D% v6 e* d}
& Z, l- V+ b% n0 k9 b  Z; n

+ t& e& u! ?7 T$ q6 J8 @, Q3 i
% n9 M- L# i$ f& }
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
  \: ^/ {  d. o/ H# o4 w: u
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 @" E, l( L# S1 [5 w





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