嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; ]( Y* b! }5 Y: G
Void UPP_TASK(Void)
2 H9 \( f6 f8 L+ I{
2 O3 v: h6 J- b
, P* ?) [! f/ T4 }  f    int i,j,k,target_int_count=2;
+ L; f. X: J0 y0 Y$ w, G* w; B/ o    char ch[2];
: u, _3 D1 H! K8 f8 ]
( \- x% f- A5 {1 c$ U% U* ^. l( x+ z; g! I8 p

. p& V! d0 G/ T7 g* I8 S" }1 c8 e    upp_interrupt_count  = 0;' v1 B+ ]4 R' C2 M
    upp_error_count = 0;0 P) m3 Q2 g5 o
  J+ \" E; J; X8 u$ B5 v7 \
    UARTPuts("\tResetting uPP buffers...\r\n",-2);  x  v) K5 a4 w' g3 y# d
    // Initialize data buffers
+ n. C8 ?9 ]0 O9 @+ G# B: T    for (i = 0; i < upp_frame_size; i++)8 i- e7 `1 M$ o! b
    {' C9 p) p& `) g9 J. ~; c. @
       upp_buffer_b =i;
) {% z3 Q' }- E- q$ L* i       upp_buffer_a = 0xDEAD;' h9 H  Z/ c# U5 v
    }! f  l1 V9 l1 s+ O2 h
) x- W* N( n8 x- I9 I
    //for(i=0;i<1024;i++)
$ C. A9 m4 Q, W1 v; K    //    temp=0;+ t% |* i9 G( \/ `! I$ \$ r6 t
3 e; H+ T+ ~2 E
    //UPPReset();
5 v3 C" A0 n2 S+ y+ G: f    /*启动UPP DMA传输*/" H- }6 a- h; q' K3 e* L/ u
    UARTPuts("upp_prog_dma_i\n",-2);. t; ^6 I/ {: t* X
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% }5 @9 g3 y4 t, v
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: }" a- z6 j8 P    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: }) Q) b! X3 S3 t% T5 `
' ?0 S: n  V+ L9 z
    UARTPuts("upp_prog_dma_i\n",-2);! ^' i& h' B$ a+ l$ Q- ~
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ d: O. [1 Q0 H5 u4 W3 X* x
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 X( P  y. f$ l8 p5 X4 P
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 G4 f4 F& y, {$ e5 c
' l9 D' k- d) v# R" {" \, |    /*等待UPP传输完毕*/; w! {4 t/ Q/ V: t
    //i=0;5 Z1 I" g" f9 W
    //j=0;
/ W% F$ f& N) Z' D/ `    while (upp_interrupt_count < target_int_count && upp_error_count == 0)& f  z2 Z# N$ \$ U
    {  x1 J( Z6 \, {" k
        /*  测试UPP传输的同时操作普通DDR数据
8 i$ A1 c) z6 x4 {        temp=i;5 ]9 Z  \5 v# \6 n: H, ~7 ~
        i++;
- _- a0 |" `: g        if(i==1024)
5 L; d! x! a3 j! _        {
' G( x- Z! e& `8 q$ n# O            i=0;: o( m4 Q0 g  @4 f; E  o2 H8 h
            j++;
( u& m( y5 ^1 [% `- b        }( U  x2 i9 m: }
        */  g. E9 r* s; {& J! X5 @

: F" k+ b  @- U! D" S4 ?9 F7 E5 Y       asm(" nop");) w6 N' j" N3 t
: ~& m- X* a" j5 d
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" _6 S. f5 B5 q4 k& R* p& r    }  [) g) g4 g& U7 ]/ u4 j/ D  \
% q! y+ C( u) E3 O5 P5 h
    /*检查UPP传输的数据是否正确 (loopback modes only)*/0 M# v: W8 G9 p2 R8 Q2 X7 k
    //UARTprintf( "i=%d\n",i);1 q9 R! Y+ r9 \# T
    //UARTprintf( "j=%d\n",j);
4 I  ]8 u9 X# k) o# V* ?& F    UARTPuts("Data mismatch in buffers.\n",-2);9 @+ P  H7 J* `; W: O
    if (upp_interrupt_count == 2 && upp_error_count == 0); y0 L! C& P$ @) x
    {
4 u! U: Z% u0 L+ R, ~* P        for (i = 0; i<upp_frame_size; i++)6 O( G- D* h( N) \
        {
$ |4 S8 r8 M* x  {& U" O9 G$ R9 Q& U) e            if (upp_buffer_a != upp_buffer_b)
2 {, d0 Z6 ^; E% c3 l            {
& _* Z# m' f' y- l) G                upp_error_count++;% K2 w' k) D" ]% P! h' A
            }
8 X9 P( d7 Y$ P1 g( L        }) E8 [  p( d7 o1 o
    }  T+ Q& D( r  r4 u+ l
$ Q; v- [* |5 J, Q) w9 x8 _
    /* 报告通信结果*/5 T) W5 ]4 S1 Y5 W
    if(upp_error_count != 0)
5 S* A& J& s$ ]' Q        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 `0 I6 a: i; H    else  y0 j$ d5 `9 n4 R
        UARTPuts("uPP transfers complete!\n",-2);8 [) {4 M/ a1 Z0 ^' E) I

& V; g5 k/ X6 ]2 c# Q# u    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 U2 X! Q% E  d& [# Z    UARTGets(ch,2);
( _0 i& D4 d4 T: w6 ]5 [    UARTPuts("\n", -2);
, S6 u% [2 F8 s& w- ?- q6 z, C4 H9 ], t+ V
    if(ch[0] == 'y')1 m2 S0 R. @; F+ o- ^
    {
3 a& T& n; x1 Y5 A        /*打印全部读到的数据*/
: c5 U' C5 @/ e: Y" i        for(i=0; i<upp_frame_size; )/ D7 }' V4 K: _+ Z5 z+ O0 V+ `
        {
; o5 [' `# \- f            for(j=0; j<5; j++)
4 m; ]: x& m) |& L- s$ J' |            {
9 I7 N; Y9 T" b) F9 j9 P! K6 Z                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, n9 {( U( W! d                i++;
. W# V2 C2 \! W% e7 G) u                //if(i >= 4096)
' l8 f. Z, v0 g6 R                //    break;8 U8 |* k7 _( z* I8 e. e

. d' v9 r4 j5 F& |9 k: T0 a  B            }
1 h( L7 e# y- m4 Q+ t; K+ E/ B            UARTPuts("\n",-2);* D( `! ]& Y# [% t2 v0 c* e0 i2 d
        }
( A# V. L! ~7 ]( }8 ^4 \    }
6 o8 L+ W% w0 A3 E+ T+ m! H4 N
  e% H9 ^. e" Q}

6 e$ X1 Z# ~4 A- a- c

. u" k/ x: T& S, O6 D3 a- y/ N$ q
$ j) v, z" P. j
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 Y8 c1 x2 q, Q0 n7 _8 q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 m) M8 j% u( }! L  H6 j




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