嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?" t) d" r, @3 _2 ?; a. P
Void UPP_TASK(Void)
9 `- j( y8 C. h# H! r1 V  f{7 D- F& j% {  J7 n( B6 z& J

' b8 ~$ f! q4 T6 d. p4 k4 S    int i,j,k,target_int_count=2;2 o3 [/ o9 v* A# Y
    char ch[2];
# m" e0 L/ U& C  B: l% }! {6 C% k1 |: T/ I
5 T" E2 U8 I! c9 C# a! Y7 X- a' S
0 z( U! a3 x& O9 i) s
    upp_interrupt_count  = 0;
- |$ }2 Y; ^8 A# f- r" C' E$ Q    upp_error_count = 0;
+ l4 e8 N" x5 r' H7 ?% t! n# l& X- M
    UARTPuts("\tResetting uPP buffers...\r\n",-2);" {7 Z3 B* u; i
    // Initialize data buffers6 c1 \! U5 b/ ~; N2 Z; L
    for (i = 0; i < upp_frame_size; i++)
" n0 j" M+ `# p    {
$ G: {# B4 k' ?% x- r( e2 I. b       upp_buffer_b =i;
8 N3 R7 x3 L( r: K! N% p  R, z       upp_buffer_a = 0xDEAD;
) ?: X+ x2 c5 }. e( r( A# N    }
7 k& p# X& v; e2 b* _! _* c! r
- N& x% Z0 }7 A( D% r0 E' P    //for(i=0;i<1024;i++). d  a9 n- j5 a, k$ O: Q1 U6 G3 U/ B
    //    temp=0;1 M' m  n4 q4 J

4 B: P. v# }  a7 l, ]7 g    //UPPReset();" k  o" E/ k5 ~# D/ _; i
    /*启动UPP DMA传输*/
2 r% X# x4 i) \6 F4 c' ~( X    UARTPuts("upp_prog_dma_i\n",-2);
1 S1 P8 S+ f2 N    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 r5 {4 z4 P$ u  t' G8 D    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 S2 s. o$ c; i- _- w1 B
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- _- Y4 i! Q+ V! r4 @
8 W0 }- V% S) D    UARTPuts("upp_prog_dma_i\n",-2);6 D) T5 O# F9 j
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! P3 V8 L4 D- w  Q" E/ s
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. e& j+ |8 M0 ]" f    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* z$ f7 Q2 {; r2 H  [# C: `3 @! ~

: p( W4 U# P% ?" C    /*等待UPP传输完毕*/
5 a" |9 E2 d( T2 s    //i=0;  J$ Q1 ~# P. f+ H8 `; U" M; o
    //j=0;
) }8 L% i/ H) G% z9 W    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ x! V' S9 E! Z5 y2 A8 [) V+ C    {+ K0 U, R( @9 t7 [/ g+ V+ o5 E
        /*  测试UPP传输的同时操作普通DDR数据, S+ O0 T! N5 [/ R
        temp=i;
) i2 C& p% Z8 ]        i++;
0 r* y8 l7 x, O. X3 V% J; a! G        if(i==1024)
0 ~' l# l& B" J8 f        {# F7 P0 u* n9 j2 v
            i=0;( r9 v# W' N% i6 I6 O
            j++;
6 K! G- ~  |3 x! E' }+ r        }5 J, J7 [* M; j0 G, Y& [
        */
& j7 w$ U( f; C8 f( H+ H' F0 M; A  L, C# p1 `( B0 w
       asm(" nop");# ~+ T, f# @5 H: k

/ w& g. ^: {$ H6 a       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. S7 U3 m$ X8 ?* }& D1 H    }
1 n0 p# c* g/ a+ |; d. M
9 K: _8 N) ~" |/ o5 Q$ z/ K# J    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 [' o: {' [2 s: \- i% X& s    //UARTprintf( "i=%d\n",i);
0 M6 h! ?. i7 r: n    //UARTprintf( "j=%d\n",j);: ?1 X8 m8 x0 ]
    UARTPuts("Data mismatch in buffers.\n",-2);$ g6 }+ R! f% Y: q% q
    if (upp_interrupt_count == 2 && upp_error_count == 0)/ J4 v+ O1 ~8 Q0 E
    {2 K5 z& z5 y2 q, Q: k9 x; q
        for (i = 0; i<upp_frame_size; i++)' ^! Y: u) t) M- P7 ^/ A8 C
        {) R. _8 A: P* C1 {* e/ k$ F8 z
            if (upp_buffer_a != upp_buffer_b)
8 A; P" y! L7 @- \3 p            {( Z6 z+ N+ K: X, z7 ]
                upp_error_count++;
' g4 Z7 s) G& J7 U, N            }
- a- B: G$ k: d4 o1 S6 [' o        }) e) `/ ]$ O6 j9 u4 B* v
    }- F3 a0 B5 M6 i9 A6 ~. M  s

/ z+ l: Q) r: h: S    /* 报告通信结果*/0 ^0 K  i, R9 E) {8 S4 m
    if(upp_error_count != 0)
. e+ o2 T% b; @        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; g# u$ D; W6 J! V3 |* J    else
; C+ }, T! T; C4 i2 `        UARTPuts("uPP transfers complete!\n",-2);; ]6 x* o: t$ w" Q, i! t

  I: o5 ?( {% d( j; Z    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& e4 Y' Z* n) N    UARTGets(ch,2);0 L" X; G3 x( o$ o
    UARTPuts("\n", -2);. q$ C0 O4 y# q( W# y) E7 N
( t6 L8 \, l% M0 E( d
    if(ch[0] == 'y')
1 U) H* s- M8 k4 t    {
0 d. z2 F9 j' C- z        /*打印全部读到的数据*/
+ e0 \  K4 ^4 x( A1 D0 h  G        for(i=0; i<upp_frame_size; )
6 z5 S& |+ X- m; ^; N. E* Z        {# D$ L2 t( V) A
            for(j=0; j<5; j++)
5 s% C  M4 d& r* T            {3 ~, U: _) o# [
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 E) a8 p2 d) N; t' e( F) U                i++;
& L8 @4 C/ [& L- Q                //if(i >= 4096)7 f8 d! i5 a0 l: r0 w
                //    break;: e' u5 I( \- Z5 m, K1 Y3 [
" R: C- S& y8 `: H7 a& a
            }; v% j  y  S2 u, @% f
            UARTPuts("\n",-2);
/ x6 a, K) \3 q/ }$ _! M/ n$ c        }
, ^- i" C  D: c) W6 T' {' r2 F    }
3 l& B, \, q. K3 N- [2 F  D' o+ u2 p/ T& H7 `$ H
}
% a2 S6 p! K* l% Y' d
! e- W& t: d: Y) E! B8 Y2 U

# Q( g4 \9 {3 \8 ^8 B
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 S3 o( x5 |% E8 B9 _) l5 q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& |2 r+ R) k' }6 c0 F( F* c8 u




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