嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 E7 W9 Q3 R: F7 h7 x" g) s
Void UPP_TASK(Void)
0 C  C$ w5 D! K0 W' J9 j{! w: v) N* }+ o2 M- ]' g
0 y$ A) n5 g$ n6 I3 {' [
    int i,j,k,target_int_count=2;! z8 d/ Y" m4 d, k, C2 c! |. \, s
    char ch[2];
, ^0 x2 R) A2 ?: Q) p( h, N( [* l4 m: B4 C0 y

: H5 s! e2 M. G: a6 M0 s
2 [) a; S8 u1 c4 J- ]! L% ~- Z- U    upp_interrupt_count  = 0;
8 G& P* ]0 u" y, m    upp_error_count = 0;
- Q/ b' ]1 ^# U* Z
- R$ H& |- ^: x! L* M    UARTPuts("\tResetting uPP buffers...\r\n",-2);
, N4 D  q: b3 W2 f- v8 G  q. W    // Initialize data buffers
$ [. d; Z( R3 O% I- r    for (i = 0; i < upp_frame_size; i++)
) A4 d9 i# N5 B+ J  B# Z    {; v1 w  Z, \5 [1 J4 V. T. E
       upp_buffer_b =i;) C4 D  g/ q0 Y* R+ s9 S! @
       upp_buffer_a = 0xDEAD;
* b, w9 t+ {! e6 L    }
% f* R! n; @2 C
9 Z& `$ c& Y& t" b* p    //for(i=0;i<1024;i++)
8 f4 w0 g! d; P6 f4 [$ L4 z    //    temp=0;
% j& H( U0 [; U- ], D5 r* q
7 w% ]2 i+ N( t! X: p7 n0 r    //UPPReset();" h9 v7 v% E! [' k
    /*启动UPP DMA传输*/! [4 y6 C. z8 |6 `5 {4 n
    UARTPuts("upp_prog_dma_i\n",-2);) G' I. {+ ]4 }2 |% X' g  p! U
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;3 ?& t8 o8 ?9 ^% W  u, i8 f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ f, w6 [6 h# [/ u+ @: N0 H
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; o) t) H( h+ P% `# ]! B- n+ S

  W* h& I* g: H! C' Q  m7 s- x* H    UARTPuts("upp_prog_dma_i\n",-2);$ |+ E, O* _* ^( E3 w: X0 S
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- q' Z5 y/ ^1 L1 Y' z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# i% E3 R, ]* C. n( e
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( M/ U- W+ }% ~! L$ H. j& D- I$ ]2 e: d
    /*等待UPP传输完毕*/
* L3 ?# O8 G9 M: N( Y9 T# v    //i=0;
( J: P+ |! T, Y    //j=0;4 o  B. w) v1 B' T8 O, E4 q, z
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 Q0 _8 p' r' A7 M  M5 ^  i& Y* _) c    {: l/ C. F4 r4 X& a# \; e' U0 R
        /*  测试UPP传输的同时操作普通DDR数据
( A0 o+ U/ ^# b7 b1 y. a7 T        temp=i;
/ R3 J# V6 Z8 x$ {        i++;
) e  }! i% @5 i. Y# @, `! s        if(i==1024)' b: B' n/ D* H
        {
6 {0 C: j: A( M4 H. s. ^; r% I7 t            i=0;; V# q% R& [5 G0 G. E. o
            j++;
/ y* w- x3 t' f% q( N" F        }/ A" t; ^) a& X% I
        */
* i" F/ q9 P" Z: I) V* Z
, d5 g* ~( J9 D5 \8 U       asm(" nop");! c- u  _7 P, j+ G! L6 p

" {& F7 r) J0 E4 Y% S& z0 U       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ J; Y3 V: h+ {; l- e    }
6 W" C7 _% r/ l! b: U& ~( @( W. P8 o2 }6 u& b
    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ V- u/ j* l. k* E
    //UARTprintf( "i=%d\n",i);0 f2 [3 n- T; p
    //UARTprintf( "j=%d\n",j);% W& V" L& h7 q5 H  o
    UARTPuts("Data mismatch in buffers.\n",-2);
% [7 h$ t' M8 @- @! |; t3 L  B, U    if (upp_interrupt_count == 2 && upp_error_count == 0)9 q4 k/ S- x- z" T1 Y( A' v% ^8 `
    {% }4 a/ ~* R8 l4 }1 }2 ]
        for (i = 0; i<upp_frame_size; i++)
9 [: A/ H7 K8 G$ W5 ~  ]3 M        {3 d: }+ c- ^& E& }
            if (upp_buffer_a != upp_buffer_b)5 @1 F, s7 s* _: S- S7 R% T: D
            {
! b5 d: H! m8 w+ W0 D                upp_error_count++;3 K& m( ]6 a; t7 D9 A( p5 p+ V
            }0 f, |0 D. L8 |/ d# p: J4 v, ]
        }8 Y7 k4 Y8 e' l( W" H4 U
    }7 ?1 m2 |' s0 q3 x/ S, `

2 z. L) C' I' X' ^7 p    /* 报告通信结果*/: r, e$ ?+ K5 g4 U9 S
    if(upp_error_count != 0)
) ^6 b3 q) i4 H6 C% o2 ^4 O! i* q        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 q0 u9 O3 c6 k0 j; e
    else2 k  U0 K5 J/ }1 |+ R* n
        UARTPuts("uPP transfers complete!\n",-2);
. k8 `1 i8 \# c2 T: [; i( I$ D$ M2 N- j$ h! f
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% W) u& |; Y! V/ h8 s$ G. e
    UARTGets(ch,2);
! ~8 V! G/ a$ F5 G    UARTPuts("\n", -2);
! l/ d4 b4 O0 t: G' W# X- K% K. A7 N6 d& \2 ]2 _
    if(ch[0] == 'y')
# f8 Q6 r9 p" D) V2 q0 A# _5 I0 y3 |& D    {  z( O# N) D3 C7 C
        /*打印全部读到的数据*/3 p. l' k5 w6 I& \; ]
        for(i=0; i<upp_frame_size; )/ \; W% W0 ^: {8 K0 @; U
        {
# v$ E0 ~# ~* u+ g1 t7 u            for(j=0; j<5; j++)
* v, h) Q8 ?; l% `; h; g            {2 h% T4 V8 _- G' J* t$ Y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
8 t* J9 ~9 N; @, i2 [+ ?: [: P5 ^                i++;
3 v2 d. d; v& ?  W% B                //if(i >= 4096)
3 c7 u4 S# u0 ], O0 ^2 D                //    break;, Z5 q; Z1 k% K- @& l( K

8 Q7 e) K8 x6 D  Q0 C4 _! j4 Q# V            }; o* g% Q$ R. v4 ?3 n
            UARTPuts("\n",-2);  `, Y9 M, u4 @7 U
        }
( G0 V% P# e; f! }    }
, o- y5 o" C# ^0 d# X, N1 ^  D% L: t; B* P2 d9 t
}

# E  ^8 g8 p% O/ {7 _3 t) d- i
& L* T0 R8 V* X; N( y' k: u

/ k" w, o& i/ H: q/ v
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ ]. R6 U0 R) I" }3 w' f

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 g. H- W, B9 h) e% q




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