嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! ]* T; y8 |: R2 y3 g
Void UPP_TASK(Void)
% l, O8 X9 l# E) p, _{
: X- B6 H. X9 U! T5 I' f2 I4 Y% Q) K( U
    int i,j,k,target_int_count=2;& x  G/ A! v0 a) V* S7 s8 c) v8 V3 w# _
    char ch[2];
! }+ `0 \; S) _4 j* N+ p! s" {+ ~
7 `$ l9 U/ @; w7 u& R$ ~' v. v) ~' h+ c4 A9 p7 [3 ~9 b2 b& |

8 J8 t% o3 _$ A3 m$ {$ c4 x% M0 R    upp_interrupt_count  = 0;
' p6 ]+ [6 ?5 X9 e    upp_error_count = 0;
5 Q# m, ^7 Y+ c( U# C6 S; g6 L, D% X: x; w
    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 M" M3 L( X% o: F* Y, g) w
    // Initialize data buffers. v  U6 x+ k/ J4 Q1 R, h8 X' T3 e
    for (i = 0; i < upp_frame_size; i++)( \( K, N0 v) y! w* v5 C; G
    {# Y) l# f7 x/ S; g: ^' J
       upp_buffer_b =i;& ?! K) P. O) B! F
       upp_buffer_a = 0xDEAD;+ B9 F7 O9 W$ l' l2 X3 ~2 E9 s6 E
    }
/ x0 x; V2 q6 B4 D3 h: m: C% p
: _' Y0 @7 B6 `0 c$ L0 k$ ^    //for(i=0;i<1024;i++)
7 L2 d% Z. n' O( f% V( t9 Y    //    temp=0;
  l( `- Q& G: c
: l; W" W2 \6 [    //UPPReset();7 Q+ I4 V2 t/ ]9 E
    /*启动UPP DMA传输*/
/ ~4 Q! t; }( g    UARTPuts("upp_prog_dma_i\n",-2);
7 W8 b3 F& e3 i" K$ y    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( }, Z- P' q0 |- |  B8 j/ ^" Z! m  N    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# B  W2 L* [+ M; ]/ q' {0 P
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: y0 \3 \5 f4 @
( w! l7 Z2 N+ a! Z% j) ~3 l    UARTPuts("upp_prog_dma_i\n",-2);
$ Q9 L2 s8 f6 V5 P' P    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! o1 z+ f  I  i; w7 G6 ^  D    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 x! K8 y; H4 I0 s/ U& ^( r
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 S% }: f( f9 M2 G% ~% Q
4 y2 w. x+ u. v5 `+ a( F- G( a& u$ \    /*等待UPP传输完毕*// Q( L- L3 f9 ~. i
    //i=0;! U9 \# B4 i' @9 }% o# T6 ^
    //j=0;: |( A$ Z! C0 d* ^& E/ Y) ?& i
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)0 ^4 J' D3 T# f3 H* o& \8 r* G
    {* M- \5 Y2 R$ ^& }6 }
        /*  测试UPP传输的同时操作普通DDR数据
" q/ T! O, x6 U2 M" h& L        temp=i;
) e5 O, t7 x6 e( s; X* i& ~        i++;
2 d2 V; p, I% [/ Z/ k        if(i==1024)6 C) f# }, O& l
        {
. I5 c% [. @6 G% e7 z; H            i=0;
7 G3 Y0 m" N* B0 K! [4 ^$ I+ r4 D% s            j++;. l( E6 U, Q. K# N% S- h4 s* y
        }
4 v" W, t5 R1 I9 p9 B  r        */
# Z0 G- m) P) d9 F8 `
  L1 f( V/ b) F% A! i       asm(" nop");& L" g: M' C% J  I2 _

/ ^0 Q! ^* W9 m% G0 f       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# ]" d  w) c5 k" m6 H6 p; G; ]
    }
# T- T% J  J9 y; v6 c* s# o. ]/ M) i( ^& q( }/ [# m* U$ l9 s6 v
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* S1 [2 ?4 [9 J  v+ l$ y7 u; b4 e
    //UARTprintf( "i=%d\n",i);
* j2 A& a* U0 S: M    //UARTprintf( "j=%d\n",j);
1 z2 u# j& A. F/ J' }  |" k' u    UARTPuts("Data mismatch in buffers.\n",-2);
/ X- L# H) N* _$ A5 j( L    if (upp_interrupt_count == 2 && upp_error_count == 0)  R. W5 Y( n8 q
    {6 r: O# g; Z+ p" x) F9 j: N
        for (i = 0; i<upp_frame_size; i++)
2 u% [5 d6 ~1 O# x9 J; ^' }( k' O3 k5 W        {
  n4 R( z7 ]2 I            if (upp_buffer_a != upp_buffer_b)0 n- ?1 J- F/ E
            {6 `! K3 G( i. |
                upp_error_count++;
  u* C9 p/ q% u/ q% ^5 S' X+ a) a            }
( a5 T* y4 x% K% n! |6 F        }/ L( x) w3 i  M; e& _$ @6 t
    }9 I  i5 X: ~& R1 T! }4 X. {3 m1 g

5 o' o; L) H- Y! N" E4 j  e    /* 报告通信结果*/
' ?) c2 r1 y2 ]0 A: ~8 b0 L6 f+ o    if(upp_error_count != 0)9 A; Q$ g/ a8 K2 F+ m
        UARTprintf( "upp_error_count=%d\n",upp_error_count);% M. N4 d0 C' l" X# E0 m2 |
    else
+ T& g' }5 l. {+ s( Y        UARTPuts("uPP transfers complete!\n",-2);: s: l2 t* K- n
6 P8 q0 f# w! d4 v8 N& X3 K+ A
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ z; n- J4 R: Z( Q    UARTGets(ch,2);
" F2 g# m8 f1 f$ ]0 d; H0 t4 Y    UARTPuts("\n", -2);
3 p4 `7 P' t3 `. k# s" k5 T: ?( a. ?( _- x: q5 p
    if(ch[0] == 'y')
9 S9 o6 r2 M( A/ x6 o' o+ ]    {
9 W1 K) Z2 @/ ^0 R7 x7 L        /*打印全部读到的数据*/  x+ D) V7 W9 Z8 n+ j
        for(i=0; i<upp_frame_size; )4 U. L$ \! @6 E" ?( p
        {
: K+ l; i; V$ B            for(j=0; j<5; j++)
; z) J/ k1 \' \4 p, a2 k* H            {" x" f$ T  ~$ \: q
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ g. C$ G; b7 g! N& k* d2 q3 Q
                i++;
4 l: v4 J3 e9 T. ]                //if(i >= 4096)
1 \+ x2 M* A9 P$ w# ?7 r$ Z) b. G                //    break;
+ f  E6 t% V& c; l
$ E8 F9 F4 Y6 h8 V4 h            }
; [; `% L$ D" V4 L1 t            UARTPuts("\n",-2);2 @2 G. V# }) \6 ~! Q4 k9 T( C: N
        }% Z3 t( V5 O' Z5 v
    }
6 e& g' D9 f- e; a8 d5 ^
: M6 t4 {: w5 f) I$ ^9 j# q$ T}

9 U" Q4 |& d! Z4 W7 P: A- L* R

! k+ f0 k$ g. ]. h8 N
) g, t8 Q+ G, V" f: a+ x
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' n7 v& |6 v( j& D5 J4 Z
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* Z0 ?  Q/ A$ P





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