嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% W- c$ `% Y2 f. p8 q
Void UPP_TASK(Void)1 x" c: {+ \" F$ U1 J. m; @5 B
{
# k% K" `; v$ I& Q! p' S- d% z: ]: Y( c" |
) W# t4 R" M$ p6 ~% r# c: R$ x* ~    int i,j,k,target_int_count=2;7 Z* \# C' A. x6 F" z. {
    char ch[2];
# Q* J/ A: o9 a  o/ N8 p/ f6 ^6 ~  `" O* i, l0 M9 }

5 }$ [& c" x2 |) g  e; i
, R/ H5 o4 T) d- l6 `    upp_interrupt_count  = 0;
/ M1 n1 V. A1 R    upp_error_count = 0;
  A; {9 I6 {0 T! T& T. R5 a1 |- |( d! X1 A9 v
    UARTPuts("\tResetting uPP buffers...\r\n",-2);& g- l+ \' X# `1 p' S2 A( i7 A; c
    // Initialize data buffers
  @& ~6 T9 `' s7 M    for (i = 0; i < upp_frame_size; i++)' J) \& q" l, c
    {% `2 i; y+ W% |% N+ y: l
       upp_buffer_b =i;
& S3 a. N$ o# d% L. r: y       upp_buffer_a = 0xDEAD;# e6 d& w$ ~. ?" x$ E# U7 v5 s
    }$ H3 ^4 K8 t, G, d0 N- J

0 k1 ^1 n7 ]( [1 w/ ^    //for(i=0;i<1024;i++)
# o6 o  O# F+ {* _: i' t    //    temp=0;
0 z6 m8 [! C+ q, T' x; h. U- Y/ y" y! F/ o0 ]# c
    //UPPReset();
& c6 S; i" p. |% E: ]9 O* n    /*启动UPP DMA传输*/1 G9 e0 D  {5 z+ }6 Y
    UARTPuts("upp_prog_dma_i\n",-2);# I6 \; [( ~% b6 c; n
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ j, e7 m" [: e( O- c  x8 k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 C) W& E6 I9 {  L! q
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- c3 k# Y7 Z) ^' n# _% w9 P- E) e/ I" L* X, f; T. a9 v
    UARTPuts("upp_prog_dma_i\n",-2);
  R% k7 S% V, m5 O5 ~4 h    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- j' H( t9 n" u( R8 I' \! ?( @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, N5 T' T+ w0 ^# `5 `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ c1 R8 L1 z" [1 V; B% ?# E" C' g6 j4 e4 l2 x/ q. V6 F9 |
    /*等待UPP传输完毕*/) I/ `. H; k7 j6 _4 p) U% T
    //i=0;. d) v2 A1 X0 r( ~7 M
    //j=0;
* `" O; x% N8 V    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* e7 f# v$ J2 R% z1 D) c
    {
" ~( f+ p: a( ^: o! T) @" F        /*  测试UPP传输的同时操作普通DDR数据
3 a' u# q$ C% x8 l: a8 K4 O0 }        temp=i;. x( ~& Q- p5 f4 @
        i++;: z6 |6 ?1 j" d, W, e4 l. q
        if(i==1024)
/ s0 T# {- s' B# V6 K! o        {9 O0 K4 C3 |7 z) D& h) U( H
            i=0;
+ t5 e" J( M; m& y4 q            j++;6 u9 l4 l! Z$ K9 m# o" E: d
        }
5 b1 [- @4 |3 k6 x8 I# O. O" {        */# W- g, J9 _/ f0 P* r+ q

0 \1 h3 v4 ~0 m4 j, X. }  C       asm(" nop");
2 _# D( P5 J. q) p( E, F1 U( v3 x. \% s& b% f
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) m% X- t1 E7 Y6 o: U' j
    }
+ a' `7 Z: V) P+ I/ i: w. h4 L4 [8 d# x" E7 j: D: F4 l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/% W8 H9 B/ H1 ]
    //UARTprintf( "i=%d\n",i);
5 g. k7 e- z$ S- N, U# s2 `    //UARTprintf( "j=%d\n",j);3 T! F7 s3 i5 e  J: E- M
    UARTPuts("Data mismatch in buffers.\n",-2);# Z: W! }  Y; L* S
    if (upp_interrupt_count == 2 && upp_error_count == 0)  O! m" O, J% J' H$ A+ V  @1 }' ~/ x
    {( t4 A4 M9 K0 y, @  M* x* G* b2 O
        for (i = 0; i<upp_frame_size; i++)
& H; s9 O& ~% V1 ^  K3 s) L        {! b6 J7 z7 h0 i; E9 N
            if (upp_buffer_a != upp_buffer_b)
9 m/ P) \- c* a" X# M' _7 m            {5 z3 g- \# Y; R# F3 v  q9 h
                upp_error_count++;
+ B/ [. P& U: Y7 X! L8 c( w9 u            }( ^! k* [, t7 k$ t
        }" Y4 Q8 X9 I* u
    }
" Z, H8 C7 f. p: a2 P! h* d2 [$ f$ ~5 Q1 J* E" _
    /* 报告通信结果*/
- t! X( x7 U0 T8 m+ m    if(upp_error_count != 0)
; D4 k* ]& _! I+ Q" n        UARTprintf( "upp_error_count=%d\n",upp_error_count);% N) o0 P3 |1 W
    else( v  @3 ^0 d4 @8 ~
        UARTPuts("uPP transfers complete!\n",-2);
, M; D% E5 B! Z% K% j% {3 j2 h6 t
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' q- B. B' N0 u4 u6 i0 N    UARTGets(ch,2);" B# B% H0 H5 x9 h+ h* y4 w+ `
    UARTPuts("\n", -2);! n5 x2 Z; T3 V! ?
: d% y( r+ O, w% m: ?. a. l7 b
    if(ch[0] == 'y')- l3 V6 \; c7 z- }
    {
( F$ Z* q6 e$ J: k' O- ~$ s* d        /*打印全部读到的数据*/; ~* S: f  M7 ^+ j" W
        for(i=0; i<upp_frame_size; )
& A. e. S& L; Z6 E8 K8 f6 h, i        {! X- o! p7 U( O3 q; C- ^% g% ?3 y
            for(j=0; j<5; j++)
; A9 E8 ?2 F0 J7 \1 W/ e            {- b  b5 l  M' F! A, Q
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
6 ]; E) s$ r+ B1 R                i++;
2 G+ ^) G% L9 H8 P7 ~5 {& b. A5 B7 j                //if(i >= 4096)1 f0 d+ M. l: `% X  }, K. b
                //    break;% J1 m: i. Y) h. b% \
$ L* w8 Z9 A2 x( I6 P
            }
  `( t! P( i! x0 ?1 O$ I- U& b+ @/ N            UARTPuts("\n",-2);7 o" A' v: ~, ~) d& ^
        }' L+ P7 z& h5 M$ i! D
    }3 X( w- C) v4 s' y" \2 f2 c$ U
( F6 k! T& Q  ?* M0 s
}
5 G+ j+ ]" q6 {% z2 C
& t& g* d4 q: _, h2 \

9 u5 N& w+ d( K6 c  v; i* O( d
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 `% E8 m2 X; P% f& ^

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ L0 n# \) h$ T4 H  L7 _




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