嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- D6 O# s( I1 ]) f# I
Void UPP_TASK(Void)6 S% {/ O" [- k' y( |: I  J
{
+ Y: N# K4 a1 D4 e5 ^* s, T
& a3 }1 G# i8 D% {    int i,j,k,target_int_count=2;  B* ]. s) z- v9 h
    char ch[2];
$ z# s+ Q& X" Z- D7 t4 @/ R6 Y# {6 u1 i0 W
& ]& @" Z3 x4 H2 h1 o0 I2 D" {- {

2 a0 q- l# B( t& m5 F    upp_interrupt_count  = 0;
) ^$ O: j4 m6 I' G' g# z4 I# S    upp_error_count = 0;- l) V: e4 ^, }( j3 g# Y& L4 }

! u$ Q2 D. B9 b7 R8 {    UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ @& j( A  L3 \4 ~    // Initialize data buffers
* r) V9 b5 Z' n' |! N    for (i = 0; i < upp_frame_size; i++)
1 V4 o4 x/ S6 \6 W' e( s2 ]' S    {7 T; y: V' U2 Q: J6 A) p
       upp_buffer_b =i;1 U4 V# f: q, \* L
       upp_buffer_a = 0xDEAD;3 d9 O3 I3 ^. B9 x9 y
    }# U* @0 O  f2 ]
8 P, O5 z7 u5 J" \
    //for(i=0;i<1024;i++)
' o' C" G' l4 V    //    temp=0;" f& n9 |0 J0 F% S) }7 d

' L& y3 Y- l8 |! p; V7 ^. X5 n* W    //UPPReset();% y" s0 X! w$ \5 J' t+ c) @
    /*启动UPP DMA传输*/, i# b: }5 p( ~+ w- _4 ?8 K2 Z' b# F
    UARTPuts("upp_prog_dma_i\n",-2);, W5 E  r  t) i* q$ T6 ^
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 ~! q6 p2 E6 b" J    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ {5 e1 U( e; n1 U    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 W6 S9 q, V1 o. f3 I  K& q$ w
! o' @) N# t$ v+ Q- a
    UARTPuts("upp_prog_dma_i\n",-2);
" k8 n/ @9 F6 Z8 M2 w( ^2 E% O    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ |( n8 v* O, [/ q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; F" E8 b2 R' a2 c% m( @# k# H    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# o8 m7 V, Z# H. C) k) _" N- m" w( T0 F: E5 n( Z
    /*等待UPP传输完毕*/9 W1 u; j; P1 }* Q1 u+ m0 r
    //i=0;
6 K4 H- q9 y; [- Y8 q0 }    //j=0;& ~; M1 D+ i. c, b# }, H. l
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( ^- n3 q- n5 z: {& I
    {8 F4 \$ Z8 Q2 L: f, v" i9 |
        /*  测试UPP传输的同时操作普通DDR数据
+ W  p5 b5 L/ d        temp=i;) L2 ]5 _- M8 R+ W) U9 H% I
        i++;
7 h' T: D* t2 g+ j" p3 s" w- k$ G        if(i==1024)
3 m, U: Y0 o2 Y        {& i# q9 q" c, X( f4 i
            i=0;( r2 c  w) _. S  L1 |
            j++;
5 e* N1 s/ F0 A# w2 E0 m        }$ `' \2 s& b! ~; f) @: i& D
        */
9 F: ?# a2 t& q4 u5 B( Y( z; Z; |$ _0 x; B5 [2 {
       asm(" nop");9 F$ t, w! x' F8 q2 }" ?% m, K

3 {2 [: p: ]4 O$ P       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  }. U+ l+ c* Y3 E+ G* s    }6 t5 y, ~% B0 M- I  `' d
5 U7 M$ v5 }7 F1 f, m8 U
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
, Y* m# N: K6 g    //UARTprintf( "i=%d\n",i);" T" K4 y6 q4 \9 a) {# {
    //UARTprintf( "j=%d\n",j);4 c9 d" q' M& `0 k  k
    UARTPuts("Data mismatch in buffers.\n",-2);2 p* T% T9 H4 K# B8 `+ s5 ~% G
    if (upp_interrupt_count == 2 && upp_error_count == 0)
: w$ z5 l# S+ k8 P  g3 V    {+ N9 w/ m# m0 {3 y( j) l
        for (i = 0; i<upp_frame_size; i++)  I" ]: H  C. c: s' c, {( x" U
        {
3 z5 Y0 i% L$ ~* Q7 y% ?# t            if (upp_buffer_a != upp_buffer_b)% c7 `0 ]. i  x8 p6 Y( X) o
            {
+ R( x# t! B! p& ]                upp_error_count++;
$ C5 }* o1 T9 J6 i$ E3 F% B            }/ p. o2 r5 k( C: v! b, X
        }
5 {: y* @& L6 G% c' O1 W* ~    }* S  u% t8 a1 L$ H4 e3 ^/ N) n
5 J8 |2 j( A8 l2 f4 f3 J4 N2 ]
    /* 报告通信结果*/+ y! g0 ^( i- g, p% v7 r
    if(upp_error_count != 0)  f. g0 C$ r% ~2 t+ t: r' ?
        UARTprintf( "upp_error_count=%d\n",upp_error_count);; ?* b! t1 z1 @; c, ^3 a
    else
' x) w, d; ^+ {8 w        UARTPuts("uPP transfers complete!\n",-2);
+ j1 ]+ K9 J% y- y* C; w% [5 U, _0 o' e( s3 c  X9 t. k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 B/ e5 `" R' B7 {, U8 P5 b
    UARTGets(ch,2);
9 a5 Z: l% T6 t# j; S    UARTPuts("\n", -2);
* H; Q! B, T6 G* W; O0 N
) u" {6 I- U) X8 h: O7 R    if(ch[0] == 'y')
" d0 k/ E+ l+ m; E: u    {
* o6 U: |/ \/ i2 l+ }4 w: u        /*打印全部读到的数据*/- n( G1 g0 W. U
        for(i=0; i<upp_frame_size; )
" C& a( b' d# y) s& ^        {7 h5 J7 d( l8 G# y8 X( e1 ^
            for(j=0; j<5; j++)
1 S6 [4 ^# u$ ]7 t            {$ ]$ w; M( T9 F+ ?
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. s: P" h( |, m# }! T; x' U
                i++;. O" I! E: D* g& ]
                //if(i >= 4096)5 q/ S. F0 \/ b% f- P8 J  i  U
                //    break;
. w5 N* J8 L9 y/ W% M
; T, K" x  s% X% }8 Q            }. Z2 _$ v2 N2 m( P. Y- b
            UARTPuts("\n",-2);/ O, w3 q- y  B
        }0 O4 A% L% Z9 s. Z1 x+ D
    }/ ]6 [* \# |" Z

; q+ Q/ h% o+ c8 s}

5 K: [# J  o& R! A

- X/ N" Q+ r# _! L
# c) F, y) |# ?( E' e7 G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ l8 x0 r8 w8 a" E/ @1 [2 r6 e1 F
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 A6 W) d" Z0 I0 N





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