嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, r' r8 f. d0 ~; c" G( k
Void UPP_TASK(Void)' U! y3 r! k$ h% ^
{
' `7 k) E9 a$ h) t- D" n1 m$ _) g) D8 w/ w. V  C* f: @5 _
    int i,j,k,target_int_count=2;
$ n; s" n: D1 m9 G) L# s    char ch[2];3 @# ?- S+ b& I  `
& y) n2 }: r6 J0 N% c  N
$ N& P! D7 }  A% Z# c

" E( u1 g" n  \    upp_interrupt_count  = 0;/ y+ o9 |5 i- d' \2 I& h/ y' c7 Z5 ]
    upp_error_count = 0;0 q/ J5 E, C: q( `, m
; _! e: a  u7 G3 _
    UARTPuts("\tResetting uPP buffers...\r\n",-2);: i/ ^. r% V! I8 v( ]; ^5 v
    // Initialize data buffers  k9 |1 p" f  y# L- e. c
    for (i = 0; i < upp_frame_size; i++)0 G$ M. j5 l: C3 K0 p5 ^
    {- A% b6 j! V- l7 t9 M0 \
       upp_buffer_b =i;
0 w/ j3 o/ k: v       upp_buffer_a = 0xDEAD;
7 K1 v1 v. n; ~# B- j3 k1 C    }5 q/ N5 X4 ^2 G" [
& G/ R: g7 u+ g
    //for(i=0;i<1024;i++)
! w. r' T" ]8 e    //    temp=0;* }; @# e' X/ {( R& {8 l

6 m2 h) H$ l" X$ B) y  I$ ~5 H    //UPPReset();* n9 H6 D1 F; b# C: x* q
    /*启动UPP DMA传输*/
& Z) z. B8 e; L) u& n' D, k    UARTPuts("upp_prog_dma_i\n",-2);
" z; |- l; z( u) Y    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 q. J. d% H" y3 a6 N    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* [- \1 `" b8 @2 D0 Y# x. E. u6 o
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  I6 U8 u* C1 \9 Y  m% p: w4 H4 q
; q1 c! W1 o8 T+ ?    UARTPuts("upp_prog_dma_i\n",-2);
7 @6 U% a" B6 Z$ H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 h; n9 z; A7 j    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; h. P- p/ `) G6 n
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" U+ B2 @2 V  C8 S; s5 a
: s( s. @4 i1 ^4 B( h! s! T3 A" M  s. R% ?
    /*等待UPP传输完毕*/2 v, p* G2 }1 d3 M. a/ ^
    //i=0;1 r4 }, d3 h* x, f. K, W1 B! L/ D
    //j=0;' I' j$ H  T+ p  D$ u
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% x. b, X. e- R# Q& L/ z$ A' F
    {# B4 b$ O  t: ^; ]$ c3 q
        /*  测试UPP传输的同时操作普通DDR数据/ u. ^' N# D9 a9 R
        temp=i;
# A& L& O3 m: l        i++;, t0 F& q4 [1 H
        if(i==1024)7 z: @' l7 o4 E
        {
, p5 V5 d; z( i' e" i. f0 g            i=0;
' M6 ]! y7 g* j% t* k3 ~  T            j++;
$ _7 C+ F7 s7 T; ?        }
* t: a, a3 f: L1 i$ R: _5 c2 t3 a* }        */- h' X( [8 d4 j6 v' k* f, l
! v0 I# J1 M% s6 P9 N
       asm(" nop");
5 K  _( a$ R  f/ r4 ]) `- L
- I# Z$ a, z1 p0 [9 v       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 z% q% n- ]( v  ~( M1 |    }
0 Z( i: z2 x$ b& H9 t/ p" ~$ ?$ C: G- u' F! j9 n& ?7 C
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
3 S2 n1 k. J) I+ g" m    //UARTprintf( "i=%d\n",i);
: l4 P2 G& |: ~; j; x    //UARTprintf( "j=%d\n",j);
/ p1 \& E8 V& I% F; s# B    UARTPuts("Data mismatch in buffers.\n",-2);
2 A/ K% P( i* C2 l. |1 T$ `    if (upp_interrupt_count == 2 && upp_error_count == 0)
* p8 B5 W+ P1 U& k/ H  Z    {7 B6 @& _9 G; Z6 h& J! M4 ^
        for (i = 0; i<upp_frame_size; i++)
! h, T: _& P8 C        {8 K$ b9 Y/ O4 K  \* z) j
            if (upp_buffer_a != upp_buffer_b)
( T; {* D7 r7 Q1 ]4 u0 W2 y3 @% O            {" K2 `9 f; S. r6 ~; ~; q
                upp_error_count++;: [& _2 ^4 `6 v+ w5 D6 U4 d8 w6 N: H
            }
, P2 J$ s. O4 {' i( U        }1 E: Q. l3 R! q* m
    }  l7 H' f& [* V6 `) x4 D6 _" a" \. x
+ F0 F+ {6 C6 M+ x
    /* 报告通信结果*/
9 ]; h0 t+ L4 g0 z, Y2 M0 z$ V/ J" y    if(upp_error_count != 0)
; ]# B- ]6 W- s; b4 t1 z        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' U5 M; K1 Q7 j: C; Y    else9 ~2 U2 u; F, i% X8 ]
        UARTPuts("uPP transfers complete!\n",-2);% P; r2 L; k: V  x6 S

( n+ T9 e3 o! X( h" x    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: y% j: A" N) V
    UARTGets(ch,2);- K+ n8 U7 b! v2 u* S6 ]
    UARTPuts("\n", -2);
  l7 M' n* j; _! X
% P4 ?1 V! {3 O( M# U    if(ch[0] == 'y')
0 j6 l! a: ]3 H4 r6 Z    {
0 R8 H0 w* |5 l8 N3 E- @6 v# b        /*打印全部读到的数据*/
. A( B  l& ^! x0 |        for(i=0; i<upp_frame_size; )
# ~# [2 K# o3 z0 f0 h2 P1 F+ ?        {
) H& ^0 H0 O# W7 b6 U7 e0 ^* R7 ^& E1 L            for(j=0; j<5; j++)+ F2 p* V* `0 L8 V8 e8 z
            {6 _: s  w3 Q: |+ p/ h% T
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ p4 D. H# F. [
                i++;
: s, h1 N2 S4 J6 R- u1 D* }9 M                //if(i >= 4096)- P2 W( M3 K+ c0 b; v# `. F
                //    break;
& H& t6 q( m' J5 [0 J8 N/ C
' ]1 t2 h$ X/ r2 s0 [            }7 s( o* {9 G  K
            UARTPuts("\n",-2);
' L. Z; k9 C* O/ T1 I        }6 V/ S; ^% v  f4 G+ I3 w1 C
    }, N* Z9 V* ?  b! r1 }0 N+ @2 K8 q2 r
& X& y, E0 v" B1 k$ t+ C
}
+ t6 d9 R0 V, o: V

% z* Z7 j" b0 {6 q! U
+ G3 p, D. a# K0 J# ?% Y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. @! y3 }& m) w' S) B+ l# y
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  m8 i9 H$ E' y' _6 q4 Y




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