嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& b1 J+ P8 @, E& c' Y; V2 F
Void UPP_TASK(Void)8 `; L! t$ |) s/ a) d1 A
{
2 A0 E- j% Y( S, s) L2 r) {, e' b
0 H/ B. |8 Z, `% Z: ~7 c. w    int i,j,k,target_int_count=2;
8 |( ~. |) l8 {4 @) k    char ch[2];9 t% U4 w; e9 l5 y4 p% m

7 I# f* Q+ Y# E3 n. _6 R: A2 n
2 A* X2 z0 @) @) _$ c+ b7 P2 P2 T  A  U0 q$ g
    upp_interrupt_count  = 0;' _4 @. J, B0 S5 c
    upp_error_count = 0;8 t+ [5 Q# j4 I- m# k

2 W9 z7 U  F$ n9 k# v5 V- j    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: B" a# k" K: h" T0 M$ e    // Initialize data buffers
9 v: L+ c% ^! i: C1 s, }    for (i = 0; i < upp_frame_size; i++)* i1 X  p. M' P1 H! J& j' [
    {
, d0 M7 [* ~! V5 X% F8 y       upp_buffer_b =i;4 p) z4 X& j$ Y/ x8 F5 U* q
       upp_buffer_a = 0xDEAD;
7 i5 U  a- p3 |; F$ n, O0 C+ I    }
) W3 J4 K+ T) g% i4 F5 k0 K
0 b$ N& j1 h% q9 x2 W    //for(i=0;i<1024;i++)
( D1 }8 v7 {+ h4 N( x    //    temp=0;8 L$ T! b2 n6 ]0 F, y, k
8 k; D( p# f. a
    //UPPReset();8 a- r" ?0 \+ `
    /*启动UPP DMA传输*/, Z( F; w7 r; s* P6 e- m( L
    UARTPuts("upp_prog_dma_i\n",-2);/ ~, ?; B4 p- g! G
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 z9 b2 P2 e; V9 b$ W. J
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. X  Q% `4 K( s( u) P8 G    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 |% g2 w$ A' [+ k: l" S- j: _

4 B+ p+ @: g7 T# h    UARTPuts("upp_prog_dma_i\n",-2);/ g# X9 i- u' J1 N
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 I0 E& o6 F1 ~# ]3 l. e; A; s    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) W* J: ^$ n1 F9 s    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 e2 R& R* j- i, }

2 l/ Y, m0 Q& R" |    /*等待UPP传输完毕*/
5 t- {# J3 A# A" z    //i=0;
9 H* M/ Y1 A# N/ R" e# G2 R. U3 ~    //j=0;
% ~4 q2 \$ r* u  i; ]    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 q$ y9 [7 w0 W8 H$ _    {( h% e/ Y: J& F
        /*  测试UPP传输的同时操作普通DDR数据0 M. l2 d% a& A4 l1 O: s
        temp=i;* C5 J4 M/ z% N/ z# R
        i++;& w: d8 u! W$ M5 C. @* Z
        if(i==1024)  L2 e- b; C1 K5 J, @7 r3 I' V% u
        {1 A; a8 y7 h! E
            i=0;
3 S( @$ X" o3 L* g3 h# X* ^9 [! m            j++;
+ I  R0 H) C$ k0 q1 H" `        }/ v9 P5 h7 N; j) E# l5 v+ J1 E6 k6 d
        */
6 M$ [/ ]) Q7 M. q8 K& \  R' k2 I' t) u4 y/ O) Y$ y" f( p
       asm(" nop");, m$ o# }8 ^, \+ q7 r
2 S) G8 Q# ?3 X
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ L4 U7 }2 e! x    }
+ [1 p# i; e& i4 Z' K2 C; S  w" u- O2 p3 _
    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 A( s1 h, u, @: t% p8 G8 z% `2 ~
    //UARTprintf( "i=%d\n",i);
) u( L1 p% ^/ U    //UARTprintf( "j=%d\n",j);
4 d& P4 P' `7 G$ x/ }9 R8 ~( s    UARTPuts("Data mismatch in buffers.\n",-2);
7 h0 B8 ]5 t! B: _2 ?    if (upp_interrupt_count == 2 && upp_error_count == 0)9 Q9 D# E9 }2 P" h( d& H7 L( n8 }
    {
; h2 v' K# i' ?# r8 c2 q, T; X        for (i = 0; i<upp_frame_size; i++)
& j  l4 ~9 H* d1 j- O- ]& \        {
+ W% T& ^9 z( g' {            if (upp_buffer_a != upp_buffer_b)
6 b7 U2 }7 J. _3 x$ E3 g            {
) k7 l; A* t: W$ l- q- ?  G                upp_error_count++;
/ O0 r) ^0 u" j0 ~            }
2 n. F  w( e- D: M9 j        }
2 h- r: P; \* {! a- T    }; e2 v( S& y5 w# l8 s) l
  E+ ^% ?3 M2 N! i- R, u  ?
    /* 报告通信结果*/
- |' ?7 M% {3 K9 r    if(upp_error_count != 0)/ r9 Q  F7 `% z4 i+ H3 l
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 K  }/ U$ N1 U1 |3 ^, w    else
4 J% ]# }" X, N& A! o8 T: X        UARTPuts("uPP transfers complete!\n",-2);2 d" D7 ]6 S) I  P! m

% R; L5 ?7 L  H$ z$ t- Y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- K* [7 r) p7 o; N: h
    UARTGets(ch,2);- o- w$ R8 a' Z8 G2 h) h; H
    UARTPuts("\n", -2);
8 U2 z1 r  \8 E! w/ a7 b  B1 s' G1 m
    if(ch[0] == 'y')
# e/ l1 u- r+ l4 s4 \8 Z1 t* `$ A    {5 v6 n# z5 W2 ~. t6 ^" x
        /*打印全部读到的数据*/
5 w" t/ u) h! }; P" |3 v  S5 R        for(i=0; i<upp_frame_size; )
5 b1 T" p9 A- S& z0 t! n1 R        {
: k* u6 M0 q6 p3 I  h! ?            for(j=0; j<5; j++)7 u* i: Z7 n4 h. l, r' A6 o
            {
% ?$ P& q' j, r, I) H0 K  J' ~                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 U* ~* u  c, l9 h  N- U7 m                i++;% F7 b9 M" f! H- _$ Q
                //if(i >= 4096)
/ ]4 [  G9 @6 E) ^! D2 P                //    break;& {" E( R9 k) @. \9 z% _

: x: E" r! n0 E8 V/ u1 l$ x, ?8 J            }
6 c8 T8 p; i( _            UARTPuts("\n",-2);) C! f. e. z" g5 D3 ~
        }& U) Z. l9 f" ?" ?# a' E1 N
    }* m- Y+ Q" G- J5 `% [4 J
* L4 o9 o# f: r$ z
}
5 r! ~; x$ O) ~' g+ V# Y

2 c4 d% O9 d/ {+ m7 D  W( P* v3 u) O, ]' b% F

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ L$ I& W7 W, o, l" o" P& t) L" R

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 D# j6 g) y7 b1 v




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