嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?6 J6 Q! c1 Y$ [) v
Void UPP_TASK(Void)
( B* y1 v- t  r8 S; N{
2 m. d; V2 A/ U6 e: G
4 Z* v5 V, B) |6 o    int i,j,k,target_int_count=2;: ~; W4 @  u3 J8 e
    char ch[2];
$ _! z$ }- ]5 [6 s% |* y
3 D( G: L- |( c4 G/ F2 M; d% l- [0 T0 B
1 ^2 J& S- v8 E
    upp_interrupt_count  = 0;. f$ J1 }& _/ Y9 F* X, B( {
    upp_error_count = 0;' s0 V2 V6 z, m+ `0 O

- A" E" @8 ^8 S6 y- v    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ M8 L5 l% G. [    // Initialize data buffers( f$ A2 k7 K- u' b5 a4 a! u
    for (i = 0; i < upp_frame_size; i++)
3 k$ t$ {- \* Z4 o/ d" l    {/ C( o: q( t5 r* N" M
       upp_buffer_b =i;" K2 ~1 P, g8 n/ v5 I
       upp_buffer_a = 0xDEAD;
+ H, u  v! K1 N3 _  V( a% X; {    }
- B' r  K' J/ N+ I" e" l
* C3 S/ z+ H$ [, T# `9 a/ l. }    //for(i=0;i<1024;i++)& u) n$ i% V- X8 e$ z. x( t: g
    //    temp=0;
4 y; \6 i" v* k" [4 i, X* a# y: S  a1 b; i
    //UPPReset();
' m' O* \7 F& w6 m' a5 \    /*启动UPP DMA传输*/
; q: P$ b* [' E    UARTPuts("upp_prog_dma_i\n",-2);3 Z! P, b9 P0 v$ W& r8 w& `
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  ^8 ~' U3 C: t& E
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- I# S! ~* N4 U+ t    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' _6 z( f) C5 c5 `
) B6 v8 K7 v3 D+ }
    UARTPuts("upp_prog_dma_i\n",-2);
4 l) S7 y, `' P8 a1 r    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 @6 @6 G: M, p( ^& }' T2 Q( h7 E    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& q$ h6 J+ a, v  m% `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 l  I& p7 I1 H- ?% i8 Y. P) t( Y% }: E4 B
    /*等待UPP传输完毕*// ?  B& `6 v6 V) O
    //i=0;. I% B2 ]# V9 P$ \
    //j=0;' ~" M+ i: g/ G' Z2 a! N) Z
    while (upp_interrupt_count < target_int_count && upp_error_count == 0). Z9 a2 ^5 i9 |' v  M+ B
    {% T4 l' B) B8 y  D5 C. {" D
        /*  测试UPP传输的同时操作普通DDR数据
' p& V9 e, N5 H4 l7 y        temp=i;
3 C! I* Y5 X7 U4 o& ?        i++;
# f- n$ E3 @" J( N% H        if(i==1024)
! K! X4 K. |2 w1 X! _( L+ E        {- {  Q( m( t0 X, w
            i=0;0 N! r, Q& [  K( ]
            j++;
* Q; u9 R# a& b0 ^# N        }, A) g% P. Q1 M. I2 H/ Y
        */- j5 k' l% F: X9 [2 H# R# \
, E5 {; C7 W& k
       asm(" nop");: A, J# X. H; B8 D& u! R

" ?, H& \% M- G7 d. c3 H6 l2 f0 W7 X       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);  {# j- S3 ^2 V2 K+ k
    }5 u6 [! w/ ~* \7 Q4 q: C) N

2 E' k6 I1 X8 {% s& }2 y% H    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ R& o& O, B) @( J- Z0 d    //UARTprintf( "i=%d\n",i);
  M# S) D2 c4 s9 [3 D    //UARTprintf( "j=%d\n",j);, J. f1 o: j% I8 l0 Y; p
    UARTPuts("Data mismatch in buffers.\n",-2);
4 _2 ^5 p0 F" K; p- Y+ B; a' W0 t    if (upp_interrupt_count == 2 && upp_error_count == 0)& }3 u/ }2 z& x, r7 E0 i: c
    {
2 }$ J: c0 R6 e5 b  q; f% e2 q        for (i = 0; i<upp_frame_size; i++)- s4 Y( Y% i" _
        {! I; c$ t" k& d, u
            if (upp_buffer_a != upp_buffer_b)
* x+ v, l( T5 @. S+ D5 r2 S$ ~            {& a  b9 o9 f( K. U% B
                upp_error_count++;
' u/ v! H9 O5 s: G            }/ t% V( J8 o/ }5 a
        }
" b+ A9 y# G& P( ~7 M  @; s6 x    }
9 S5 q" O/ X! ~! @6 S0 A3 j0 h# h8 }* o5 @9 Q" z
    /* 报告通信结果*/+ A- s) K5 I' i2 L+ {
    if(upp_error_count != 0)+ C3 n4 }1 |' N: E+ B5 ]1 w0 a9 p
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 g9 V( m. M( ~    else% \+ u- `- L3 w
        UARTPuts("uPP transfers complete!\n",-2);
5 D) O! w1 Y% p1 c$ `, C
5 K7 b8 t: X& I  c2 h3 H; |" z    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  I0 T' t- T9 O5 M, V" H
    UARTGets(ch,2);
$ N' M5 M$ i5 }) T7 E6 o    UARTPuts("\n", -2);
: R1 E+ `6 c* G7 m8 R# a' s1 `/ h6 L
    if(ch[0] == 'y')
; ]7 J0 ?" K, I+ R/ j& v    {
$ ^6 I1 C/ N3 D% ^: C        /*打印全部读到的数据*/
7 W4 w& z& r3 m( i# F        for(i=0; i<upp_frame_size; )
) n4 W# G+ W; t. ^        {
# H! x+ s3 l8 p8 K            for(j=0; j<5; j++)4 Q7 ^1 i$ A: h8 ^+ i4 [- d
            {
9 Z9 U3 i, a7 p1 P+ x1 s" {                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" U# S: c5 m  y: f( ?
                i++;- J$ ^- B. ~( h9 |
                //if(i >= 4096)) t5 v/ B, h% O- t
                //    break;
3 p% }$ W' O6 U+ _) ^  u$ N3 L: ?6 a! Z$ c4 k
            }3 a0 q4 R# e0 j# |0 w
            UARTPuts("\n",-2);- k/ T8 {% V/ m+ A. W) W
        }2 x& o2 E) _+ H. U6 @4 i+ s/ B
    }
" m" u9 P, n" `: A! L# e/ z& |4 M5 L
}
' F5 e* B4 H  [3 O, `& M1 V

9 c% N1 d. [6 o! c3 R/ Q/ d! Y3 l: o0 Z2 j6 l

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 O! [2 E5 Y5 [
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 K: B( y, Z( B+ m' F  [" R





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