嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) w+ |# O" x# O1 t; s
Void UPP_TASK(Void)
1 m+ @5 r! ^- Q' p3 l{
; N1 G! }2 B: N2 x0 g- V2 l" \
6 [( n. |3 I, N! t# a    int i,j,k,target_int_count=2;' |& y) y4 G$ E3 y2 v
    char ch[2];9 D, }; N4 ?" S$ T
5 Y! E' x1 A2 w: {9 y8 }
) a6 R" `7 z$ }& a

- V& r" i) s0 B1 J) n+ a4 p: Y7 i    upp_interrupt_count  = 0;
" J* B; y, \0 X$ I    upp_error_count = 0;
5 ^8 c$ t' m( z* }; P
7 u. x& X3 s9 ]    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ u7 q7 e; F' I$ c    // Initialize data buffers1 s% ]/ U3 j' }: `
    for (i = 0; i < upp_frame_size; i++)
* f& w7 m0 M/ h, K: C    {- m) C  Q4 x( O# G3 m
       upp_buffer_b =i;4 S7 Q# l$ `, u/ c* V. R' r# e7 K
       upp_buffer_a = 0xDEAD;
8 V8 p9 x1 B* p    }, s) ~2 E4 _! }0 h

+ b* Z# c/ x' `6 l/ Z    //for(i=0;i<1024;i++)
7 v& ]1 A4 S" ^    //    temp=0;2 d* b0 _4 P, g1 W9 }

" Q! `2 z! l+ b4 P4 M" S: i$ j    //UPPReset();
6 X* y0 M, w3 {3 L' U    /*启动UPP DMA传输*/! {. I3 h9 S& G
    UARTPuts("upp_prog_dma_i\n",-2);
) \) Q. W! |4 ]% _8 S    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, w& I" ~6 u, N- I/ C2 k7 C# z    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( y0 s5 q- o9 D; c    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 w9 M/ m. d. x( j3 K

8 G  `3 [2 n$ i5 F1 i    UARTPuts("upp_prog_dma_i\n",-2);
9 a2 U$ P. @; P1 f4 F) K' k    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! K5 r4 z6 j/ }; O7 ]
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 j1 w6 g' M! x3 T/ d7 g# N    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 T2 k! t9 `" A3 `
; u; J8 Y& j6 a4 C+ Y* V( D# f. D
    /*等待UPP传输完毕*/
& i' c( F0 N: h  O* o    //i=0;7 |! x3 q+ S$ M5 Q
    //j=0;2 O. ]7 N0 }5 ^" _' L
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( ?2 ]. V$ d; t3 J7 ^- D1 D& J    {, T* q* V( M2 i) Q0 f
        /*  测试UPP传输的同时操作普通DDR数据
; r4 e4 Z/ F6 ]4 Q        temp=i;' t. a9 r1 c( P. Q- v
        i++;! q' k5 M8 y4 _" t# B3 ?3 z" W
        if(i==1024)6 p& k9 V  w8 K6 f  |; F, [0 d- ^
        {
/ L  ?* A4 M! s! L            i=0;6 B! K9 i( h8 h) |* ^, l' U
            j++;
; v4 H! m! T7 d: @# F        }
: P1 @3 q9 x, V8 J        */
4 Z- C' D) T4 B! ]" T% u8 G
6 l. Q$ r% r5 ?       asm(" nop");
' V! m" z6 m7 u  M( ~' ]9 r( o" M4 H. |0 |
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 @' @7 k. S0 x7 {3 |# P% _    }
, I; c4 j7 Z7 M( v: \( B" U3 L; _% v8 o$ U8 s6 j" A$ H
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
; M5 d: x  }0 J+ s5 r$ O    //UARTprintf( "i=%d\n",i);5 w6 O! M. q/ \- D
    //UARTprintf( "j=%d\n",j);
, ^2 _0 I4 A% U    UARTPuts("Data mismatch in buffers.\n",-2);
2 }6 A$ h, E' r3 w    if (upp_interrupt_count == 2 && upp_error_count == 0)
) \  H7 V% p5 R2 H3 [3 o3 u$ x2 T    {
+ v- g( `5 F/ K, W        for (i = 0; i<upp_frame_size; i++)' c, H( Q! v. N) ~
        {, y0 x- s# X* I+ G" Q
            if (upp_buffer_a != upp_buffer_b)
; p9 ?: v9 x; \9 A9 h4 E$ H' ?            {8 w" b' K" }& Y, j: m; q' n
                upp_error_count++;0 |- p" P& q/ `. k# x8 Q, E
            }$ z" Q' l2 i+ b0 C, [& t
        }
% R3 i/ n) K4 y: M& q6 H- C    }
- ]) z4 [3 m. s1 J
. a3 _& E' J7 y9 m    /* 报告通信结果*/1 m0 U9 W8 y3 c/ {- l! F
    if(upp_error_count != 0)9 P: |6 J; B8 E% D8 t7 L- h9 w3 }
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 V. Y% a. \3 `  M& x/ A9 F    else! g2 o4 t' a% g& K) e  N
        UARTPuts("uPP transfers complete!\n",-2);
9 n$ C& P' ]. }! S' p7 F6 E5 ^4 _( l
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- t' g1 r3 C7 T- U: y( N- _  h    UARTGets(ch,2);
' T' e7 P$ b8 `, V7 }% F- }    UARTPuts("\n", -2);
, }4 r! ~; x4 d7 S2 M) t+ N5 J+ M' x3 i' k8 m. k* D% e& t
    if(ch[0] == 'y')' |! K1 ?: z3 r" R' a2 E
    {# J9 C: n7 z& j  O8 q& F0 g' w# Z
        /*打印全部读到的数据*/
( |! k  X" ^3 i) B% [        for(i=0; i<upp_frame_size; )- E7 l; B0 T1 {  z1 }8 M! \
        {4 U! w" l8 }$ y8 L$ i
            for(j=0; j<5; j++)! v$ o+ Y0 B+ x6 ?1 k7 x2 k
            {
! V0 I4 W. j5 \+ Z1 R                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( a( n: d8 y- D2 U4 {+ R# Z                i++;* w/ l, O. q; \0 N  c
                //if(i >= 4096)5 G6 [, @8 x4 x' W8 @. C2 Y
                //    break;4 [( F: @3 p6 V, S" b

4 o0 _0 {/ g& M7 p% Z' U            }+ {  f9 W! m- u% |
            UARTPuts("\n",-2);  n/ r4 I5 H4 b6 |  a
        }% t* O" T7 _* O+ W- N' ~7 e( |
    }
4 O+ N2 h: }" t1 z0 K( M4 P* z& D2 H2 l! h) r
}
2 X1 W4 I' |4 i2 d& w  e& }/ d1 I
/ A& a; w+ E8 k% ?

/ ^, K7 |  L4 {
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 Q" Q% R$ J1 t, i  I  V0 d- L
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) q4 l0 Y# l( a




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