嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ O! F/ [; f! K- s) e8 w
Void UPP_TASK(Void)3 t( W# n' E( R" B/ h4 @( h  f
{: M$ H' t6 c( E7 J# F* G
* P* M+ S0 T  W9 |0 I
    int i,j,k,target_int_count=2;, L" u5 I$ t8 w( h, Z
    char ch[2];( Q4 F9 i& z* }4 q& H7 e8 I2 V

+ c6 e7 j- t- X" H1 w& d9 r" E  B- y4 y: _/ a
& T) p+ r0 M7 _$ H& C
    upp_interrupt_count  = 0;
1 M- Z0 P( k3 l$ y' a+ I  T    upp_error_count = 0;
* M0 O, S& {9 V1 f
: Z; M/ {$ h  e0 n' F& _3 M    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 V4 W& {/ i% ^! k3 N2 b0 ?3 ^    // Initialize data buffers
" }0 e: D7 J0 k8 k9 w* N    for (i = 0; i < upp_frame_size; i++)' I' W4 u  I$ d( a. Q
    {
3 Y5 O4 E7 v1 ^' [4 p. S) E       upp_buffer_b =i;
) i& F1 O, {/ e1 j& |/ g) ?       upp_buffer_a = 0xDEAD;5 _$ I4 m9 K2 U& z7 E, {" O8 \
    }
  d* V/ {3 h$ R4 F% z- H* s) o9 I6 m- J" w
    //for(i=0;i<1024;i++)
  b7 n+ l2 J" |( f    //    temp=0;
  J9 R# W% R( M; |8 A
/ Y8 m! f9 F' Z  L' ?    //UPPReset();
3 N% I; b/ ~* @; n  @    /*启动UPP DMA传输*/
6 n2 U8 l, d7 c4 R7 a% h) D# o    UARTPuts("upp_prog_dma_i\n",-2);
, z6 z9 H' p) B$ W% X# n    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, V: K! ^5 ?/ {9 n2 I0 C
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: |4 M" g4 f1 [! y    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 \  \2 I3 X3 K% q, ^
5 Z2 I# }# k, a4 X    UARTPuts("upp_prog_dma_i\n",-2);* K# e* d8 W# r2 v( [% `
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;3 A, I) @; O8 j- X
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ R0 l! K& O7 A; P, M
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, O4 [" {6 p% R+ Q: C% X+ z
' M1 y. N# I' Z( b! R3 J6 @    /*等待UPP传输完毕*/
$ t) j0 b0 P$ e- T: t8 H- i1 u' B    //i=0;
6 c( W6 U9 m, S& V6 I3 d. y3 a% ~" X    //j=0;9 h! `6 h& H3 W' x  s1 a6 o/ s9 B
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' R/ R' j2 j) |3 N' G" ?
    {
) q- c+ l5 I# ?4 H1 F9 ~        /*  测试UPP传输的同时操作普通DDR数据& F2 f/ e+ i! A8 S
        temp=i;
0 k, `% m  ^' q0 c( v        i++;
1 E6 @) a" \3 S2 o. _        if(i==1024)3 _+ u* K5 s/ v$ Z& m+ p
        {# C! l6 w% s1 W5 v9 Q
            i=0;. S& D! C; k# i5 H6 v7 K
            j++;
9 I3 p  @$ U& D; p        }
$ z; z7 t; B6 F( O4 |        */
0 t3 y: K- ?7 f9 Z2 s  W9 [9 X7 ]; R! l0 B8 j8 [
       asm(" nop");* n5 I2 G, u9 q, o- w! f
: ~$ Q6 c7 [' z& |5 c: R
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 T' I- G' R2 d4 n( F( ^) `
    }
' B4 q0 N5 h4 y6 t
* U2 }5 V! ~9 e& N  P& K, f, I    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 e9 [5 _( U) V
    //UARTprintf( "i=%d\n",i);, _# H8 Y: X3 `( w, l
    //UARTprintf( "j=%d\n",j);
; p# s( z# I( P/ N4 w: K    UARTPuts("Data mismatch in buffers.\n",-2);3 i0 P8 S: O3 b# P  {6 c- k
    if (upp_interrupt_count == 2 && upp_error_count == 0)# c) J7 j7 M- r# X/ T6 c
    {0 f) w$ C( a0 v( |: F
        for (i = 0; i<upp_frame_size; i++)
# z. t/ B4 D" Q1 C" R        {+ C& f+ B" c1 w/ c5 M4 q0 f0 D
            if (upp_buffer_a != upp_buffer_b)' A- G+ C$ Y/ I2 S# A" w( o# i
            {
+ F+ J# E6 \, z/ g  e; s4 ?                upp_error_count++;0 Y2 v, b$ A  k, c
            }
, G4 j/ s# I+ K1 g        }6 P0 V8 Z1 T9 S7 @# Z% Z
    }
, U- G9 V- c! ]
" V( y% J- R) w) S! P    /* 报告通信结果*/$ y! q: u* L$ ]1 \/ q) }
    if(upp_error_count != 0)
1 l, h5 q2 t0 ^9 u2 y% m, ~        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 M8 L# R' n1 g$ G& r/ J
    else, u$ \8 t8 r9 n% ~) r; R
        UARTPuts("uPP transfers complete!\n",-2);
# h6 q5 v6 @$ a" Q1 n9 v
) k9 f3 q1 b3 I( R    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
1 j8 q9 b: [, @$ {    UARTGets(ch,2);% }- p$ \' @- V2 U$ Y
    UARTPuts("\n", -2);5 [6 E$ R9 ~5 @' X7 J3 D

9 q# ?$ W- [4 t+ S8 }    if(ch[0] == 'y')' f" G1 k+ O9 J$ k" l
    {  `7 b0 w( c2 Q2 }+ w
        /*打印全部读到的数据*/) O" @* o3 Y4 Z" Y
        for(i=0; i<upp_frame_size; ), z/ r7 B" U4 W& x% m$ a% k
        {
3 ?6 j: {3 t, Z; o4 h: p% u            for(j=0; j<5; j++)
) A6 d' V2 }1 F0 v" R3 Y            {0 c1 a+ s* t9 R% h. i2 q) x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);: p/ x6 O9 v0 j/ @3 p
                i++;8 `* m& k5 F# P5 r! T& ^
                //if(i >= 4096)) }5 N6 b; Z( E& j1 m+ L
                //    break;
" V) ^! j6 C1 ?; T! c
* m  d# ?' i# B/ [) S            }
) c: b9 x, _$ [. Q- o            UARTPuts("\n",-2);
8 h4 y* t5 v. I4 T) I        }
! P: F2 U0 ]$ t* I2 `    }( X- E& ?1 |4 J) d6 p4 v

- M7 v' V' r% D' C# V}

8 Y' }9 x- C- a! O5 V) }

" I1 C' b- r! G1 K# o; G5 w' d! m+ h' p+ l. o) m# v1 T# F6 z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。- C; t! g. T. W7 @

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& d' r+ q3 K: y6 L





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