嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# F% A# w3 n) N9 D
Void UPP_TASK(Void)4 |9 K$ O, i, f& k
{; t& j% l, R; N# H: g7 e8 Q: y
5 z! w8 I4 f7 x* N
    int i,j,k,target_int_count=2;4 {  ]! y! l" J5 ^5 ]- H
    char ch[2];
: W# z! s6 ~  \3 ]* F2 [* o- w. o" d. d
. g5 W% E4 O/ Z# R" O5 Y) g# }1 `0 B) Q: K! A5 W& c& U

& z& a& D/ ?' P+ j    upp_interrupt_count  = 0;+ K+ P* `. A9 s) K" g9 m
    upp_error_count = 0;; E: P: g5 q  ?1 F* ^  n, E

) K. ]6 X) t0 k! R' R! P) G    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 M3 X' j! e' ?, `7 Q5 f    // Initialize data buffers
% Q% ~, K* R, v; k/ ?  v. `    for (i = 0; i < upp_frame_size; i++)- |! b, Y+ {6 Q, w2 ]
    {
6 L1 H0 _/ S8 s! Q' D       upp_buffer_b =i;
2 h. {" O; d* D' _       upp_buffer_a = 0xDEAD;
" i/ C+ m0 D* ?/ h8 P! w) i6 Z    }! w6 Y/ \8 p. d: i" \  z
; W! C+ B7 G( x( x% I: V+ l
    //for(i=0;i<1024;i++)) V0 Q, }2 Q3 ^8 R# J
    //    temp=0;
) Z/ {- u2 \0 M( h3 j& s8 a! x0 I
1 W" u% M0 X( }, z* k  j    //UPPReset();0 f3 W( S; R  P3 u+ ]
    /*启动UPP DMA传输*/
4 V# ?8 I# E7 J3 l. |# O6 l2 c7 M    UARTPuts("upp_prog_dma_i\n",-2);, d% t% f: u9 G! p6 ^+ Q) k0 M* f' t
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 U- V# e/ A8 V) e5 f+ f8 E% U
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- @$ D" S2 r/ L: G3 A8 e7 M0 o    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 x' k7 `$ q8 ?8 k9 O" H; {6 h3 N" K2 G( j* {
    UARTPuts("upp_prog_dma_i\n",-2);
/ D, u/ l  v( y" C0 c4 [; s    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' p+ q* J) u" t( k( P- S3 m
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 T/ a; B; U2 z1 E/ H0 Q7 s    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 h% }9 J) H% w! K$ w* p7 T: l; {$ k, W% h- G
    /*等待UPP传输完毕*/
8 ]; p4 T! C5 ~& s3 ~, |    //i=0;+ i( w6 l! T8 A% x, {- R
    //j=0;$ k+ Q) t* M2 O$ [
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# F) \" X) L, P+ r) q/ F% i    {
& [, Y+ N, U" s* |        /*  测试UPP传输的同时操作普通DDR数据
' Q" A4 O, c$ v. @5 ~  |1 K        temp=i;
" B" [+ {: Z* D+ R7 e% |" A        i++;! J3 J; J" G6 l6 F
        if(i==1024)6 a# h/ f# G  i6 w$ r0 f/ T
        {
7 v6 P, {; U5 h( g( @/ |3 D# q. @            i=0;
3 G: O$ ~3 i/ O7 V            j++;
/ ?  J; u+ i5 z4 g0 e        }, ?# R( q; B1 o: J# M: E, I4 C
        */
6 ?& b" {" I  X6 _
/ D' D" [, s* x5 M4 i! _6 i       asm(" nop");
+ z& a5 r4 |& }  @$ @5 r% R3 V1 E1 I* [1 v' M5 Y7 C* V
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- o% d& R1 s* N9 _4 l    }; t9 K) o3 u  J/ x! f1 v
+ N+ r" E' c, [/ [4 ~$ l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
! c2 O( p+ q3 K- P    //UARTprintf( "i=%d\n",i);/ ^# ]6 T! P) e7 K
    //UARTprintf( "j=%d\n",j);
. @8 z& q6 w% D& p! K& S    UARTPuts("Data mismatch in buffers.\n",-2);
2 T9 L9 ~) x$ ]& e. m/ j    if (upp_interrupt_count == 2 && upp_error_count == 0)( e! F$ t# w6 ^: l, L! R5 F7 ~
    {: v! n; j' v0 z, p
        for (i = 0; i<upp_frame_size; i++)
: y4 y; X% ]9 v8 l+ U        {1 x1 E) r; n( D0 \$ o
            if (upp_buffer_a != upp_buffer_b)) ]! F  e0 v7 x6 ]  i" ]
            {
$ P/ w2 i4 c1 ?5 t6 Y& H7 r                upp_error_count++;  A6 _: S& Y9 P# f3 u$ L
            }
) X& _" R6 T7 Q: Z( |        }
, |3 B4 A$ X/ N. z- b# }' @    }& ]: d3 F, T& ?  c
4 d# ?) x0 T  G& v3 \" Z6 k
    /* 报告通信结果*/
3 T# `' \, j: `, {, s    if(upp_error_count != 0)
2 u+ W! W: J9 U8 O. n! D7 e6 H3 v7 g        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, x- M9 ~1 x( f+ b0 l    else
) F2 L, g. F2 \! }% w# Z        UARTPuts("uPP transfers complete!\n",-2);/ b9 S5 [% l3 ?: l5 X

& w3 |6 _1 N9 X" }( x' L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
. H- w/ M6 J; E    UARTGets(ch,2);( h9 I! n& h$ N( V& k2 U8 [
    UARTPuts("\n", -2);% W9 z! M7 d* j$ I

* R( p3 E$ R, G/ K$ ?& @2 m9 h. P    if(ch[0] == 'y')
* M3 x8 d, c1 o' ^$ o6 ~" `    {9 ?( r, U4 A' r$ F. v
        /*打印全部读到的数据*/2 O; }& o) Q- [, s' Y1 D5 v
        for(i=0; i<upp_frame_size; )
' o0 Y# {: {. R! K5 a        {1 _; Y2 O; d7 }% w- Y, j3 t5 ?
            for(j=0; j<5; j++)2 H" {$ m8 m! F$ W/ \
            {% x9 O) R7 T, ~. U, r; `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 W& q8 b9 i/ x: x- Z! @4 k                i++;2 I6 K7 c/ q2 C# `! y
                //if(i >= 4096)
! F* @3 z' h1 n8 h9 a  a                //    break;* _; v# P2 b3 s" i3 U1 e6 \
# W) C8 A; ~- F' @4 |! C$ _8 l
            }
' g$ c3 U8 k9 G1 E            UARTPuts("\n",-2);. f, A" r* G. D8 m2 l
        }
- Z* A4 Q7 U9 V* _# j1 F# F3 D) w  l    }$ R; U6 C5 P1 p+ Y

9 L% ~$ a4 B' G- U  P  f8 j% i}

- B) j  t" f4 v" z0 S
) P1 f  e  Y9 E! }6 h. N

0 `' l8 H+ D+ d  `9 U# `/ O
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。7 B  ?& }# R* R1 u& g4 [. x

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* H$ U: _4 d: C, ?0 b7 g




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