嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 J' z# ?9 ^0 q
Void UPP_TASK(Void)2 U- L7 G% t$ X3 f& C
{' ~) k# y( `5 Y
6 H# x1 F* L5 p; J: p# H
    int i,j,k,target_int_count=2;
4 H. x5 J5 G! O4 {4 S9 L    char ch[2];0 ]) f* o9 Z! Z' @6 Z' c" Q; b

+ V/ V, f' ?* Y0 J) D8 `+ b- ~
5 O6 \) A0 V* Q  X* C5 n( y
& s- \, i1 Y- v# p* f+ |3 m    upp_interrupt_count  = 0;
% c" P6 |; w" V7 w$ ]& q    upp_error_count = 0;
/ N. ?( d* A! a" u6 C/ W4 C( T$ _' s9 o2 [0 N  c3 @2 f+ ^& S
    UARTPuts("\tResetting uPP buffers...\r\n",-2);5 V! E( o. |' r  Q
    // Initialize data buffers
! w5 A, _! r/ f  j. Q& L    for (i = 0; i < upp_frame_size; i++)# m7 S7 Q1 s; N% m1 f& h
    {
; D4 M1 v3 S2 C; Z& g' M1 W6 l       upp_buffer_b =i;
" i6 L: s( i% U) B       upp_buffer_a = 0xDEAD;* D$ m* k% F8 G
    }
, L8 i4 y/ P& c% S# a/ P& x
$ I  A8 t2 U' Q5 u    //for(i=0;i<1024;i++)
: p$ p; ^+ ~( C- j; i3 P5 m    //    temp=0;! j/ V* k/ z6 |5 u. T+ X; M

" e, L1 F9 r8 ?' u    //UPPReset();) J; r0 g# r3 W
    /*启动UPP DMA传输*/
! x0 R! w" {. p" [* }0 c! m    UARTPuts("upp_prog_dma_i\n",-2);/ S, A! J) x7 }9 Q( O1 k# ^
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! U2 C* r) ~- ^( ]2 G1 X$ S0 n    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ ]5 M- x% Q! z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 M- F& u4 n: a3 w
- `5 ~% F" Z- }* J- k2 Y8 R; q    UARTPuts("upp_prog_dma_i\n",-2);, F! m1 c$ E0 Y3 J
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& ]% o' x+ ?2 q7 j3 k% H
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; ?9 M2 j' R& C  t  b. a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 Y, x. i: v2 k  w9 W$ C

" Y4 D2 D4 ?- Y4 P; H4 {  b% x/ g4 v    /*等待UPP传输完毕*/
" O# o2 G. Z- m" p; t5 p    //i=0;# w( I) \6 }) z6 p8 a% _4 y& Q
    //j=0;; O5 x. z8 A! T2 t7 h
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( Q" A3 U$ i# \
    {& b( ]$ p/ q/ z
        /*  测试UPP传输的同时操作普通DDR数据) U, ?7 N" p7 K4 K. Q2 s, P$ p
        temp=i;
$ V; g( p' f$ H# m' B        i++;# L* {# |6 \1 x! W: Y$ ?, A1 M
        if(i==1024)2 ?, c( W: q/ V% Y8 w) O5 Q9 O% {. ^: s( {
        {
% e" ]  W% Y: k$ u8 o: S            i=0;
% j" f- R" Z" e( }2 v/ }            j++;1 L% ]& S2 B8 c0 Z2 l; y. h- x+ t9 k$ H
        }
. |# r2 ?/ ]+ m) m& a        */
/ Q  ]  U& |! R$ b$ O
1 c, c- \! Z2 y2 Q' e; |0 K3 x" N1 ]       asm(" nop");* ]$ u% l. H" Z/ O6 i
7 h  z' W( d. N
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ C5 B7 h/ B! M7 C    }
- r- q$ ~7 _7 {3 h  o# f
5 d9 ]4 z) ^( u) z, _( _    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ h. G4 v( r! x" M" s5 }; g; c    //UARTprintf( "i=%d\n",i);
+ t, p7 p7 N+ w- U) h# B    //UARTprintf( "j=%d\n",j);
+ T" d, G3 Q4 U( x; `    UARTPuts("Data mismatch in buffers.\n",-2);( p* O& \6 r; V2 _+ F3 I, W6 c
    if (upp_interrupt_count == 2 && upp_error_count == 0)
, O% d$ `' k( ?; ?    {, r3 x( ~* J2 k; ~' ^
        for (i = 0; i<upp_frame_size; i++)$ W" S; A2 ^7 }4 q, G
        {6 d; y# k* |5 k
            if (upp_buffer_a != upp_buffer_b)7 t. h$ d& W6 ^! B2 L
            {
' }- `, \- g2 x+ L0 ^; T                upp_error_count++;4 V- q4 u$ ]2 Q2 g2 y. J5 d- R
            }
4 V6 P# V1 G9 e8 _3 c3 l        }3 c2 h! C! u: I) l; A
    }8 c" O+ z1 F$ b( g) |: l
6 W* b7 L6 `- ~: Q, `; o# Z) v' q6 e
    /* 报告通信结果*/( I8 X( H: W* |- T6 Y# D: R5 J
    if(upp_error_count != 0)  \' G. ]  \% s
        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 u) k. E& T' s0 ]7 L; K
    else- ^' u, i/ u3 G( k) U; t0 E. i9 ~
        UARTPuts("uPP transfers complete!\n",-2);; E  g# d6 V8 G$ I$ ~" R

" O9 f( Q( h3 G0 a    UARTPuts("Do you want to print all the data?(y/n)   ",-2);( q" v+ ]8 C" R4 d9 r/ b1 t& K
    UARTGets(ch,2);: j2 \' F3 a: `7 }' j3 s
    UARTPuts("\n", -2);) a8 B0 a9 f& L
; z9 O- Z5 L6 K* c* |- z1 }
    if(ch[0] == 'y')
! B- Z0 _9 H: q8 |2 [    {
0 ~+ K9 R4 ]8 X1 T0 H+ N: O        /*打印全部读到的数据*/( j$ V5 k2 J5 B
        for(i=0; i<upp_frame_size; )
" N' Y3 V% I4 q7 R" {0 |" k        {# _4 _% ?1 S7 o) T
            for(j=0; j<5; j++)
' G  J4 d! @/ S* D" A1 q6 d3 H            {
1 L* ^* j: Y5 W5 V9 W1 r                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, r0 Z4 T$ _! L7 v- T; Y                i++;% O! X* t) n0 q5 A
                //if(i >= 4096)
! B' M4 Q' x; ^2 F( }3 q% u                //    break;
+ Q5 Q  B3 N7 l
# N+ u! f* B6 ?/ b. g. j/ ~0 L            }1 w' Z" B' Y- I9 r
            UARTPuts("\n",-2);, h( G" b( q, t! I+ p
        }, r* k+ u3 n: ?: \. _- m5 ], Q0 Z
    }: C* F1 d1 d" _3 K) J9 l0 ]

! H' [, r# O5 n}

) _4 i- q: j  r. }- a0 }, ~  A+ n
7 t8 Y& q3 R! \! m4 |) b( y* s$ P: R0 l, y

6 d" c; }  X/ v8 F9 a% h% r& a
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。; {# f' }' n( k! S

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 l6 q' `( R' n3 e3 V% u





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