嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 P2 H# N. ^& C- q: E1 P
Void UPP_TASK(Void)
7 b# l! B$ t- D8 N+ ]{2 j3 {5 E1 Q+ B
% z, _! b7 e' j- t* r& H( |
    int i,j,k,target_int_count=2;( ]8 C1 f/ M) i( r7 E5 Z" `
    char ch[2];
0 [9 p$ A+ d& C9 n9 X6 O
7 u1 I0 ]7 m$ y- u: M
- h1 P: q: O3 i8 s; X) }: @% P% D( C
    upp_interrupt_count  = 0;: E7 t9 S! O, |8 b* H
    upp_error_count = 0;
8 W2 j9 k( @! m3 {! h; K
, Y! J6 i; J: x. l9 X: t. F    UARTPuts("\tResetting uPP buffers...\r\n",-2);) @+ L7 g* i3 ~2 i, H
    // Initialize data buffers
  ~1 R! c4 v7 H  P    for (i = 0; i < upp_frame_size; i++)
) Z) i9 [" _' b    {
- O# y: c1 q0 g9 @5 g0 B& {# u$ M       upp_buffer_b =i;, b! C( `( x' @, q# p: p
       upp_buffer_a = 0xDEAD;- V# D$ Z3 X2 U7 v9 D; ]
    }5 H2 n1 P; v# o7 C" t, f2 Z6 k$ v
( Y9 o# y  q2 ^3 \1 z& y
    //for(i=0;i<1024;i++)5 E2 n% E1 e! z7 }7 O# g2 g
    //    temp=0;
/ T4 G0 P5 ?, Q
$ P+ f; {: {, T; u    //UPPReset();' C! Y4 N  L+ d9 \
    /*启动UPP DMA传输*/: Z# s! [7 L) F/ [3 y; d
    UARTPuts("upp_prog_dma_i\n",-2);
$ s! y6 d  ]# B) _) t    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 X. M/ H" _, v! ?! p
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, c. D' J4 E; ~6 B; B$ U9 n' \    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);! t+ G4 @( Y, H3 J3 z9 \1 w" E

% S' O" C' Y2 J6 p* y. U    UARTPuts("upp_prog_dma_i\n",-2);, l# }3 K0 ^; y0 x4 i2 m9 K
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ d: m9 }: i  Q6 M' ?    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 h% j) f- v6 q/ O) n3 h. |; @/ W: M    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# A6 N3 I4 N- H5 l; i
/ A" h3 y1 q0 t& m9 g1 G" ]
    /*等待UPP传输完毕*/
3 e, z/ _- u3 c+ A  f0 K0 }/ B& h    //i=0;
4 P9 \4 C- z4 l0 s    //j=0;
9 A8 m9 k9 @# `- X/ j: b' [    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 c, f: d, L$ q' n6 O    {7 @0 d1 Z5 G8 y# G2 G
        /*  测试UPP传输的同时操作普通DDR数据
7 g5 D3 R: Y7 T) J$ @        temp=i;% P" s# |- @. ?2 {: W
        i++;
6 Z) R7 J4 w$ A$ D! L! Y2 ?! r        if(i==1024)5 s* W$ O3 |/ B& G+ O  z: F( s  f2 I
        {
4 N3 f5 ]9 z2 f+ h: |% p0 S            i=0;2 F- q0 V$ \' Z' F+ c$ m2 q, P
            j++;
% s0 H7 D: _5 b, ?, ^8 [% j4 h        }( H( S% e: D/ w1 h' ]6 F9 u; c
        */! `' u1 ^/ t9 ~3 y6 V9 n" h

8 f% h3 d4 A+ e4 r: f( m# `       asm(" nop");
) I! M7 K( y3 t0 i" m3 _% l) c$ b6 \) n2 A3 Q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 p9 S! m( B) X% {2 a$ ^$ x# M* b    }
2 l2 t5 }5 v; L2 I# d) v1 A2 O- l/ b  F/ d- a, l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& Y% B0 {) |* `: E/ N    //UARTprintf( "i=%d\n",i);9 G3 o7 s2 O6 ?9 y
    //UARTprintf( "j=%d\n",j);+ ]( F3 \: {. ~: e- e
    UARTPuts("Data mismatch in buffers.\n",-2);
( c* K- E3 G4 }& z; p3 m; D    if (upp_interrupt_count == 2 && upp_error_count == 0): ~4 y: j8 z  E6 A- B  ^
    {
9 o) I# V: B7 B) m  Z9 n# i% s        for (i = 0; i<upp_frame_size; i++)% Y& V& X; P- M, K# D
        {
0 d3 a2 D4 m- Y& x) A. G8 ^            if (upp_buffer_a != upp_buffer_b)$ ~5 d# E) h; K# u  l) l/ b
            {/ o2 g& m+ y: J0 ?8 R
                upp_error_count++;
- ^* X3 _- u2 I7 t: n            }+ Q2 g! t) I: B% X, Q3 C9 J
        }6 v$ ?. U$ x% e
    }
# q  {. T- n% Y, e- \
  I/ A' v& }' m) p, J    /* 报告通信结果*/8 S( i2 {  _; U
    if(upp_error_count != 0)0 Q4 y1 B7 w5 l- V. J7 n" t
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 c. g; R2 k, `8 l: g" C7 u# e    else
/ F$ `8 W) D5 A1 q        UARTPuts("uPP transfers complete!\n",-2);
$ G6 m9 j: r) h+ Z0 D6 }+ l6 Q
3 ^- k2 f% ?! w& M) ?9 N% D0 J, }    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ N, O5 s) y& O  Z" u/ A    UARTGets(ch,2);: ^8 u  \% ]& e; q- L
    UARTPuts("\n", -2);: i% ^) ]5 a2 E$ K" p, _
% F& Y, c: O0 W# E
    if(ch[0] == 'y')& c6 h& @: @% W& @9 `7 `. j
    {
/ J7 `3 [9 m2 Y) F        /*打印全部读到的数据*/
! ~0 N! @  U/ N1 B( I- x        for(i=0; i<upp_frame_size; )
0 C- ?$ l* I# `5 |% u        {
: A; g2 U, |9 s6 c9 L9 O# S            for(j=0; j<5; j++)- i: F4 U" q1 i
            {
' m4 z% V7 F9 J! T                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ S# j4 a2 V2 g                i++;  F2 E$ @0 \! L3 [: O6 Y$ U
                //if(i >= 4096)( p6 j  b0 p- q7 M: I. |
                //    break;2 X- \* J5 _+ F5 @5 I0 H* D

4 |7 c3 J, Z3 x+ f8 [. ~            }3 E7 n4 ]  t5 n/ H% R. r, |6 ~
            UARTPuts("\n",-2);
8 X: `( O! n$ o; G        }
: z/ [+ W- @3 G+ A1 Z    }
0 f! T# M4 g) T) v" q" I
% X* d; [& q% p8 l}
7 G* \0 z) l5 T1 N' S/ ?0 @

" U4 c! j, T/ F, ^& r8 T; c; v) w, x# M& E; m

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 g7 i. S) H: g, ~' y, ]- D# Y% _
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: g! v: R  U6 K! K) }




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