嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) {* R+ d# p" g$ W; \4 u
Void UPP_TASK(Void); c% s4 y2 k0 {6 O5 o
{8 t9 |- Y; e, [$ X3 M3 O8 O
! U7 L' I! @8 j
    int i,j,k,target_int_count=2;
8 ]+ T. {& o8 @    char ch[2];
4 k0 ^; X6 |* P  c9 y! I
& T; K' X" P" p, ~) M* ]) n
- y) E3 H2 F0 R$ F
! {' {5 w0 W) W9 {    upp_interrupt_count  = 0;5 y5 {1 n& _$ C) b4 }1 h) \
    upp_error_count = 0;: J' f/ s! M/ q
$ p2 m4 V' O7 U5 x6 _' j
    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 o! ^! r$ x0 _. I. Q8 G. o1 s
    // Initialize data buffers) `- E+ R; V6 F
    for (i = 0; i < upp_frame_size; i++)
6 ~; ^* Y- t: R% x& h- E, m4 l8 l" b    {
( Z: U8 N9 t1 N  V       upp_buffer_b =i;0 n. ~# c; \9 g' G: V
       upp_buffer_a = 0xDEAD;
6 Y4 S" X6 ]- Q, d2 p    }/ P7 v/ Q% Z% `5 `

$ P* y. c8 Q8 _6 J8 _, n4 M    //for(i=0;i<1024;i++)% r. G2 [( _  N: q
    //    temp=0;
) r7 M" J5 Z4 D( Z% J& Q4 @/ f, a' b
$ @$ {. |& r+ }! k" z    //UPPReset();
8 y6 x- x& j0 F7 U! N8 h9 B/ m    /*启动UPP DMA传输*/5 {, [' g1 z6 ~) F; R- [% L1 _, V
    UARTPuts("upp_prog_dma_i\n",-2);
& w# {4 }" R! U) w    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# E8 k) w: p/ L; E5 f8 \4 |: A0 ^- C
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% M/ C4 ?$ I& J  |
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 J. {  b$ Z1 l" R& x1 u3 [( W$ j
5 l. ^# @" G' j& e" x% C3 q    UARTPuts("upp_prog_dma_i\n",-2);- |0 k# d! K6 o5 A. w* X# L" w6 H
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ Q" E, o4 c8 H/ N
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 g7 h, G4 d' f! |/ P2 w) w; Z    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: t: d7 t% E- B5 F, x

' z3 W2 {& Q3 Z    /*等待UPP传输完毕*// s$ U) C+ ~7 S; n  v) k
    //i=0;
2 ]  A  }& P8 n- d7 f! u    //j=0;3 T3 ~, q' E  o' d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  `( J) q+ _0 T' N' f. c    {  i8 c* M" C4 T* _1 x! t
        /*  测试UPP传输的同时操作普通DDR数据9 T9 O$ R7 f( B0 A/ a+ y1 V
        temp=i;
0 H/ |  o; x( H5 e4 b1 A        i++;
0 U! C3 s5 j7 V) G        if(i==1024)
5 ~  F% f; V# B( h( `! ~. m        {
. _: O( C- x9 q. W5 S            i=0;
4 {9 R6 L; N9 R5 }. T8 h            j++;
' y$ v5 a0 A4 i( u$ [/ |/ M6 W1 {3 G        }/ U4 ^# [2 T; n6 K7 q9 G
        */, F4 `0 M( z% ~; @

" J4 h  ]/ ^6 A# {$ X       asm(" nop");" A9 {5 E4 ^' z

2 j. M. v. j9 q. M2 @' _       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);  d( I# ^) F1 M
    }: r- c9 _; N. n+ m- Z* ~5 j) Y

* K* R4 y( ]8 I7 W    /*检查UPP传输的数据是否正确 (loopback modes only)*/) v  P, _6 `  x! e% [0 V
    //UARTprintf( "i=%d\n",i);
+ h) @- Z8 c) }9 n  `' l    //UARTprintf( "j=%d\n",j);
: `3 f; F1 U1 t: N- `" \) _    UARTPuts("Data mismatch in buffers.\n",-2);
" Z( u8 g/ T& s+ G  R4 |/ c    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 Y& p. j5 ~8 q    {
0 E* O5 t1 Y- l" o$ ^5 e/ W' o        for (i = 0; i<upp_frame_size; i++)
: K, m+ C3 R4 Y! M& `. C        {
1 g$ G/ o& g1 y/ j            if (upp_buffer_a != upp_buffer_b)6 Y8 m6 h! i0 W
            {
# R1 s* n9 c- v9 e, Q                upp_error_count++;, X0 n1 `1 u, f2 e
            }
8 W/ p8 I8 \8 P& N4 S/ C2 a! k        }
" N' M3 T/ Z  q9 `* |$ _    }3 C# b1 w6 W2 X
0 R1 h6 C* G& K  n: {
    /* 报告通信结果*/
; C  z  P6 U) p. e    if(upp_error_count != 0)5 T: V# d3 o& ?. F6 F% S
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ Z: f- ~7 C# q% L7 C) _
    else& t6 x/ u  H3 l1 L
        UARTPuts("uPP transfers complete!\n",-2);/ ^* y/ h( {& S. `: c- E: _

7 X3 w8 f$ {2 v    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 |' G) ]0 N: d  l8 M! c    UARTGets(ch,2);4 I/ u: [) U6 L) `6 ^
    UARTPuts("\n", -2);/ U1 Y/ @; x  z% h: M2 {' v

( O% r4 T6 @& Q    if(ch[0] == 'y'). @0 Q8 x& I6 `
    {
# I6 p: _. x/ U& b        /*打印全部读到的数据*/
: h0 M' ~6 s. b        for(i=0; i<upp_frame_size; )
0 `! U% @# z3 J5 l        {. Q6 i5 X9 s. {1 d/ s; x( D
            for(j=0; j<5; j++)- h4 [4 E" e( F! J* U+ {
            {. O# ~( [5 p, @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);$ l3 r! e' V6 m- e) G
                i++;8 h0 G5 ~1 H: F4 i+ r' N6 ^
                //if(i >= 4096)8 C  `6 g8 a: Y! W( A+ ~
                //    break;( r3 Y5 c0 \" b5 V0 m# u/ `' m

" }) k3 I7 i/ t6 F            }
, {4 ?3 S) E5 H- ?3 n            UARTPuts("\n",-2);" A8 u- ~/ S6 \8 W
        }% |+ t! i8 p$ G# |% o9 S
    }
* u! G: c3 k4 I' V$ _5 N  l. V2 \9 i) ?2 B1 F! y: ?
}

2 e% G' P' M4 D& p) t, z5 w

. L! I/ }+ a2 D$ Q" e
- Z; h  X8 F  q' V
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ w2 Z) l' K7 q9 g" s+ n. z7 k
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 t' L2 M! O  q3 O/ D) i* u




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