嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ y3 R5 x. s, q2 w: B% F) @( N
Void UPP_TASK(Void); r7 k: o  U( D# a! C" i! i
{/ \5 n. K% }+ u! a9 Q" T1 }
& E/ s% V1 G. J7 w" A' T  C
    int i,j,k,target_int_count=2;" _1 Y# B$ E3 p
    char ch[2];
( a# L8 x: Z( n: A
' ?4 O" F" v5 j' I  w. z4 I0 z! U$ X+ G$ F' G) W

0 s4 k# f3 O" Z, y    upp_interrupt_count  = 0;' s' o. |* ~/ [$ [' O2 ^7 W
    upp_error_count = 0;
( e8 U* K/ ^# ]" g; L9 W
1 @# l! V4 R5 O    UARTPuts("\tResetting uPP buffers...\r\n",-2);
( v+ q* h& `) I% w4 |+ v# E  V1 d0 I    // Initialize data buffers
" F; R/ D: i: `' Z5 c7 t6 Y    for (i = 0; i < upp_frame_size; i++)
, {; d) b4 |2 Z) w0 z1 V    {- P4 B! N9 p3 x$ x0 Z1 O) I: R
       upp_buffer_b =i;
, F3 }: f! W, p( I. i, \3 H# \- |       upp_buffer_a = 0xDEAD;9 C! B, T& J( ^
    }: h5 K* \4 X! N" t. X6 f  f
0 X- N- q' \2 y7 U2 E. Z$ v, V
    //for(i=0;i<1024;i++)8 J: G  t5 n# X4 ?* L/ r. U; w3 ~
    //    temp=0;) z5 A+ q5 u* q; F0 k3 L2 {$ |

. B, \" z. _/ T% Y    //UPPReset();4 E4 t: n% I* @, N' g8 Q
    /*启动UPP DMA传输*/
6 ~* Z: O/ D; i3 S' j3 W+ ^% y    UARTPuts("upp_prog_dma_i\n",-2);1 [% w( b0 e& Y
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 u" n6 N3 I" s) D5 _" \& i
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 m# F! F3 I- _+ C
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 l! F/ \2 u2 C; A- \9 C/ \4 |5 p1 C* G1 j/ j6 a# r
    UARTPuts("upp_prog_dma_i\n",-2);
. U# H* U% ~" G3 I! n    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ }! ~6 S6 q. i0 N
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 W% q$ ?$ p. c3 z$ S6 D- P    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ u! z0 X: S. p9 ]2 i& z
7 N3 F+ h, M- a/ B    /*等待UPP传输完毕*/
8 K+ c- y1 U7 V0 l    //i=0;
+ f; r) U% q7 }' Y2 J    //j=0;5 y" y% H) J7 p
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 }9 n+ Z% l1 c0 m8 ]    {
4 |9 \: {% u; Z7 c# ~, M        /*  测试UPP传输的同时操作普通DDR数据  ~! {( ~3 B7 O" T
        temp=i;8 N: z9 G9 ]$ g( f
        i++;% U& s. D( U; K
        if(i==1024)# t' Y5 q+ f% t4 o
        {
. s- I) T) ^4 o9 o8 G1 y            i=0;. a' }+ i" w  v+ ?8 ~
            j++;& c' i% w$ g$ Q, ^
        }$ e6 f% z9 Z/ E' _0 V- S7 [+ D
        */0 \( G( ^' `( v9 S5 I" @, G4 U
: ?1 x: F# l7 k
       asm(" nop");
" }/ F9 j* U/ Z. m% V1 F( Q. {! L! Q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) T9 S7 Y7 ^& X
    }- J: K( j) S8 k. A: J2 {- k

' r. D- d, N" x- \( ~    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 s4 V' {% l* e3 y- ]' `
    //UARTprintf( "i=%d\n",i);4 Y( u3 \7 s" X" n. s
    //UARTprintf( "j=%d\n",j);
! H7 z! S! z3 z! U    UARTPuts("Data mismatch in buffers.\n",-2);3 B5 d3 ]8 G4 z0 ~
    if (upp_interrupt_count == 2 && upp_error_count == 0)' c5 J- M8 @  B( n% C* k" k
    {1 ^7 i1 w! I' U% W6 t
        for (i = 0; i<upp_frame_size; i++)
; ?# x4 ^- q! o' h3 W        {* d( B1 b. R# ?$ v; N2 @
            if (upp_buffer_a != upp_buffer_b)
& }( @( B) m& {) D0 v( N; L' P            {
& a9 W  b: Q1 H& N1 {, P                upp_error_count++;) h- J' V- X9 Z- v$ A9 G1 v+ @
            }; d, ]+ ?. q6 Y+ ?% B
        }
% s" ~: ?4 C. |+ n* d' p+ ]( A/ E    }
; k9 L2 A! X5 t( `" x* l# [8 }* k7 A2 O* e% O8 u/ Q
    /* 报告通信结果*/
" O. w/ e$ ]" ~  g# X    if(upp_error_count != 0)
2 x% h; \. G$ {9 }        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; |  F1 l9 [4 @" [9 v8 _- V: K* N1 Z    else; h7 u9 g, e6 U' g
        UARTPuts("uPP transfers complete!\n",-2);2 Z! e& q9 u4 Z% c; W: g2 q
  W' K" N) C+ p4 L4 h
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 w7 P7 X1 n( U' t8 e
    UARTGets(ch,2);
# B# H6 R# C0 P  P    UARTPuts("\n", -2);
  K, ~0 E3 ^9 o; ]1 H% q' w8 {. e7 ^! R' l
    if(ch[0] == 'y')0 f/ \5 O+ W! o
    {8 n; c2 {) [: w5 d
        /*打印全部读到的数据*/
/ _/ Q2 B5 q( l6 C        for(i=0; i<upp_frame_size; )
7 b% B' ]- ~$ S8 e* R        {
7 j5 v  ~1 K' d: A6 s9 T$ |& {            for(j=0; j<5; j++)( Z. V! A$ ]  @* g! y( y, i9 Y
            {2 d- G; x. M: ^9 y" O
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 c* T+ y  I$ z: x8 V  S1 P                i++;
! s8 A9 a& Q& \                //if(i >= 4096)
' G( S$ f7 E2 A7 o+ q                //    break;* s  r7 U! C1 B

# f2 p" V  C9 P. k            }. D* O( y% p" C3 {  K# m2 ^, S2 K
            UARTPuts("\n",-2);9 c( l1 A$ n8 y
        }
& P' z8 U- ]$ s1 F9 R# N! r/ L    }; y: E3 @# p# }2 `; Y! S
: [; q! v  p0 E+ P5 g
}

2 w" e; f! n/ \( x, t" X

1 ?0 k1 d+ D( h" c, R% L0 v$ d- Y7 c5 q8 m  a1 l5 I% ?3 X

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" h# `; @7 k$ P3 L" L7 H
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 z7 [+ d, g7 ~# }





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