嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 I& ?' v) f% ]3 b+ `- @* U" O
Void UPP_TASK(Void)  R: e, d9 K& u
{
8 ?$ G5 H  U7 J/ T
, O# s$ a' f6 w3 m8 K    int i,j,k,target_int_count=2;$ Q  l' M7 l7 X9 h% C
    char ch[2];: ]: R4 D* h2 ?
1 T. ~: F0 y. q" ~
) e- {8 _' a9 f% A$ F- e2 Z
* y* w6 }6 G% `" t+ |
    upp_interrupt_count  = 0;# t/ L5 U, X; B! g; L1 s' m% s2 e
    upp_error_count = 0;5 K, P7 @( j/ O& r. G$ P

4 N! Y; p$ j9 [  G; M    UARTPuts("\tResetting uPP buffers...\r\n",-2);: R8 L* P2 x( k" T4 Q
    // Initialize data buffers
6 x) I. g( i4 t& z$ m    for (i = 0; i < upp_frame_size; i++)2 \; S/ h; p8 T: y0 B7 h) h
    {
0 x* t: `3 y4 |0 n5 ]1 Q       upp_buffer_b =i;1 D' |5 N7 p) P8 s6 [
       upp_buffer_a = 0xDEAD;" s$ i7 i1 r6 Q! A
    }
1 V* d  X; K! h  o9 Q% o) [7 Y( [3 R3 l9 P/ D; }/ p" d
    //for(i=0;i<1024;i++)
( u9 m4 r4 ]& s7 L' N    //    temp=0;
; a4 l! D$ U; J8 I8 W$ Z1 S: r6 ]- G* w) U1 ~! H6 `9 q; K' o
    //UPPReset();
5 x! o& k* I1 b; @    /*启动UPP DMA传输*/0 J/ N6 u; a& [* T6 @6 ^& l6 J
    UARTPuts("upp_prog_dma_i\n",-2);* H( \, C: O7 @% X8 _+ h0 ?
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 [* w/ w# M2 Y( ]! Z    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% w$ \' L6 [& |( ~& ~
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 j4 p0 _/ M9 k+ z  s6 o
0 w$ e9 r+ w2 h' e. r3 m- {
    UARTPuts("upp_prog_dma_i\n",-2);: B% G0 f9 F8 b4 M2 [, f
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;8 W; p7 C. C5 ^5 [" c6 Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ p6 K6 O' e4 U* D" h0 x
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 y' g+ U& o3 z9 x- V% p

0 s+ e5 A) G0 n  X8 j. w& u0 s$ Y    /*等待UPP传输完毕*/
/ n, E0 \% @, H$ @    //i=0;7 y" f6 h6 e  x8 \. b9 y
    //j=0;7 V% c$ P  I! x; Z5 d8 k
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- X+ Y6 L# n- N; a) B8 h5 ~; q$ d( ~5 J    {
' O/ C. t( p% U8 t& F        /*  测试UPP传输的同时操作普通DDR数据- |8 F! M8 g5 {* {
        temp=i;% g' k" o3 t8 r5 {7 y
        i++;
" ]6 Z: Y0 j- H! o. u, t! g5 G# {        if(i==1024)
5 R. S! V% |1 a2 u. i  p        {
, A4 m  Z! y2 Y0 ]            i=0;: F# {' ?- h. q  O2 Q1 g
            j++;
8 P3 ], Z$ U# R6 S        }/ w- D6 n! `( V( U* y
        */
% R5 ?& i# ~  e, B
1 s; o# V4 O4 |3 ]$ g1 E       asm(" nop");  e+ k$ W/ u! Y4 K

* O' K7 _9 ]$ I" W! W. X  v       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' E5 u$ r. ?6 z7 A  X: R    }9 W5 E8 b4 O5 z# n1 \$ e+ O
, j. B( S8 f( |
    /*检查UPP传输的数据是否正确 (loopback modes only)*/, Y0 p! t1 Q. ~" {9 s
    //UARTprintf( "i=%d\n",i);- m- p  U& _& Z* \8 k8 b
    //UARTprintf( "j=%d\n",j);
( |- U, E1 k$ P5 B3 G2 B5 C( B    UARTPuts("Data mismatch in buffers.\n",-2);* [: D2 f$ ]( Z
    if (upp_interrupt_count == 2 && upp_error_count == 0)9 L: [: \3 \2 |! f  S  `" C
    {
( ~! K  V/ e* [3 n# T# s        for (i = 0; i<upp_frame_size; i++)0 ~, o( v* M0 ?' K
        {+ {( N+ q  E9 F& y& I9 T
            if (upp_buffer_a != upp_buffer_b)
/ H+ s  [0 z0 f) ?" Q            {: `8 Y- `  m# t
                upp_error_count++;
5 p+ `  i/ v8 C5 l( P: w            }
% Z; N  F/ |! a1 i( N3 {        }1 g6 `; S2 A6 M8 |; U% ?+ _
    }$ _! A( }& l8 S/ X

) S+ W& ]4 o% X+ y; a    /* 报告通信结果*/
5 o7 Z, u* J# v! M! C% V: r    if(upp_error_count != 0)
# T1 i" e; \& f: ?4 k        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: E8 g. s- T) x* U" `% p9 c    else
3 m9 @- B; }2 i8 r% z$ N$ o        UARTPuts("uPP transfers complete!\n",-2);
% _# ~/ ]* P6 R4 d( i+ a0 ~  y- W/ T6 A) c0 f
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' d5 r0 T/ ~# G1 F4 t/ a    UARTGets(ch,2);6 [  v% r; J; o9 Q$ A2 D
    UARTPuts("\n", -2);
# L6 z9 ~" n4 }, z8 f+ M. o8 G  I/ \' H2 ^7 T/ X
    if(ch[0] == 'y')
0 l& w: `7 t" G( x    {
' H+ F) _: M' ^  P; r6 Q' M        /*打印全部读到的数据*/( C( A3 J$ K9 [% f# B( h& }
        for(i=0; i<upp_frame_size; )) a: C4 [/ s: R" e9 C* e9 G, j& h6 a
        {
) J8 A$ A3 {0 j3 Q+ h) p( z            for(j=0; j<5; j++)
& \! e# s: C- H( O- t0 L; X            {4 w% ?$ r6 e3 l' j( C5 J
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
  Z- }& H7 O5 I# N                i++;
1 m" Y# @: ^8 a! v/ ?' v8 p                //if(i >= 4096)  a$ l5 W- Z2 B- i; g. C- R
                //    break;) i& {& w$ Q6 b( `( P# `% n1 J, C& V- a

. `2 H+ k5 K) s/ h            }
1 C5 E) ?: _/ F# p/ ]) }            UARTPuts("\n",-2);2 _; p$ g& S- z
        }
! h: A, Z/ s! L4 [5 d9 W  h    }; L2 ^+ E9 b0 |8 i) s; e
! r6 |! k3 x, J  q& n' M, K0 W- Q7 u
}

& ^4 z+ M: a6 ]
# @& d3 S; C9 X) G8 a* k& E2 Y8 e

4 {% y1 d# [) }8 V2 l0 E9 e  Q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& k! q8 A8 I+ i8 M: c2 l, q
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 J: H8 `2 [7 h8 f1 q4 b





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