嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: a( g; Q# ^5 q% j# m% P
Void UPP_TASK(Void)$ _& s' ^; t. z3 E+ \( Z3 j) W
{
* Q  F. s7 @' @  W3 v- |
5 {+ l# F3 c8 W    int i,j,k,target_int_count=2;8 O* x1 s6 |+ K4 [/ u# B$ j  l
    char ch[2];
' k5 I) ~( n/ X1 ~. B  L$ g. [3 i1 Z9 k9 ?7 U5 s
0 c& k3 s8 ?( U2 J5 s/ D

# B; F4 k" m, \. A    upp_interrupt_count  = 0;/ G' C+ U/ w  H& j1 W7 O( T
    upp_error_count = 0;
% t7 _; }- S4 Q9 x+ Z3 m. I+ [4 q4 X/ c
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ W6 x% _( h) E9 l/ r2 l: s    // Initialize data buffers; t8 q: a$ I+ v( y, c8 `* ]2 s6 z
    for (i = 0; i < upp_frame_size; i++)6 ], x. x' y  h& l: e1 t! h2 k
    {: F+ J* I! {( m8 ?2 M) Q
       upp_buffer_b =i;. S8 J" J$ @, M2 Q! h3 Q
       upp_buffer_a = 0xDEAD;$ C) T6 a% ]- N
    }
  x1 @0 B9 N; X: |3 E( K+ \  |+ H& }2 _! N1 E* L1 b! l  n
    //for(i=0;i<1024;i++), H) \5 `# t, v: ~- _
    //    temp=0;5 K! b# ^1 y9 k2 b9 ^# k  v" a
" F2 P5 t1 U* u0 Y  a; s
    //UPPReset();: U6 w8 d4 J0 _& j
    /*启动UPP DMA传输*/
. T+ B" h: F& Z% V# d; z0 Y# V    UARTPuts("upp_prog_dma_i\n",-2);
# n! J  g7 T( x8 y; s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 z6 \$ S- ~) b7 b  w    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. v" W. K9 l, |. H. D: F6 p1 w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 Q1 U  p' S% w0 i8 }& u
  G" A: j/ I7 b/ b    UARTPuts("upp_prog_dma_i\n",-2);# v# o3 U' V2 ~4 i0 ]- B/ }
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;3 _0 A2 y4 K; L9 v4 i
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, O. }$ O  J9 B& X: C    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  G7 Q) N& E: V6 Y5 S/ L
( ?9 R# B* S; i4 {    /*等待UPP传输完毕*// ^" x. H  l7 D7 ^9 P7 s- J
    //i=0;/ T" \) Z1 o. j, y- D- n" d& b; @" e
    //j=0;
8 D6 H; N1 ~/ S/ @8 i6 }2 J, L1 o    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* s7 X* A0 {1 ]5 {2 M
    {
. D* m$ Q! [4 T. F1 _% ^        /*  测试UPP传输的同时操作普通DDR数据' V* a3 t( J0 a9 I: c% i2 }1 j' j
        temp=i;
% J  V1 B! t+ c5 X- R' F        i++;* ]& ?$ D5 a6 |' p! V) m! s+ i
        if(i==1024)
! Z1 {9 h+ H* z7 p! f        {
' M7 a; C+ x, k/ v            i=0;# R  X+ c" Z$ L4 b& X$ o
            j++;3 |% U+ {9 B$ |) O3 Y# M# J8 x
        }
3 @) y  X0 V, Z/ B+ h        */  t7 _! N1 x' P% \
0 U$ C0 t! n! \* m% }, }
       asm(" nop");7 @/ l7 ^' r4 A1 [; J

* H& R* s: M7 F: i3 c' N4 `8 n! L5 F       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 ?- B$ I! O* J* T7 t2 T; w  o8 u% N    }4 i  `7 o! `" ~6 v' t" E1 p' x" K
9 z$ X6 _8 n% j' ?1 Y" A
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 b) Y. {  j( e8 ~  s+ }4 P    //UARTprintf( "i=%d\n",i);
# `! r5 J8 f) N! z/ m    //UARTprintf( "j=%d\n",j);- K0 j2 e5 j, W( \( Z
    UARTPuts("Data mismatch in buffers.\n",-2);! n1 w1 N1 g) j& I
    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ y" @% U  y( e) ?4 ^. Z    {
0 a* ~* h! a0 X  G7 ?        for (i = 0; i<upp_frame_size; i++). H2 k- C0 I8 A" X9 f6 H8 S* N  t2 w
        {
% K/ ^: J$ B: V) f" P, w* s            if (upp_buffer_a != upp_buffer_b)7 ?  A! h. A/ m+ K1 [- k  }7 d4 R3 Z
            {
$ h1 a1 x; y! t3 C                upp_error_count++;1 L8 z- }, u- B" W
            }& ]2 s+ L- m: a
        }5 j; w' K1 }6 k- g% ^0 f) z; y
    }: W: }+ {# C3 K6 i. i- J3 E0 z* x9 Y  e
# x& P6 x) R' R0 H, Y: ?# e" E
    /* 报告通信结果*/
5 m" `+ ~! m0 F    if(upp_error_count != 0); F  ]+ }8 ~0 t% [( Q# u
        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 g3 d/ ^! K! }+ d$ q7 {4 N
    else; F& O9 j+ O3 m) a  M
        UARTPuts("uPP transfers complete!\n",-2);/ {5 l. b8 c& e: V( j2 y* F
0 e1 X: j6 T7 b+ b1 m8 P
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
$ S0 R8 b  M/ p3 P    UARTGets(ch,2);
2 o+ b, v7 P3 R- w/ g% B    UARTPuts("\n", -2);. e7 i- r  X  a- I9 v

1 d5 M* [( p! _3 C3 v: g9 P, y    if(ch[0] == 'y')
/ V2 @9 g% ^7 T; c, T, O5 y! }9 V    {
4 ~" M. o  i$ v# m( ~3 r) j        /*打印全部读到的数据*/
) k3 H/ h2 U, M/ [3 }; `% Y        for(i=0; i<upp_frame_size; )4 `9 C: s% Q8 o9 @
        {
" @3 H3 v/ C" P0 \9 I# G& l& [; k            for(j=0; j<5; j++)
. k5 `+ \9 G; L- F4 C            {
  @" w0 K9 _9 U+ d  O$ [0 R( k                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! M) v6 Z% D0 {
                i++;
# \7 g8 d0 W; c                //if(i >= 4096)) A& E6 r* q6 I, \" R
                //    break;* \" E, h) q, N  Q5 }/ E7 b* a, J

+ J& l) d5 P# @; o8 @            }6 {  K! ?  O  T8 m% X  k7 W  G
            UARTPuts("\n",-2);
/ W9 M9 `/ x$ t0 w+ r1 x        }* u8 ^  v5 o; G
    }
. }$ s$ j  z$ X4 ], L/ ^/ b( _8 P9 |3 M1 }( _7 S
}
/ y- J: J  F% E( m3 x: H

4 s/ h2 ?; x- ^4 n) a- j) T
2 U, U' ~& v' m. s' e' c
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. ^; U8 k% y+ }8 m( I

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* }, A. }/ }7 n/ M% ~





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