嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; j4 s5 S; x9 B
Void UPP_TASK(Void)& e. T; b; ~0 V2 e' c7 n- a
{+ \+ T7 V' `! v0 e0 f, G
- [. a8 G% f1 }% X. A- R( x% \
    int i,j,k,target_int_count=2;
$ g; ?5 k. G+ s! M    char ch[2];
5 b9 m7 a! A( X& F+ ~. t' i+ W1 [& \/ E9 z
# [) n' f- x8 C* H

# @/ d* g: c+ W/ O    upp_interrupt_count  = 0;
; o5 O" d, {  H. P' L* W1 z- x    upp_error_count = 0;' Q- F0 C, @, w1 q4 H8 R

! O1 a/ H) `( T4 F9 p7 g" u    UARTPuts("\tResetting uPP buffers...\r\n",-2);) ?  e( m* |6 E( U( P
    // Initialize data buffers
6 ?5 [% {' w# y  N6 C# X5 V    for (i = 0; i < upp_frame_size; i++)0 f3 e+ @( T& R. n  x# k/ `
    {8 N3 S3 [# n! l0 j& i
       upp_buffer_b =i;+ T' d% u9 t7 S0 @
       upp_buffer_a = 0xDEAD;
! i% Q0 I5 H# [8 Z4 q    }
/ C. h0 |% g1 y3 m$ N& N7 m5 \
    //for(i=0;i<1024;i++)
# t" Y5 G7 p/ Q% G$ e2 h    //    temp=0;
- k. E- W# e) Q! z; ?9 ~: W( \3 d0 u% p( m
    //UPPReset();
+ l6 F3 ]7 \- N4 i    /*启动UPP DMA传输*/
' D. a5 a7 ?6 h3 P  w0 E    UARTPuts("upp_prog_dma_i\n",-2);
8 L* v) C' P: r8 x& m    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- T# h/ M, ?) R0 C; s. M% g    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! v) j7 ?2 b* T& Q2 C    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( z6 e. \- q& j& s6 F6 x- |
2 N: [4 V) T7 w3 G    UARTPuts("upp_prog_dma_i\n",-2);
! _$ [+ P2 }4 [    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' t1 @1 H% ~' T6 {4 q% V9 N4 f) P- j
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 |5 k0 `% c0 `0 q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);4 a) i+ ^- o, l: U( g/ I9 g
5 W0 h. I) A6 h* f& x* v
    /*等待UPP传输完毕*/- O* U+ }4 h& T+ Q' V1 ?. [) n
    //i=0;
. n" X5 B& d/ }, h! _2 q    //j=0;4 i# V& k7 ?/ C( U; T, Q
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)4 U! w0 C' |: ]8 |8 v, z% o( W
    {
2 y+ d- f; l9 f) |        /*  测试UPP传输的同时操作普通DDR数据  b4 K8 Z" p1 Y8 Z; I% |
        temp=i;! @( l: t2 D5 ~
        i++;
( V% h+ F+ [8 z) h( A. Z        if(i==1024)
% V6 k( n) q' M        {2 v5 G+ R6 g: u  a
            i=0;
8 r! h1 R% K( a4 R! x/ V            j++;3 f, ?% Y/ l! r) a; b
        }
) F; v! |; U* ~- U# l3 X& g9 ^& s        */" j% k5 B# v9 X# T8 w; S0 @
/ C+ ~7 i7 v2 [
       asm(" nop");
! x* T! i3 j1 L+ @. @
. z- o& u5 v% Z6 s4 ]8 x       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 M! M) [/ \4 j$ n( l! P    }% Y9 w- I1 s+ J. }# K: C
7 |2 P9 I  R' L) a. t
    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 J7 R/ p7 P6 D0 y, P) v5 p7 H5 q
    //UARTprintf( "i=%d\n",i);
) `" y8 O. k0 Q2 A    //UARTprintf( "j=%d\n",j);
& j9 C! o4 W5 H, C% w    UARTPuts("Data mismatch in buffers.\n",-2);5 y0 q& `9 G8 p8 l
    if (upp_interrupt_count == 2 && upp_error_count == 0)$ v$ H' h3 H0 ^( G# _
    {2 n0 R% b% i9 m& _; a
        for (i = 0; i<upp_frame_size; i++)( H9 t7 A, J6 H* l6 v
        {( }0 R4 y9 m/ k" s9 q' z
            if (upp_buffer_a != upp_buffer_b)
2 }  @. h3 [7 [3 [3 e            {9 s+ q9 l. V6 n* O
                upp_error_count++;
& W: W  Y0 X1 ^            }
. o5 D1 \% y; V  z        }
- N+ m/ F( T! Q8 b/ l2 f: u9 i    }, r) \& ?# p1 y( [4 T7 r

) y( Y9 @% R8 C$ E7 h9 e5 u4 J3 ?    /* 报告通信结果*/% B2 I2 k$ G8 \5 v, W3 I
    if(upp_error_count != 0)& r7 k- W; W5 H+ E) C3 g
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
. B( @9 l" o9 E3 B    else
+ v3 M7 P9 \" p1 b( C        UARTPuts("uPP transfers complete!\n",-2);
9 F* j4 s! E1 W6 G
( K8 R. K1 |8 j  X; q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);+ T5 }# K& Z- R7 H( g8 {2 W
    UARTGets(ch,2);5 S3 F+ @4 b8 V+ p. m' ]. s
    UARTPuts("\n", -2);
- d& d* w; f" F( }1 S& e, z
! U) q3 R' T+ K7 B8 s3 Q5 n0 q    if(ch[0] == 'y')& k; V5 O  I2 x# s# Z6 Q- y
    {
6 [$ ?. |8 B/ i8 d7 f5 G8 G        /*打印全部读到的数据*/
: U& ~7 g$ }+ N% \        for(i=0; i<upp_frame_size; )
4 C; T3 w, b# M# r4 Q: Y. g! s        {; ^/ x8 D) A: ?% n& J; C+ N" q, _4 q1 C
            for(j=0; j<5; j++)
, r+ ]) T* b2 S. ?/ W, }3 j4 C8 y6 u            {1 h0 ]$ m4 H. A
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 ]0 Z* @+ Q8 U
                i++;  x& d. Z# J" Q
                //if(i >= 4096)7 T" C- I8 ^7 B) {- q8 k, E* K8 T' _
                //    break;
+ e* @/ K3 _8 H, c9 L
1 L- G3 A0 q! B/ I- Z6 t8 I            }
3 M4 Q, @& C' M* [( k            UARTPuts("\n",-2);/ i' Q5 m! |3 t* C! l  z
        }
9 m5 k; Q' h' e! B* G    }
# z- ?# F* ?9 V0 j3 k* N; q
8 A3 ?% j# i7 K3 h2 m}
( g$ Q, D1 z( @$ e" f

7 m7 @4 a0 f, H" q4 S* R- x. ~& C* ^3 |% N/ C; W$ E/ ~. u, B  A3 s

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 h6 J/ J- G2 f5 p
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! b7 e( i' J& F, Q" Q  M





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