嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 |  V7 I. B+ u6 t$ ?# T
Void UPP_TASK(Void)% n! n. Q# A" D2 M
{
/ C; G( W- k; c6 R
7 i2 n0 s$ Q. s! b: ^! J9 y8 n    int i,j,k,target_int_count=2;% r) l0 G( U3 _) ~3 f0 h5 B6 c
    char ch[2];
: `- H7 D6 h0 e* i2 C: e! z" M7 S/ s) i7 O
: X1 l$ ]5 P  V+ Z! U' Z
4 y( {  H! Y1 D+ w! _( s
    upp_interrupt_count  = 0;
1 [% N( r$ h: s' [2 |  d0 R5 a    upp_error_count = 0;7 w4 K5 x1 k# u" |+ R8 y
9 P. v4 P; a- F4 C, o
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 X; _9 p/ W7 _% s3 i! y1 O/ g    // Initialize data buffers, {( |& V6 R2 m, R' P5 K
    for (i = 0; i < upp_frame_size; i++)8 b1 ^% t+ c3 M" j
    {
* }! \6 j# N0 D  [; E. f2 B       upp_buffer_b =i;
- f4 j# X/ J' ~6 k2 K! q; F* {       upp_buffer_a = 0xDEAD;
7 V- s1 q. t1 \1 G* |! Z    }& f) w& x6 z% X7 O' @6 \+ f+ H* ]' A
' \2 S, ~. X7 {6 q6 m
    //for(i=0;i<1024;i++)
9 R) ]( l" y/ Y% F2 G  Q# E4 P7 S    //    temp=0;
' c: i; i, L, f" d2 S
0 @7 G8 l  U( Z    //UPPReset();, n9 D  i3 [# o+ z4 r2 }
    /*启动UPP DMA传输*/& p& I& R& r3 B
    UARTPuts("upp_prog_dma_i\n",-2);8 k2 X, O: X; x) M+ Y  X
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) W$ `& ]' t$ R# ?8 d- h. a    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 h7 t( ]. q- T9 Q+ X, a0 k
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) H& U7 L, q- {& e7 T( H0 b; D

; E; D# H" m1 a    UARTPuts("upp_prog_dma_i\n",-2);- w4 x( M) D9 e) R0 f4 d5 a
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 ~- v2 t! ?& J' s' K' \8 i, E! V# _# W3 V
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  w1 b! i, P: o# A/ j( S    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 z' Q  `2 N9 J# ]
+ m+ q8 I' W+ h8 l  [  y
    /*等待UPP传输完毕*/" |2 r. k$ l7 }. q
    //i=0;5 y8 N+ Q5 @- a* k1 Z5 U
    //j=0;$ K5 C, A0 ^  U2 g  `4 H$ t
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 e4 W2 P: R$ b$ I    {* R) D$ z0 {& Q7 ^
        /*  测试UPP传输的同时操作普通DDR数据
& T6 P0 Q+ H4 Z! M% o- V  m        temp=i;' t- f3 u+ O; e: i7 `
        i++;! m+ V: ^7 C# `: ~% F5 x
        if(i==1024)
1 C+ R5 o$ F! E        {
1 m" H  o8 }% _, [$ L            i=0;
2 h2 _2 H; x' Q; n6 L, H            j++;
. D3 Y9 g7 n! H" I7 j# H3 t+ l1 N        }: q7 t7 Z$ J2 q& w" R, z; p  @
        */
+ k- O8 n9 M* x8 T& z% U9 m2 U  \6 [* K$ R4 v( H; {
       asm(" nop");
& E" P& W) q. {+ l0 G- Q. C$ u3 X2 ~9 H0 ~+ C/ T3 q( ~8 c
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, F2 R& W/ k% \! m, x# O    }
4 t; z) }! O- j0 T0 h0 w/ M* p# [( E: [3 a4 H9 X5 g
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. b/ c7 f4 E# B% l2 G8 w# A& @. b    //UARTprintf( "i=%d\n",i);, }2 ^; P# d% A7 \6 a  G
    //UARTprintf( "j=%d\n",j);' F1 Y$ X. b7 l1 K1 |! q& w7 B% S2 E
    UARTPuts("Data mismatch in buffers.\n",-2);
; U$ A/ Z1 G  ^8 `1 @! a. w7 {, S    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 _) F) A: c! o' [2 U    {
9 Q& w1 E/ Q1 G  h: I+ E4 y% A/ a        for (i = 0; i<upp_frame_size; i++): j- J3 K* q# u( @' \
        {# b% E4 G* ?1 x( u3 g# `
            if (upp_buffer_a != upp_buffer_b)% k" [% }- b  ~. x( U( |
            {
0 D1 x& P0 U! {. S3 E9 U                upp_error_count++;
1 P$ G7 ?2 ^. @+ M            }
3 z0 ^1 b# Z5 u- `& R3 D- ]        }
9 [! m8 G. S! X    }5 g  C( z8 e3 T
' P$ k% r+ g! K3 L# u: N$ D3 V, I
    /* 报告通信结果*/+ T4 N4 c4 n1 [! l" U- `5 Z4 U$ z9 k/ C3 B
    if(upp_error_count != 0)% N% N5 m7 Y( j# G. s( H% t
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% ~. E% m/ ^; B  x& G: S5 `& x    else
: ]( u+ |9 o! O: b) x        UARTPuts("uPP transfers complete!\n",-2);5 F) D% l$ w& P6 U" Z7 |
! v. I# m% @# m% b5 s. N
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ b- d+ B; p9 K  f8 g3 Z    UARTGets(ch,2);
1 D1 R+ A+ x! y2 O7 B    UARTPuts("\n", -2);8 O- ?3 N  T$ r  m2 A

. \: ^) L) u& h/ a7 m8 _; v8 C5 R) l    if(ch[0] == 'y')' t7 C5 ?0 ~9 p* I( v- J
    {
6 b1 |# I1 ?5 j3 E, D. q" O        /*打印全部读到的数据*/" O% V5 `) _9 _% e
        for(i=0; i<upp_frame_size; ), V( ]3 U: X1 g7 l
        {4 J: n% N0 W1 }
            for(j=0; j<5; j++)
7 n( a4 m; g: m( `5 M/ R9 B# O            {
3 Z" y# ?, K, `/ W# Z; }5 K  W                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! o. W' p, v! K
                i++;
- i. a8 D. i9 ?5 d2 Q                //if(i >= 4096). n( P0 s' R2 l8 T/ d
                //    break;7 N/ o+ I- J; ^9 F/ O( R

& j# G  h" D8 Y8 D            }
5 k9 Z* c! T! ]            UARTPuts("\n",-2);
. l  F" k) a. J& d        }0 L- x! ?: j7 x0 ^
    }  g- n& O  k, Y& V  B

& u- V% N) B. |% ?1 C2 T}

" j# ?$ p3 t/ t: A" Y6 T
" [6 V& g7 [- w* N1 S5 {0 d

3 k$ O' H9 `, w
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。0 o" C& L8 c; T; \1 ~

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, l, j" M  i+ M& z' j




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