嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 U* D$ E* V4 |7 F
Void UPP_TASK(Void)( J9 f  ?, V' S$ S' X* ?
{; ^: n$ `2 T# @+ I8 w+ @

0 [, S- @; B$ ?) @# m' {    int i,j,k,target_int_count=2;3 w! `3 h0 a6 N+ c3 K& V" v% y% g2 ^
    char ch[2];7 q* V& P# K8 i9 L

  w5 T7 G  _5 P. B2 L4 _7 m
  K, Y- u# y* E* H5 n$ q4 ~, J7 S" b5 |4 F5 `
    upp_interrupt_count  = 0;
% k4 O+ F+ S$ d9 H$ ~    upp_error_count = 0;  |* l6 @& U0 h: O

# G3 A" ~) T0 k; Y    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" D* l- X7 t7 I0 w8 g$ ]    // Initialize data buffers9 u* x6 G. {$ x( \- g' e( j
    for (i = 0; i < upp_frame_size; i++)* [1 `+ d! |+ q' i5 J
    {: ], }+ ~4 D/ z8 u2 T
       upp_buffer_b =i;% `$ H3 d9 f# L/ p& e" Z6 b
       upp_buffer_a = 0xDEAD;: D  N& V, t$ h5 W+ B& {0 y
    }
+ J! k7 w2 M  Q: M
* s" L7 g6 `* }) F( y    //for(i=0;i<1024;i++)- e, @' Z7 X- G2 J+ V/ S- Y
    //    temp=0;3 h8 H; N2 z. j" w/ h& c

" Y0 D) w# M4 m4 A, C* B8 Y* ~3 o    //UPPReset();8 o/ Q, r/ J: [; g8 f' N( C% M
    /*启动UPP DMA传输*/
7 C' {0 Y  l2 u% Q, z' y$ ?8 ~2 u    UARTPuts("upp_prog_dma_i\n",-2);
8 X7 M8 x$ j$ u8 h    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# ?+ F' u7 l) p! {2 f8 L  Q! F    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* Z5 ~2 _$ i* N6 I3 f
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 q$ }% D; f5 f0 G8 ~* L+ B

* L+ q( @+ E6 r8 V! ]; q    UARTPuts("upp_prog_dma_i\n",-2);
9 s( p% x" f- y9 ]4 `% W    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;$ z* I( W5 o0 J
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 x  m8 I/ \' p% `9 ]% _4 [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: I2 D0 E. K/ _4 d; `$ p' J) ]) p$ g! m7 [
    /*等待UPP传输完毕*/
; Z6 c+ Q0 m) ~  `    //i=0;
! O, a8 l' R* \) `7 T* `, U    //j=0;) b( `7 ^9 T, ?) d# U  ~
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 K! v6 j1 E% I) v
    {
4 R) b5 V0 T, T$ i        /*  测试UPP传输的同时操作普通DDR数据
7 r" u1 l5 ?; A% |4 O7 {; J        temp=i;5 b6 B8 |7 G2 ]& {% _$ w6 m$ V8 b
        i++;7 Z, }4 O$ J7 i9 x
        if(i==1024)
( N1 w  Y# h' W: {6 ]        {- T; ]- L) T: Z  p4 [2 H& A
            i=0;
) x( g9 s  ^' Y) C  w            j++;7 D5 M. v) U7 L3 H
        }7 Q9 f% r+ O& D1 n4 \
        */
  W+ t% I4 B9 _, Z2 T1 f* B' t9 I7 T8 `2 I; I8 I
       asm(" nop");/ E4 W7 C+ l1 ]( Z! u- Y

1 K( C: j7 ]  v       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 r$ Y* Z% O9 _* w/ X0 U
    }, T/ j4 c* y5 p+ b9 |2 Q6 \

( j  q5 E' M$ r' R1 Y$ X    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 l$ M' D5 g6 a' ~  z
    //UARTprintf( "i=%d\n",i);
5 h/ b% a8 i; [+ A: P; P7 W& Y5 O    //UARTprintf( "j=%d\n",j);8 o6 S& f9 _3 l  I: t& t! P# K/ b
    UARTPuts("Data mismatch in buffers.\n",-2);9 z. i6 ^; x6 k: N
    if (upp_interrupt_count == 2 && upp_error_count == 0); w: X0 `; b: R$ q! D5 g  Q
    {" m' c/ O* B( _
        for (i = 0; i<upp_frame_size; i++)7 T0 ]7 q: j/ R, v/ U0 `. z
        {3 ?( D, Y1 {# K5 P) j; R# N
            if (upp_buffer_a != upp_buffer_b)1 n  @- C) p# ?& B3 B* E
            {
2 J4 [2 e% s* ?4 i& {                upp_error_count++;
4 s' X2 v. I1 Z* v- R0 p. @/ J            }
* A+ O# w3 H( y- B        }
( {/ d7 N7 `, i8 J: t, q! ]" r    }
/ v; ~9 C; m0 A. V$ z$ q0 W8 G  c" [0 I9 W
    /* 报告通信结果*/6 l- e+ c+ a9 ]! q. G  p
    if(upp_error_count != 0)
4 w" _4 z/ N- Q3 ?        UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 z  n( U' Z: A, f; T+ @; U1 t- s4 K    else
, n( {0 ^# u' [2 ]6 B        UARTPuts("uPP transfers complete!\n",-2);
6 H7 W+ t  H( T" p: g: d1 T5 E6 _! f: r6 j
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# Q2 Y( [' {& ?1 V& f# X    UARTGets(ch,2);) G; U2 [$ Q% g  |. ]' v  G2 A
    UARTPuts("\n", -2);
. d" p# p+ G  t+ {/ x
/ Q& S9 Q& a0 u$ E: }    if(ch[0] == 'y')
0 c5 a+ Q# P1 k6 b    {
0 }/ g' \' g3 }& Z9 n& U: F8 q: ^        /*打印全部读到的数据*/
  N" y6 E* z" k6 |5 A        for(i=0; i<upp_frame_size; )/ I* g6 z. e6 l  }- b
        {: D7 a( f) J, h) U8 ^
            for(j=0; j<5; j++)( C7 f4 L$ M9 l' \+ ~& E. k
            {0 z8 e1 r% F  `8 Y% o9 J
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 z# B, B' _9 }6 Z% O
                i++;) [: ^, [; z: Y& W! R( k/ u
                //if(i >= 4096)6 v, L; c6 ^% @! h
                //    break;2 \. M& ~! F, o# b4 ?- s5 W) k" S

7 ~7 B1 Z: U* L- d# t& F            }
9 u4 v& V0 S, k$ [            UARTPuts("\n",-2);
; {( Y# c& F# O" ^        }
& [; R, J7 ?: K2 j5 [6 c    }
" l  |+ |' V: g
" {/ Y3 l$ T! R. V; v}
7 F: J0 a0 B( a- [! ~4 `8 _
- Q  {4 \% M/ J$ B
8 g9 n, F4 j1 I( {6 P4 L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。9 A& J, s5 _) n: j! q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) W* x+ h7 S8 J' ^




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