嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 V4 o4 ]- r: T4 z& A6 g
Void UPP_TASK(Void)" g& h1 z7 r: J
{
* Z1 L6 @; H7 w5 K% i; h! j/ I" T% E9 w( `# w- O7 s7 A! K! p
    int i,j,k,target_int_count=2;3 n9 q- ~% {& f) Q6 O2 w3 F
    char ch[2];, c+ ?+ ^$ W0 P  t' B: P6 y7 R

# C, X! p9 C$ G; a# b
# O# E8 p1 r6 J1 W
3 c! X! p. G( ~1 u  B    upp_interrupt_count  = 0;/ G4 W1 R, ?0 e( T6 l
    upp_error_count = 0;
3 Z  `, s* K% v# \; j% H4 C# X4 E
4 Z4 G  g4 F+ a    UARTPuts("\tResetting uPP buffers...\r\n",-2);& O1 t& O8 T! ?! z) k% ]+ O  H
    // Initialize data buffers6 Z+ P+ A; Q( {! g7 k
    for (i = 0; i < upp_frame_size; i++)0 [: z- X& u* H" A
    {
% |  [' _9 t- K( T- o& V; M       upp_buffer_b =i;" O8 U! c$ {- ]7 f; L! m: d8 u
       upp_buffer_a = 0xDEAD;
# B; e8 [- L6 r/ {    }
. x% t5 R( R, x! I0 y0 E8 i1 e: O
( r5 p9 W7 K1 x2 {    //for(i=0;i<1024;i++)
& T2 a! G* l) r3 R8 o( C+ f3 o    //    temp=0;5 s5 |; z, g, ~* ?
4 a4 D( M" K9 `2 o5 \1 l
    //UPPReset();
/ `: L! l7 ]9 V) x( F6 o    /*启动UPP DMA传输*/
/ O% B; B2 i& }/ k/ N5 v) N    UARTPuts("upp_prog_dma_i\n",-2);
' T( i0 _* {3 Y+ c$ l    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' [" e2 I4 j2 @; L; R% v    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% Z0 n( N1 r( q, g& v    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);! B$ Y6 f6 L  V1 p

6 g6 r, C- @  Y4 V$ s, o    UARTPuts("upp_prog_dma_i\n",-2);
& |& B  ^* }3 v: D- G# G9 U    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  u7 `0 l! @7 e. ]* k$ Z0 k; i5 R    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 T1 V- Z! k; C  e# l4 Q9 b9 m4 h
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: ]3 @; |1 b' _; m. y: P* p
9 p$ J7 G. K  l1 z" t    /*等待UPP传输完毕*/
) f/ F% @- g8 Q* t* Y' C  s& f    //i=0;" f- d9 P2 \1 `9 o
    //j=0;5 T8 a# Y8 c7 a0 |- {# O
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% g  e# k% V8 w. k6 c$ \, ^
    {$ N+ Y. t, m( \
        /*  测试UPP传输的同时操作普通DDR数据* Z- u  s1 k- |: R8 d( P
        temp=i;8 z5 D* x8 K! N+ H  J1 e
        i++;% ^9 D; @1 e, S/ Z
        if(i==1024)8 {! |4 S+ q  d$ W2 g3 z& ]; Q
        {
: {: m$ [; n" S# V            i=0;+ [6 }1 ?2 q$ c2 [$ W! p/ U$ K0 n
            j++;
9 w0 Z; b* J  m: x, Z. {        }8 l/ P* M; D( O
        */
. Q. e+ N6 k( y: o2 j" ^! L' }" I( `
, m( W3 p6 b5 E9 P$ z5 u/ F6 t4 Z6 q       asm(" nop");4 ^, a1 r1 a( X! l& j) ?
* W- X( [& z9 u' V
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" H0 X/ Y* e3 `% {  v  K4 i
    }0 d( R; ?" h4 _
0 e8 _! S2 X* P# W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/4 i7 |5 I) X1 N  i$ |- W
    //UARTprintf( "i=%d\n",i);
( V! [# B: p: s8 B( z    //UARTprintf( "j=%d\n",j);
% `3 l; s) d4 q    UARTPuts("Data mismatch in buffers.\n",-2);' r( g# ?1 w$ O' p
    if (upp_interrupt_count == 2 && upp_error_count == 0)6 C/ f& _& Y; u' z9 \
    {; ~& c7 W- B: o( f
        for (i = 0; i<upp_frame_size; i++). w% _3 X+ V# K# m  a; N; @: m
        {
5 j2 _: L0 y% [            if (upp_buffer_a != upp_buffer_b)' a, I2 ]3 T6 e) E7 v4 ~/ F
            {* \; I% E( V% j* @. i) ]9 M
                upp_error_count++;
+ j8 y: ^0 o: L. A0 q            }$ ^0 s6 D( ^& l9 b- Z
        }
) T7 v# `4 s+ t1 Q' n    }
9 H2 |1 j! j' Q, W# g  ?  Z/ Z( h8 Y
    /* 报告通信结果*/8 z4 f' G" O6 ]( Z: G
    if(upp_error_count != 0)
- K5 z3 b3 w  N3 o( }        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! T8 q- z: C5 O9 e1 |% w    else
' M1 M3 D. @" B6 @        UARTPuts("uPP transfers complete!\n",-2);3 a8 P  s; i5 J1 a9 \
* ?8 X# W0 F% S+ ]
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. x, f) V" m; B
    UARTGets(ch,2);6 E) y* n+ u1 K4 E6 u3 l) n! i2 u
    UARTPuts("\n", -2);
4 a4 d0 p( R  i, q6 D, e& ~) u, A2 q+ e- i" i
    if(ch[0] == 'y')3 b5 }" u+ i$ X  _0 U
    {
3 t2 S  k' L% `7 ?        /*打印全部读到的数据*/% i% B5 t) W* D8 }! S
        for(i=0; i<upp_frame_size; )) K( y3 ]( x6 h4 A/ V. Z
        {
3 a: c% D# x7 s0 a1 m            for(j=0; j<5; j++)
5 e' \$ m% a! {; T- L            {! g8 ~2 D5 M- X9 |  q. Z9 x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
' |+ S3 M* @  s& k' m, N! }+ q                i++;5 l5 n$ k! E  n' W+ K* M$ i
                //if(i >= 4096)
. I/ N. \4 M$ }0 N# K; H. ]+ S& B                //    break;
( |6 O3 ?. R6 w/ i. }! W% o! t/ ~1 p$ |0 S0 g& \4 d  [
            }
1 b# f0 p7 g) ?  _            UARTPuts("\n",-2);- L' I5 |- Q' ?- v
        }& U3 ^: T/ ]& k7 {* B, G: [9 E
    }
& y& B" B' x) v
  X, M! |7 }5 c  t}
! p3 t6 b; w$ O% k+ B3 w8 t

& c6 s4 H, g  K/ c9 F; q
, U3 r" G6 R1 k
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 w, y* ?3 P' i& @, `# Z: C1 g
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( h- {$ V( L! R





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