嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?1 c4 h* F' w6 J# H. C
Void UPP_TASK(Void)2 C; d4 S3 C4 E9 H# k& @4 @. ~6 L8 B3 y
{
6 w! A8 N3 J3 Z0 X" r9 q6 {# P5 u# w- o
    int i,j,k,target_int_count=2;
# P) o' ^# a8 s% x# x. e    char ch[2];* n+ D/ Y4 q3 X1 ?# E, o
' V2 H# P7 k; a5 Z- N, t! r

. j8 Q$ \& w6 ]8 w  W8 P  m
# _0 E- T% x0 X2 ~* S# v    upp_interrupt_count  = 0;
& Q3 {6 r* t" a3 F+ x+ }    upp_error_count = 0;
1 B6 ^9 F% M7 E) t  |! y& ?7 d+ x& J& c' t. _8 v
    UARTPuts("\tResetting uPP buffers...\r\n",-2);5 R* g; z; s5 G- `$ t
    // Initialize data buffers+ H9 {" u2 O8 B7 `5 r9 D& t
    for (i = 0; i < upp_frame_size; i++)/ ]% i& g6 `- |0 }
    {
: ~3 y, e  |4 q; l' c- A5 K& d* u6 l       upp_buffer_b =i;. r" T! d$ V& s9 R- l5 C( E
       upp_buffer_a = 0xDEAD;
; J, Y8 X) e! a9 L- P1 M/ X    }
" l3 D; K- D5 M, m( X( u3 y+ `) W& E) i/ G% b. q
    //for(i=0;i<1024;i++)
  R: F3 s1 Y- K* V& K$ o    //    temp=0;. ?- r0 G8 W2 Y

. W$ ~+ v2 G' u$ T  V- Q    //UPPReset();
, A3 J2 m. j' ?1 E1 C    /*启动UPP DMA传输*/
8 u" K. u) z, ]# @1 a    UARTPuts("upp_prog_dma_i\n",-2);& x& n6 {3 X" Z! j
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& _# j* C% u, F' J# R7 [2 E( M    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, z0 L  b$ F$ G; V5 p
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; S5 H7 g, {7 a6 G, b! \4 h& G

2 A7 X0 e3 }. o    UARTPuts("upp_prog_dma_i\n",-2);) r  a' D) [3 u( m8 B1 j
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* Y/ e( k5 i" E4 S! p    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 v/ m' _) C: j# a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ C! {4 l1 Z8 Q" e6 q; s( a- k5 e; M
: I% |& X. ^" \, s3 n4 y  R    /*等待UPP传输完毕*/
7 f& I  R# i) h5 X8 |4 P    //i=0;% i3 }9 ~5 h% g! s! o$ H" f& n
    //j=0;
, M* \4 R; J+ d    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 i6 z3 A- E2 |    {! `" y6 B0 G4 M$ {( K
        /*  测试UPP传输的同时操作普通DDR数据9 L5 h* K# e5 s8 h; g1 V: r
        temp=i;) w& Z' A* L- ^  F. o/ d  z
        i++;
7 |- c' z& W3 d. C$ F9 h9 d) [# v        if(i==1024)! M* K0 _9 F. `; ]* `! d
        {
: ?, l/ Q& X* C* u4 b. a            i=0;
0 A% J2 B' }2 |" j8 C8 a            j++;
( y* y7 v1 s3 K+ _        }/ x2 v2 z( N% d, M7 z% Y
        */  |( q# U# e$ ?& v- ~

" r; E. q6 p3 z, A8 M       asm(" nop");
5 T- j; ^  ~& u2 x0 K, Z  j& _' i- e3 j5 r- E
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);2 V  E& V8 o  t- }
    }
* ~# F* A/ ?' C  E. X- M
9 X0 ~% S8 M7 Y! H    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 `- i! ~) h4 m( x1 M
    //UARTprintf( "i=%d\n",i);
! c6 |, L$ l  A/ D( r" I    //UARTprintf( "j=%d\n",j);! d7 V+ Z; a2 k. C+ }3 Q- ^& y/ I! u
    UARTPuts("Data mismatch in buffers.\n",-2);# U4 J$ i+ k4 ?
    if (upp_interrupt_count == 2 && upp_error_count == 0)
+ W0 Z+ ]* y! w7 c    {7 P) D# m6 |; U0 I
        for (i = 0; i<upp_frame_size; i++)
3 n% n7 a' t( x  V- T6 B& v        {
8 l8 \; u- H$ {            if (upp_buffer_a != upp_buffer_b)) [5 T# R3 q+ A# z
            {
1 A& Z* o  ~# c8 n: Z7 b: n2 V' E                upp_error_count++;
- w# j% {9 U3 p9 K' H3 [% R            }
2 k! r0 F, [8 m        }
8 C& ?8 M. }- M3 E4 A; q    }
7 @+ n  D" z# h: C) `) E  O4 b) [" L# ^! v2 J. V4 }
    /* 报告通信结果*/& ~) m' I5 Y" F' c9 c4 o
    if(upp_error_count != 0). B2 P$ o2 l! O8 @; S, {
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: P8 {) P* {* F* m) d    else
1 S( n8 p- f( q        UARTPuts("uPP transfers complete!\n",-2);
* y: j& }2 h) A/ ~3 X, @1 m& ~
0 |# J/ B, o& j' s    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' n6 X, T% j/ N1 }, c* u    UARTGets(ch,2);  J0 _- T* \' A  L0 F, @" C8 b9 J! ~
    UARTPuts("\n", -2);
: D% o' A" X" J* U/ @, A; C* r( c' Y4 X, @% n
    if(ch[0] == 'y')
( e( \6 |3 x6 a/ ]    {' q& ^: q& E* V1 ]# F
        /*打印全部读到的数据*/& N1 A4 {% Z- `7 n0 E& G  h% m
        for(i=0; i<upp_frame_size; )2 U6 H7 R# M# F( q
        {
! P5 Z8 V9 b3 K( |+ L$ {' u- X            for(j=0; j<5; j++)
0 n8 _8 U  A! D            {- t2 v& H, t9 y+ `5 s! W/ y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* B4 i. {8 i4 s9 O: m                i++;7 W3 g8 _& k8 f2 A1 x
                //if(i >= 4096)
3 t6 S8 h0 K5 [' ^                //    break;
3 B! d: s6 D# |; N$ c- N2 x, N3 I  S# j0 F- ~5 W' n
            }* u; A1 A  q1 f) O
            UARTPuts("\n",-2);% F6 U+ T0 G4 R! c+ g; y8 i/ w4 c
        }
: F* V1 S0 e$ w+ @! [) @0 Y    }
1 u8 z' |; ~( b% q, {# }
) ~; r  i, i4 H* a! j  N; C}
9 `' f: ~4 U# n  C0 C; q( i! `
: s. [/ j% O3 O' t
6 E# Y8 F, ?4 j- P; W7 Y

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; r% O7 u& I) h! O, W
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 L, O6 ]- a+ h





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