嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 I, A3 G) p0 k6 j
Void UPP_TASK(Void)
) r: M5 ^3 _  O2 t' ?0 F{' C6 i! R; _2 A

% d- A+ M# q2 U  f4 `8 a    int i,j,k,target_int_count=2;
1 y" B0 h' r+ h. E! h7 L; K    char ch[2];& w$ y  }, O5 b0 \5 N
! t; w( P+ h. ]7 L
9 K& j4 g  R8 L1 Q

7 ~4 r; N& l7 q4 L9 P# l$ _    upp_interrupt_count  = 0;! Y6 l" t8 I. W' C& m* v! L$ B
    upp_error_count = 0;
1 B$ O5 b4 Z: ^: y: s9 U6 ?/ q9 E# ?+ M. w
    UARTPuts("\tResetting uPP buffers...\r\n",-2);5 s* {& \* h, w; e- b
    // Initialize data buffers
+ k0 V7 _, z' H8 _3 E3 O* Q    for (i = 0; i < upp_frame_size; i++)6 a" \! j% a7 h0 Q% a# h
    {+ ~% F1 G1 T: v! b9 d
       upp_buffer_b =i;0 D1 f6 x) P. N! \+ F
       upp_buffer_a = 0xDEAD;
8 p# t" ?! M1 e7 b    }
4 G& s' H. p( m& a8 K* Z- S9 I
% o- _' H- }4 f    //for(i=0;i<1024;i++)/ X; T0 S3 ?8 {, [2 ^7 @2 b
    //    temp=0;5 F& o' b0 e+ G& A1 ~

' b+ E( J9 G5 W# R! X2 H4 G    //UPPReset();! J* F7 R3 a2 p& f. ^. N
    /*启动UPP DMA传输*/
4 D# P- V( O" D7 h$ H/ g    UARTPuts("upp_prog_dma_i\n",-2);
  v! B( I  W1 \7 U    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% a/ D7 ?, J. |) d9 O    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- y5 Y3 g0 d$ Y% t    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ q5 n  j; Q  {6 ]; F

3 E' s* @+ |* b$ R  L    UARTPuts("upp_prog_dma_i\n",-2);( L6 Q, t- J; d" }
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;$ C/ C8 V& c& P' V
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- t3 ~$ g3 |, _6 z3 d
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  z2 Q; M! a" q- F/ R
2 N6 z4 ~# ~8 y/ S8 }8 `5 z& f    /*等待UPP传输完毕*/
* N$ p2 L0 S+ U' y2 r+ t    //i=0;; y6 i, l, t2 x! K$ o, u, G% f
    //j=0;
  T9 B% J2 g7 l7 x( @' G, P    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! h/ k8 B( e/ \4 D4 C    {& v* F, W* A6 Z& g7 A
        /*  测试UPP传输的同时操作普通DDR数据
) Z' M# o2 ^1 P. N& V        temp=i;
, `5 ~6 P8 A2 V9 A0 s3 Y. h1 ]        i++;
0 D; Z& d8 \; |) |8 O        if(i==1024): r" y0 y7 V2 s9 t- {/ _4 n
        {
4 n7 z8 z0 X3 _1 d            i=0;
+ }( K* U4 J1 ~, n: b: y3 G            j++;
4 [8 P: b' P' g7 v+ s( f- A        }
8 Z% e1 c: |8 L( d  L$ t        */) n) F/ H" L: w1 B- {
; y: u; }) M; X/ o% l
       asm(" nop");# K& O" C3 q) V' \0 U* \* K
8 k  B9 K- ^' f6 Z# P
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 a) T/ l- G' [1 K7 S2 ^* g$ z
    }
1 A3 H6 l3 v' ~4 M4 v4 Y$ P& @" L- B* r1 |* R, F3 P. o7 W1 q
    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 ?7 u# y8 e) l/ x$ L. G$ _4 w/ k' T
    //UARTprintf( "i=%d\n",i);8 |# S, a8 \  ]
    //UARTprintf( "j=%d\n",j);* j8 E( b  C2 M$ G$ X
    UARTPuts("Data mismatch in buffers.\n",-2);8 b' i0 W! b0 p, A# z- ]4 Q  _4 T
    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 T/ o5 a6 `1 g- b. j+ ~& e    {. x# b9 x/ J( h/ \4 ]) J
        for (i = 0; i<upp_frame_size; i++)
5 y( g* E( K4 L. L' ?$ u        {( Q1 J% T4 }+ v4 k/ C7 L- N
            if (upp_buffer_a != upp_buffer_b)2 F) b; b' Z" i: r
            {5 D: @7 S# S! P% _& l* p+ F8 F
                upp_error_count++;
! M3 R, @2 n4 p) l/ q4 f# Y            }( ?9 S# O! d: T' E
        }
( _7 B( S5 @& Y5 o! ~    }
3 s3 H7 F* \3 O# C6 @6 `8 R4 L% |% e- \4 e
    /* 报告通信结果*/
) x. X  r. Z" |/ ?" H! Q    if(upp_error_count != 0)0 k" C: |0 U7 O9 J, y3 G
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 R6 s# \' P& T$ |: j    else
0 r  q2 P5 e+ T% B+ Q        UARTPuts("uPP transfers complete!\n",-2);* K. K: q- x1 @6 U* G2 [
! ?* K; ~: Q& Z, C
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
, |' b( T' v% j$ S/ ~    UARTGets(ch,2);; x! \  f8 z) G1 c, T2 ]. T9 C5 E
    UARTPuts("\n", -2);
. O! _  O6 @# i8 E
3 z* O! e2 R+ n0 M    if(ch[0] == 'y')
$ d* D/ T+ S5 s: @( R    {
$ k8 N6 G6 W" U* W        /*打印全部读到的数据*/
  b  x/ L$ D/ [: z        for(i=0; i<upp_frame_size; )
/ T/ p& A9 v& c+ L  b. [. O0 x        {, x+ p; K2 b2 W: m2 g3 m/ S# s; Y
            for(j=0; j<5; j++)
, ^0 G* s' X6 r) E            {4 ]1 r- a$ X- C. t0 M3 S# d* R0 Y, V
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# t$ O. e7 `  a, u                i++;& E. p) v: X# D. T  a
                //if(i >= 4096)# S/ e2 `2 [, u( `. u/ T
                //    break;
( f/ W* b4 y' Y: a6 V$ f# b2 R6 f
8 a% u9 H' o, b: y% M( b3 S            }9 t; L: f( M# h% x9 |; n# L9 d
            UARTPuts("\n",-2);! _2 ?. k  z' v( b: l8 S! |
        }
* \- d3 p# F$ b, r% s    }
: ?4 c, u3 V& L8 R- w
5 |' b* P- O  _" p1 ]}
, \* g8 s7 t- i8 T; R1 ?

4 @# @# A% a$ {5 X8 m" w3 p9 f
5 g/ u- i- B" p, E" q/ b
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, D- j  A# Y! E$ F3 {
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 ?) ]7 B0 S: ^( h




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