嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' a4 b# t3 J' t' o1 F
Void UPP_TASK(Void), v* m* l; g# I- m/ R6 k
{/ V+ U! U3 X" v9 O: Q/ T. M
; {; @6 w  a* p  N/ c
    int i,j,k,target_int_count=2;0 |) a9 |. L  g$ N
    char ch[2];5 L* G* K6 y# @+ G

! c% Q& W  ]( p7 ~! ]) V
* u; W# y; m  j$ S1 _
2 r+ ?6 o- y) P  l, X6 V2 \; x8 T  T. U    upp_interrupt_count  = 0;+ N: \# A! A! ^2 R' ?* \
    upp_error_count = 0;
6 M2 l) k0 G4 ]8 e1 _0 E* K
4 B: p6 \7 R* S    UARTPuts("\tResetting uPP buffers...\r\n",-2);$ t3 C# k) g7 U8 k8 \* o
    // Initialize data buffers
' g& k2 ^6 A% R0 X    for (i = 0; i < upp_frame_size; i++)
% S. Q6 F* \3 a    {: k6 L+ y" F- i9 |: y
       upp_buffer_b =i;2 W6 ~, e' y" @. q3 y
       upp_buffer_a = 0xDEAD;4 X  c% |: k; D1 o7 T: R
    }" Z+ i* ^0 q4 v6 `* E- N: A
* L; B2 P& \! G
    //for(i=0;i<1024;i++)
: L+ S% ~5 p( `1 b6 R* P8 p. x1 R    //    temp=0;
+ J  ^$ k6 T. b1 j* J6 A0 t. `, A
    //UPPReset();
0 t$ e% g& l$ [! W- j7 b6 w3 k( f    /*启动UPP DMA传输*/% F2 ^: y& x* u: c
    UARTPuts("upp_prog_dma_i\n",-2);$ D8 G5 W! J8 V, g
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) l8 p$ ]+ Y1 s" D    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 q! z. h- E$ d/ L( ]' m    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ c7 T! F3 E) ]. B
7 B( Z: M; [9 q6 x3 Q! W' A    UARTPuts("upp_prog_dma_i\n",-2);
0 F/ u; e, ~3 G3 E6 t: \- G7 x& [6 n    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. S8 R7 c4 O/ e# p    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) m' m) h5 H7 k
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 Q0 B! k2 Z, l
. X: k2 g( e! J2 I6 Q
    /*等待UPP传输完毕*/4 s8 q% k% R! L: f" @8 N9 o! d
    //i=0;' n5 Y! L4 e; f$ m& G
    //j=0;4 Z! x9 S$ `2 A4 v% v. @
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' V$ t; J. ]  @" [1 v3 i    {0 z6 a1 U* A9 A1 W' K
        /*  测试UPP传输的同时操作普通DDR数据. F6 m' L. @8 `6 e2 n9 l9 I: D
        temp=i;- T+ m0 \6 H  r( r3 Y
        i++;
0 v6 Q# }2 u, P$ V& w        if(i==1024)
! M! V) p) }( Q! G# ^$ r; ^% C& N2 w4 z        {
" |" z% z; }" q            i=0;6 @* {' ^4 g8 o
            j++;
  l" i7 E" Z+ ?9 C, D; z; V( m        }4 l9 s$ Q% |+ W8 G: r5 R
        */, @9 V8 X1 \* B! k8 c
! b. G& y( S& [3 d: q
       asm(" nop");
7 H! ^+ ^# {! [8 ~# s
$ L( o0 Q0 B0 Y6 H7 C       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 m1 ^( P/ ~5 G$ _' K8 a- d' ~    }
. g8 H6 m( T5 l- d0 w$ |2 S& y! k5 p3 W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 O, ~+ T4 G5 I6 ^" {- x+ l; K
    //UARTprintf( "i=%d\n",i);2 E  m8 _  S+ q0 c- n6 l6 {
    //UARTprintf( "j=%d\n",j);
7 K1 Q' ?  J& i- S    UARTPuts("Data mismatch in buffers.\n",-2);
9 w6 F& C% @" b) ?; U. P( s    if (upp_interrupt_count == 2 && upp_error_count == 0)/ e  [9 s- n8 F1 k7 W
    {
9 D. |6 \$ \! W: n  ~' z        for (i = 0; i<upp_frame_size; i++)8 V( H$ n% X# o3 e6 {  ~
        {
, k) f7 i$ F$ I            if (upp_buffer_a != upp_buffer_b)$ m6 ^' H: t9 g1 H/ F
            {' v: `: }! d2 y1 x
                upp_error_count++;: }" G0 U) a/ f* Y. _4 h
            }
4 l# R3 W5 B& [# J! G        }/ r7 o+ T; Q7 P1 ^* W- g* ?9 P
    }- j9 S- o* h: Z! S

4 \2 ^! n" ~% o( |; k    /* 报告通信结果*/
! X, d3 i# ?3 H$ y( Z9 s    if(upp_error_count != 0). ?+ I0 I* i7 A0 r& l2 [
        UARTprintf( "upp_error_count=%d\n",upp_error_count);- {2 [' t# c" ?% x/ e+ h
    else
6 G, a3 |6 u$ n% v3 v! F# d4 q6 |        UARTPuts("uPP transfers complete!\n",-2);7 i+ z  @+ e. W6 l5 a; h2 B0 n4 D

8 W$ ?# R. }. G! b* d1 b3 T    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  x, R% a" c& [5 r: F! F8 B    UARTGets(ch,2);
7 Q+ V+ O7 O) E* t0 x+ v    UARTPuts("\n", -2);5 q  ?# h5 }, _$ \0 \5 z' I
6 @/ u& z+ U9 f, n& X
    if(ch[0] == 'y')# W) X. Y# L1 E/ D
    {  _2 B! n4 b0 l& {
        /*打印全部读到的数据*/9 I* k/ m8 E5 I& X- X
        for(i=0; i<upp_frame_size; )$ r: }0 [: _; r5 x. u) V
        {6 E5 r) b; F3 r
            for(j=0; j<5; j++)
0 ]. Z  p+ S  \% R$ H            {- }! l4 u1 I6 p; M# _% O( j. j
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- v  e  p. A/ H  [7 |
                i++;
8 P, q4 q/ \9 _                //if(i >= 4096)
. Z; w, N: u; R% ~) G                //    break;3 \1 {0 N( e! Y8 }
3 O- C# ~# N% Z' k9 x
            }5 t* g" S/ G4 f, {" w
            UARTPuts("\n",-2);
/ l( J# H  i2 b/ t+ [% z        }0 j5 V1 A4 R. Y$ F# A
    }% A8 }3 z$ \6 t  A

$ t" b9 |! y2 l}
# \/ w0 S' I* h9 G2 V
" z  g  u7 k4 z$ u

7 b3 ~# p/ J2 D) B
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ b' [$ _! O, s, B: J6 x# _

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" ?+ y% y! V! A6 I  J% E, v: i4 i





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