嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% h. |7 h% k9 s: a  q! M3 k4 k
Void UPP_TASK(Void)2 j8 V- \0 W3 P
{
' d4 K% \5 K: ?& a( V% _; N
0 l/ `9 N# o  {" h; `    int i,j,k,target_int_count=2;2 t: j1 w% [5 x8 s
    char ch[2];
$ K' W6 Q+ ?) K0 [/ B: s! F  n9 e
, m# _( S+ O4 ~
  I$ N( j& V% C& \
/ g1 B0 n2 e  @, P: A1 p    upp_interrupt_count  = 0;
0 h1 p8 s, r; L& [" y$ E6 x    upp_error_count = 0;& J# {% A2 d9 Z" p+ T+ O5 c3 e' J8 Y
$ T, G) R% x9 K7 F$ x' ?
    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 F' A; }/ c6 I* a' L% u1 n
    // Initialize data buffers$ J) m5 p2 c$ j8 n7 I2 X7 p
    for (i = 0; i < upp_frame_size; i++)
4 b5 r+ x8 U/ S    {
8 t% F1 V7 u" U$ F& M       upp_buffer_b =i;3 w9 h  U' c3 W" t/ O, C1 ^" y
       upp_buffer_a = 0xDEAD;
. w8 y8 z$ V' ~8 G8 z    }
( |1 G  r4 p" b0 `* K# @% i6 b9 p+ y' o* r8 U  T9 W5 B# h& {
    //for(i=0;i<1024;i++)
' v& h" P6 O" Q8 i/ r0 @& J/ z    //    temp=0;3 V& G/ n. t/ j2 L  _; d" I# S
! r+ a. m- J. n8 H5 L  N3 h
    //UPPReset();
; E6 b( r9 N; N- ?4 a3 k. l1 s1 |    /*启动UPP DMA传输*/  y; F' k, \) n, ]; |
    UARTPuts("upp_prog_dma_i\n",-2);
$ g7 ], \9 x/ s* t% m; {  Z9 r) u    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& v- Q3 R9 \  K0 F2 c0 z! ]
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& E* X6 {% V0 n; p6 m
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 i5 Z0 B, v9 Q/ t4 W1 `* R
( ?$ `0 s  N0 e3 t3 m* M( k
    UARTPuts("upp_prog_dma_i\n",-2);, i* k/ M# e5 k7 s) X# B$ a* D
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- ]" F# @. |" F( V* h: H6 @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ M6 q% M: P: _- |. g1 B, \
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 `) J% A/ T* g8 Q! ^4 ^- W. J$ e) e$ S) m! k3 g* U! z7 l
    /*等待UPP传输完毕*/# e$ }9 U4 R, U8 q) M& n
    //i=0;
! b/ S% x/ m$ @; [+ T4 U    //j=0;5 b- `8 X- _1 ~( P
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- ~9 V, t6 y/ Q9 ~- g* s% i& [: T
    {2 h6 g1 U* y8 Y0 E! f
        /*  测试UPP传输的同时操作普通DDR数据
- I3 L* @/ H7 g/ X: @        temp=i;
! v. k5 k: b) ^* o6 J$ Y$ V3 w        i++;
; j+ D& v' _4 m. U" G+ z: S4 p        if(i==1024)2 v+ D( w& U9 C' T
        {
; j3 {/ M  A& Q8 ]4 D" s            i=0;
2 h3 Q3 [6 Y2 E  Z/ y! o            j++;
9 _) X8 E9 h4 k# q& d0 J, ]        }
  p% E4 v+ k3 S        */
4 f3 d) k0 C6 a/ H7 `# r! ]3 U: a2 L8 Z" m2 x9 O. ]' A
       asm(" nop");( u: |* U4 _! a1 g

# `4 V! A% f" L       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 b9 f* N. K: e( A0 c+ l$ i    }
- w; g5 i" z5 t  _  U4 {, [# e+ O1 N! [& l8 m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) a% V) p7 i; M; W! s* y6 Z# o4 R    //UARTprintf( "i=%d\n",i);5 [* g9 A% r7 ^8 d/ G
    //UARTprintf( "j=%d\n",j);
0 g" G6 x; s; ^! s    UARTPuts("Data mismatch in buffers.\n",-2);" W% Z0 R4 |& F" `6 c- l  z/ i' Q1 b, J
    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 Y3 \' x5 h0 \3 R  t# u3 T  K- z/ k    {
% ^8 m  a0 H7 J; w+ W, O! w# e        for (i = 0; i<upp_frame_size; i++)
3 ^% K7 k+ L6 Q; T; [& A3 s0 Z        {7 Y% q& a. z- k9 T" m, \, k1 S
            if (upp_buffer_a != upp_buffer_b)
% V1 ]# p  C, W( H' T            {2 i4 z3 l$ h$ G5 v- S
                upp_error_count++;+ X7 P1 G! g* [. j7 K& ?
            }& G" L7 D3 C6 L) u3 t" I. K
        }
/ ]8 b, k0 S- J0 p    }
3 c1 f: `' \7 m- p# L( Z6 v; i! n' _" T2 n6 D3 o2 Q5 R. x+ r- x
    /* 报告通信结果*/3 ~; H9 B4 N5 b- h! d3 P* M
    if(upp_error_count != 0)- E, U9 Q" ~* q
        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ Z& f# Z% ]: K/ c% D- n. {
    else; r8 y5 M) N, \: t$ y
        UARTPuts("uPP transfers complete!\n",-2);
5 B9 L, J# [9 {: O( C" z
' U: U5 e$ \# F4 d. ]( V- O    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 m+ `. ]! f$ o9 o* _1 Y$ z6 F; o    UARTGets(ch,2);
# [9 m; j0 i% N* y% \. I" O" _    UARTPuts("\n", -2);8 {  B! {5 }( i% o

% X0 m. _1 V* l; E. `! ^    if(ch[0] == 'y')6 |/ J$ f5 ^( k! I) Z
    {
/ i( {# m: x- c        /*打印全部读到的数据*/2 P$ |, ]! |' d% N1 k/ h
        for(i=0; i<upp_frame_size; )
; |5 U& L  n# U        {* Q% t$ [& I+ t6 x* w6 u0 Y& G
            for(j=0; j<5; j++)
. Z6 g6 X4 N/ ]            {! L' D) k/ c4 n7 F* N0 k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" K' I. |- c0 o$ A; i
                i++;
7 f* B. `& B' z+ O  Z+ z7 y- P' S                //if(i >= 4096)
4 k0 r8 \& L  D: n) s- c* p% Y                //    break;
3 }% H7 f3 o6 z( K1 w, t0 u
9 d1 r, [. `; ~5 _0 F3 _0 d, K            }( V/ v4 t! m0 Y
            UARTPuts("\n",-2);
" H. ~* y  T  K: e        }
7 J1 k0 ~) L# E2 q- O/ Q* D: D+ w    }, \0 F* D6 j, P8 @+ E. L
* J. ^) Y6 C' h
}
, @4 u4 _+ l6 D- \7 j, p; n

, p- Q& l" G1 F$ @, o
8 m1 L  \7 J' u
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。& u  `, |; b( `9 A

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! U7 Z0 r6 \; B* u, k$ `! m




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