嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- _( S+ X$ P. u4 r/ Y: G- L
Void UPP_TASK(Void)
4 |+ P3 {' Z3 a7 Y6 X: D{
, ]: r$ `  s  \0 K! x5 y  k! s' Q9 p! m( s+ m+ U+ ^
    int i,j,k,target_int_count=2;
1 E- T& ~4 \( o, B8 }    char ch[2];
; `* A, Y( y8 e. d
9 a' l  m+ A6 H. Z- x( l& \( m; K, S2 }2 w4 f) w
+ d8 U5 g* n" U& ^8 r! o. C- H1 n
    upp_interrupt_count  = 0;
* X% e2 B  i. }1 ~2 X& j; G! \    upp_error_count = 0;
4 v; J& f* _0 j
7 p" }; ^# \: v' @; p3 e    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 z4 [: a5 N8 ~2 s/ b) l* J    // Initialize data buffers
2 H. ]* E3 ~& t5 U    for (i = 0; i < upp_frame_size; i++)
# l) b5 J' _. w5 L6 t    {
9 i* h% Y: }4 y, p& ~+ J. I       upp_buffer_b =i;8 p4 W# S5 n' Z1 t' Y- x
       upp_buffer_a = 0xDEAD;/ l8 e# ]) U9 _2 ^0 K: g* T
    }
  N& {/ H3 X7 }0 Z1 D' \+ ?1 C* T/ z' C
    //for(i=0;i<1024;i++)
- R* I* r1 p9 b' a6 d# z  q* m    //    temp=0;' O2 f% ]0 v- T4 _0 U
, E- X4 V7 r' h, r& e* \
    //UPPReset();
2 q0 Y/ j7 G' ~# g    /*启动UPP DMA传输*/
! l0 h2 T, c% a! S/ g2 s    UARTPuts("upp_prog_dma_i\n",-2);
) U9 B- ?3 s! P- Q    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; _: Y+ |* \8 |    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  f% \" X1 j# h9 r/ K' P) H    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 }/ y  B5 a' ~4 M8 ?" r8 V
1 u/ J8 h4 t0 S& X    UARTPuts("upp_prog_dma_i\n",-2);9 Y* x; n( C7 D+ N
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;2 V' d4 H- l2 m2 g6 h- I: u+ {
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ k! i7 |. n  R# y. a' c" h% S    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 S, v5 @  l: ?& K& M; i5 i+ I5 _1 D7 y. o$ R
    /*等待UPP传输完毕*/
( i* E* r! M) J2 ^3 a; a* `) q    //i=0;* P5 k0 {; t6 _! e. U9 z
    //j=0;
0 R4 U1 E1 u  L. k" g- r6 h    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) E; L: P9 V  B& ?# j  V0 _    {
% d( t* z$ A) I% n3 u! u        /*  测试UPP传输的同时操作普通DDR数据
  R; x0 ^" y4 v$ M        temp=i;( a. t# H! X6 N8 L( W1 ?
        i++;) X2 @( d0 w2 V  o; y2 d
        if(i==1024)
6 N5 _+ G/ `, s4 ^7 T        {+ q" O! y" Z7 b
            i=0;% @/ g: h8 r9 y4 V* K
            j++;
$ `. N, G6 ?* S' v        }3 m5 K8 b2 O: G2 E, z
        */
4 g. _$ b  j. R# y
# Q  F- Z3 U/ h( S/ i& V( R1 b       asm(" nop");* S- ]1 q, |/ m8 F) _5 U$ r

& e! I5 w1 `2 T3 B" \, o( Z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);9 r* Y0 w) D4 i  n# ~8 k
    }. F. u, M4 M2 O0 g9 x/ b
& u  w0 v9 p* m# f2 r
    /*检查UPP传输的数据是否正确 (loopback modes only)*/, h# F3 Z: I& I$ l
    //UARTprintf( "i=%d\n",i);' ?/ U2 _2 d, M* ~
    //UARTprintf( "j=%d\n",j);
' `, M4 U- \4 R3 ~/ m6 v, T    UARTPuts("Data mismatch in buffers.\n",-2);1 g% s/ r& J. [' g7 q
    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 {. K! @: ?  F4 c- s! v2 ]    {3 V! z; B6 X6 g& y2 W9 F; ~* Z1 N
        for (i = 0; i<upp_frame_size; i++)
2 i- Q* [; U, ^! u  v+ h        {4 s  K9 @- U$ z3 A$ E: F$ J. x9 C3 W
            if (upp_buffer_a != upp_buffer_b)
2 C3 x9 @1 K: f! V            {* A2 Z# x0 j" }- `; h
                upp_error_count++;: Q/ v4 V  S3 {2 l7 |2 a# F: O
            }
+ W! k. u  G5 X        }( W  M0 U0 D$ @. p5 L
    }/ j; Q4 F) r0 s
" _9 x1 x8 a2 l  l
    /* 报告通信结果*/
5 w1 o& T1 _, a    if(upp_error_count != 0)
: S6 K" p! E; D! H: k        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 s9 z# u  U. R( L$ P( r    else
& Z" q  `& {7 }        UARTPuts("uPP transfers complete!\n",-2);' `8 w$ x3 O" c) S5 p* L' V  x5 F

# K' n+ @  O  X; Q" Q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 V+ S# X8 [. X' ]' u
    UARTGets(ch,2);3 ?- i. u$ G8 p6 X8 |
    UARTPuts("\n", -2);: k. ^, i7 ~9 y& u9 T4 _' p0 h
& {* y; O6 ^2 i0 L8 {9 Z* T% C
    if(ch[0] == 'y')
0 a/ f- K1 \- o# f    {
/ I4 _3 d* i" c5 T. v        /*打印全部读到的数据*/4 T( n. L8 {) B( x
        for(i=0; i<upp_frame_size; )
% j1 `/ \1 E8 J* m; [5 f8 [        {2 K: n/ g3 y4 l8 @7 _& D5 b8 @
            for(j=0; j<5; j++)( {- ]* b# M: i, J) O3 [9 k
            {
+ q' j/ c+ f& X                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);7 l7 H2 J1 u( D. _
                i++;+ v$ q9 X. J( J8 `, [0 K1 ~
                //if(i >= 4096)3 d9 V% D( T! B+ q
                //    break;& F8 f, U, N% }+ I
* K, d5 A' y! A* C
            }3 P2 ?8 m* q+ q; O+ q
            UARTPuts("\n",-2);" p# z0 [0 N9 |1 E( i
        }
) b# U. _4 o( @! N4 N( D: q/ ?+ f3 D    }6 n; \- F/ ~: q+ I" g2 A7 ~
4 ~6 M- S2 M: x0 @; g5 v1 s
}
7 _+ Y3 ?! v3 y2 H+ s  _( C
! J) q* O- o: `: {
, h% ?6 M2 h# a- l' d

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ S2 Y& }* j) b7 M+ |5 g$ Y  X
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; s& r9 ~4 i5 T- j/ g1 f




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