嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& s1 \5 Y# e& A1 Y
Void UPP_TASK(Void)& M+ ~! C2 H4 |9 D% Z" ]
{, C6 a, b: H4 C& k: H5 N/ w

- {# I5 w% J% P: o  C( L    int i,j,k,target_int_count=2;& P) P# H8 b. s
    char ch[2];
" V6 G3 z* i! _6 J. x
) B; G3 v/ h$ m5 @* ^/ g3 \/ @) o" F

5 s4 B( z3 K3 v  U1 m; R7 U    upp_interrupt_count  = 0;; B" u( ]* _+ b8 w2 f/ J% Q8 Z7 \
    upp_error_count = 0;
0 I' C" n3 ~- {$ T  ^# d: x, p) `/ Z$ A6 I7 V
    UARTPuts("\tResetting uPP buffers...\r\n",-2);. P$ I9 Q5 h1 X
    // Initialize data buffers
+ D" C4 D. }# v    for (i = 0; i < upp_frame_size; i++); y( E; X# ?& i0 T5 n1 W
    {9 l! i! y! }6 {3 O9 \% t. U
       upp_buffer_b =i;; R' l- }* I- ^0 @, Q' ?1 l. ~' U& ~
       upp_buffer_a = 0xDEAD;& W  O% k- F+ O9 h, {
    }
4 T2 ~* F5 L  A5 ~
9 @4 ]+ ^0 t4 Z    //for(i=0;i<1024;i++); M5 P5 a) k, {6 b
    //    temp=0;& H' k8 |, z0 n  U  Z) }

6 V( ]  L* `* a6 S1 h& ?    //UPPReset();
7 M. u) M3 y0 O2 Q# p5 v    /*启动UPP DMA传输*/* o; u! v4 ~8 i/ L
    UARTPuts("upp_prog_dma_i\n",-2);- P/ i( v! l3 D, X/ V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* y6 w: a8 C* S9 @- K  m, \    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! m% b) _( |! Z& X; ^* f
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 U( \, ~( b& o4 h2 W
/ O' o; C9 f/ u4 H" g5 k2 v/ I4 O6 D    UARTPuts("upp_prog_dma_i\n",-2);) H3 b) |' J  |+ a1 m  V/ J# c
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 P- n# N4 j$ Y0 O, d) f! @* n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 \# s; Y2 c0 |. V    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: R5 H% _; d# @/ a- ^2 d
0 B% g' r  \; Z
    /*等待UPP传输完毕*/7 s$ G2 H; P( h+ W, Z
    //i=0;( H) V$ V) ^& h! a
    //j=0;
/ h- ~* J! J- L# M    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 X8 x5 @! o+ |    {2 p% ~& ]- m0 Y; ]8 v% m
        /*  测试UPP传输的同时操作普通DDR数据
  J5 o$ v" ~8 F        temp=i;+ {1 `6 G# y# z  C! y$ D3 Z2 ]
        i++;
( D1 H: g& g/ N6 Z        if(i==1024)
' S1 U) B1 G4 {  r( K8 h4 q        {1 }8 W4 i$ a/ r; o+ Z/ _$ Z4 g' _# J
            i=0;
$ a4 Z! E& Q6 u" X/ ^            j++;3 s' y( e" U8 }
        }
7 H3 j# g1 ^6 f+ @1 v' g        */6 L6 ~2 ^# z  g5 n  `5 T

0 [: ?6 j1 V, q) |2 f& b7 ?       asm(" nop");
4 {6 N( S: |" q" n2 {% W7 A; R1 `6 z  X& P) A  g
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 [2 D1 q4 Y* o( v  n; f" N! E    }
9 W# ~7 s  a, @3 F$ ^) n& I. {
! p9 X3 K/ R* q" E    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 A, \+ [8 S) z6 f% P
    //UARTprintf( "i=%d\n",i);2 G9 `0 m- ?$ d6 [5 I3 I
    //UARTprintf( "j=%d\n",j);, i$ Y$ x6 u' d( C/ X: }
    UARTPuts("Data mismatch in buffers.\n",-2);3 g# Q! a; N% A5 M
    if (upp_interrupt_count == 2 && upp_error_count == 0)
! a4 x( ^, Y+ n6 y( X    {% U$ I+ L4 }; _# _" R
        for (i = 0; i<upp_frame_size; i++)
& o6 q2 \3 N2 Q1 T  k, M( U        {" V3 b, I( a+ o) P  k
            if (upp_buffer_a != upp_buffer_b)( Y3 Y- B3 b6 o' g/ `. t3 ]
            {# J3 ?/ M9 p% `- k8 @
                upp_error_count++;5 ~) D6 O' l. V8 ^/ a% r' h
            }  S. G, h) j" j' P7 Q
        }
  F: L& o( G0 F9 j" B: F    }
/ y) D$ t" T: T. W* s
" H  X8 m2 a% q; _% q! V5 u; X    /* 报告通信结果*/
3 y  ?! ~7 z' h4 v# I2 F$ Z+ e  H8 @6 ]    if(upp_error_count != 0)$ L. K! u* a4 V6 ^7 ^& Z9 E. }! F
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) l; G. \, L8 k2 H9 m/ w    else
( p; R* q- y( P$ M9 G& s! z        UARTPuts("uPP transfers complete!\n",-2);0 u" P7 u: l  N% u+ v( H) h
) e7 w& S) h7 B4 D7 w
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. c4 ^& A  ?  W
    UARTGets(ch,2);
& |( X, u  }/ @9 W6 m9 f. |' M* i    UARTPuts("\n", -2);; e% R; q- X$ I1 t' L5 b5 g+ e

" E: u5 j# f1 ?  t2 m/ I    if(ch[0] == 'y')
# x# L" |! g* u, [    {
/ t/ v2 I  T. b5 r: e" u8 @3 l9 N        /*打印全部读到的数据*/) `+ Z% Y5 s2 R$ g3 v4 M: a
        for(i=0; i<upp_frame_size; )
; L1 K/ Z/ ~3 S/ @, a        {! X: A: U; R2 Z- _
            for(j=0; j<5; j++)3 w6 [$ [) v  `) U5 W
            {
# `9 y5 \, T: y9 l; z& a9 u                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);8 ^$ ^8 W  N6 I) w1 q! h' @( e
                i++;% v4 m8 {1 _  o4 I6 S9 f
                //if(i >= 4096)4 B4 E; J" w, ^9 u: z8 j2 U
                //    break;
" d- D: D5 r4 y7 Z' G; @% ~9 K% \/ E' v. e
            }
1 P. @+ ~# n+ N            UARTPuts("\n",-2);
- e( ]% M5 K- A; K        }, c0 ~' Z- Z; C" Q( T8 j2 S' j/ g: [
    }5 U5 _6 P( B" g8 X9 l  f
+ x, f: Y" u. k$ @9 r: I
}

3 \, H- W8 U4 B) W; c. K

( w6 ]3 ^  N( f6 \
, F. l2 Z' f: O- g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" o4 `, }# a; W' u  k$ {
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- f2 d# I( Y  o9 @# M( [




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