嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' `. y& @6 `# [) H+ K  W$ G( X8 q2 y
Void UPP_TASK(Void)
/ n# H0 G3 e4 s+ d) T$ d$ G+ r{
+ ~6 e9 X$ T0 J& Y- N2 K' c$ S4 n( P  i2 d9 J! ~
    int i,j,k,target_int_count=2;, y  r9 Q& K" h4 O0 c$ h
    char ch[2];
- b' L# w! C* S2 ?7 A' K( w" |. _$ o. @3 |! D

2 }  i' Z+ K1 H& U: D' U- h0 \1 J, U$ p$ o( x, R: b( K" L
    upp_interrupt_count  = 0;8 A& X) V" u! D$ g1 j9 E1 t6 N1 u! _
    upp_error_count = 0;7 X! ?! o' T; W' Z- ~
7 [6 E/ i1 l1 B1 {$ v
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 y) E7 u5 @$ \2 v    // Initialize data buffers
: \( ^. h+ y5 u: i    for (i = 0; i < upp_frame_size; i++)
+ _$ p2 ]5 i# Y1 g    {
+ K* f3 p# V" z5 h       upp_buffer_b =i;* o' I7 G1 g& W, u9 F" }2 x
       upp_buffer_a = 0xDEAD;
( z* q5 U* C( D+ c% }& P    }
7 Q9 r# M$ N1 B* V6 j5 P* N* O" D9 P8 T( [+ I4 q! J/ _  e) C
    //for(i=0;i<1024;i++)( ?/ O/ J# r+ H
    //    temp=0;  C+ Y0 R  {. ]1 l! V, z% _
4 U, Y* x; I! Q! `) Y
    //UPPReset();
3 w; O' H9 b1 m" o    /*启动UPP DMA传输*/
. _0 [$ d- p+ V8 _    UARTPuts("upp_prog_dma_i\n",-2);
! u& K; m4 a; s7 m) w0 O9 l; g    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& r- q) [! E( h    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 D: y6 ^3 ~, x; k  ?9 q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# A0 k1 p- n) f3 x3 q% h; M+ u' K9 O# i6 [2 c& g1 ]1 A& A" a2 R
    UARTPuts("upp_prog_dma_i\n",-2);1 M) F, a4 i# f2 \$ m
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 G6 x+ ^1 U  H; s) y$ @9 {
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) u3 l9 u8 @% [$ ]# t% m: ]) ~& @
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, Q/ z8 T; z  \2 q4 e  E
: [5 p2 k5 a$ a. }2 _+ t" a" @
    /*等待UPP传输完毕*/! [% |# I' S. S) y5 B0 {
    //i=0;) h  G0 _9 A* K+ @& u
    //j=0;
9 k8 A, d5 g: R7 @3 `! C/ _" d    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 m8 H- b3 X* C( x! z) A: a5 L7 q    {
4 [7 h% |! p  `' ]7 T/ P9 z        /*  测试UPP传输的同时操作普通DDR数据) f2 v5 l4 Q+ c# `7 p- }
        temp=i;' U# E: R8 o% [" X
        i++;4 V6 R" U9 f. b6 w. d  p
        if(i==1024)
4 U# {( N/ X! A0 [! R& j        {
9 k7 e- ~9 `8 U+ T( W9 D            i=0;, N3 Z3 O  q  U( W0 Q9 t. H
            j++;, h; @/ ~5 I) v, \& {, T
        }$ T+ o# h( I" w& [
        */
9 D6 S6 D/ {2 X* {# D2 z) K4 a3 j  T) s2 g% d! i
       asm(" nop");
" a# Z( W! m' ~# A* B6 |: z  I, J3 E& d
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: q# {5 O$ |; ^3 F6 [1 G
    }. s5 l9 P! u0 ]6 i4 `( P" q* z

# f& _5 ]- l7 M: H, b. U9 h    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 |8 M4 ~/ e6 V    //UARTprintf( "i=%d\n",i);
9 k% a4 F. K3 f    //UARTprintf( "j=%d\n",j);* L; M! J4 X$ I' `" x
    UARTPuts("Data mismatch in buffers.\n",-2);
* q* f, k- l  [, [    if (upp_interrupt_count == 2 && upp_error_count == 0)% ~( d1 w! ^- ]
    {; C8 U& w1 ~0 H3 {
        for (i = 0; i<upp_frame_size; i++)
9 m! T% J8 n( C& M# q( g        {3 c( p2 N6 C6 `/ r- [' K/ k, J
            if (upp_buffer_a != upp_buffer_b)* H9 f: {/ ~1 H. w
            {8 s3 Q* ?3 \; J9 I0 D2 m
                upp_error_count++;
" G, ~  B7 x. O            }+ W0 {$ u# E$ g. s% L
        }1 ?  x5 L: x4 h2 e7 j
    }2 f& B- W9 A7 G

! m& f! S+ _& w    /* 报告通信结果*/* m( _$ A1 v" ]
    if(upp_error_count != 0), A$ R: [8 ?8 T0 ~8 _
        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ A2 U* m& Z0 }7 {8 H5 D
    else
( h& x" e# p3 ^/ R5 U0 x$ o, y        UARTPuts("uPP transfers complete!\n",-2);
3 ~2 v( {) r- Q( Q1 ?4 D. q7 {" |
3 J$ z$ y$ ]$ F1 @" `2 e    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
1 z# g( C) V( f9 D    UARTGets(ch,2);/ X' N3 ~0 @* v: q* v9 z
    UARTPuts("\n", -2);2 I" e6 n9 @* D7 o; b# s' L

) ?+ F1 w: e3 q    if(ch[0] == 'y')
3 S+ n; L9 Y0 e; x/ h* m    {
$ Z& s- ?: G. X7 o/ e* r        /*打印全部读到的数据*/; l& ^4 l8 {9 N3 m
        for(i=0; i<upp_frame_size; )6 q) p( u' i  K2 v0 F; E  a) x. X, `
        {" O% ?9 B9 o5 \0 Q  p% A
            for(j=0; j<5; j++)
/ j+ a+ }% k/ X5 H            {
' v0 J, Y# y' V+ A                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
! P$ |7 p5 J+ l5 w+ g6 U( I                i++;
" r2 e/ o% U/ c, H1 j1 `                //if(i >= 4096)
0 H" u5 V& U% y- d! t3 f                //    break;
# x1 k% ?9 i! [) [' G) D
$ V! T& ]8 A  s% @            }
# l& r. }; p5 Y6 P; k            UARTPuts("\n",-2);
# }. \0 [  i3 L        }
3 l' T; T4 X3 u2 |0 f    }1 R; n2 Q% M2 x, ^) g& g

+ E7 W! D) n" E2 ~6 P}
; u: G. ?) ~8 _( N( L: Z% I' O

$ I' z7 H" z0 z# a! }  g6 Q$ _
* i0 ?1 C9 M) Y7 L7 t: J; S
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ d' q$ z3 w3 A2 D
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 p7 l4 t7 y+ V1 \3 T1 `* Y




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