嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- q0 ?8 |  v9 N! K
Void UPP_TASK(Void)1 R: [3 K7 v; A! c* f: `! B9 |1 B
{
: h. q! a+ D2 g1 w7 D
' R& u4 a- ?: O; R: V    int i,j,k,target_int_count=2;* v% W$ u. [4 w6 v  H& C
    char ch[2];
/ B% j+ S" [, x  `
. Y7 t# O; d, p' ~% ~& r& {
- @; V4 |6 ]/ e8 ?3 b# G; T* C! `3 ~. L  M8 V
    upp_interrupt_count  = 0;
+ `9 W3 \. [5 b9 U+ f! u    upp_error_count = 0;
1 x) k1 H3 m6 ]) b. C  y5 G# n( I& s" D# x' O4 I
    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 e9 K) Y% h7 t% x
    // Initialize data buffers' S# d# P0 t0 g. m: T
    for (i = 0; i < upp_frame_size; i++)
( t; g( [( r% B2 X& m2 X    {
$ w  m; |$ t) Q/ D/ M& [- v; A* I       upp_buffer_b =i;
" W  P  h% q. ^* t$ `: V       upp_buffer_a = 0xDEAD;& L1 L5 U' ^5 j6 g& Y4 y( e
    }7 u' P" |0 n, O% r

6 J0 [, ~" C1 u: g5 i' P8 x    //for(i=0;i<1024;i++)
9 e: X- }8 H$ K    //    temp=0;2 ?% @8 R  z! q/ G: b, O

3 k  R" c' E1 D5 |/ I. e    //UPPReset();
# g1 B0 V3 s% O: u    /*启动UPP DMA传输*/6 x  z1 c) N7 N4 ?, {% Q
    UARTPuts("upp_prog_dma_i\n",-2);. f/ l; c( ~6 C% l
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 [3 r% V+ C3 y9 I: H4 i    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) T0 [! a/ I$ I6 A& P5 H    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);/ z* o& K7 O5 l* t: H- a+ b
5 ~* B4 I+ D3 ]$ V8 v
    UARTPuts("upp_prog_dma_i\n",-2);/ T5 k7 f- G& W& v
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# s( R! x! y5 E% Q4 q# H
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ V8 d$ |# l  ]    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" n7 r' d2 n3 t) o" H% R- K  }

! G3 l; s/ Q7 m    /*等待UPP传输完毕*/
0 X" P, F1 X' Z" Q' ]    //i=0;
8 S3 Y( T7 J2 O' R& j5 a  i/ P: K    //j=0;( p4 m. o: Z+ D7 A7 T
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  H! G& @. Z* `( X' `
    {* r  [  e6 [# [. a
        /*  测试UPP传输的同时操作普通DDR数据: E/ ~- ]! S7 F+ V9 U8 X( {
        temp=i;' w/ V8 q$ U3 t4 i
        i++;* S* \4 Y( s  ^: ~, `! `6 i
        if(i==1024)4 \; l# O8 f, H' j7 a5 \) V0 Q- Q
        {2 ~+ X" i! p% N) \
            i=0;
$ e; B; ]! t$ v* V            j++;
: y4 ?8 N" v' }5 D        }
! A7 F1 M: u8 r( H7 g7 H9 F1 v) }% m        */& e9 U) D) g( m$ A/ ~5 O

7 D, W( W2 C* B- q1 H       asm(" nop");
: A8 M$ \5 f6 T; W4 r% N
/ }; X( B2 g+ a. Q- g       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; X3 y$ s, ^. H* j    }
' L, j- z, [0 e! K7 z$ p: u4 U/ \+ h- M: c1 E
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* {$ k6 c  U; T: n( B0 I! f( K( k% I
    //UARTprintf( "i=%d\n",i);! c6 n! ?0 E# h
    //UARTprintf( "j=%d\n",j);6 u: s  v0 P" Q& y
    UARTPuts("Data mismatch in buffers.\n",-2);
7 H0 p: G1 ~2 K- X- Z1 I    if (upp_interrupt_count == 2 && upp_error_count == 0)7 _- [0 s) w+ |: S" T% N
    {! a, g, W2 M  e! A0 v7 [
        for (i = 0; i<upp_frame_size; i++)
" l) y5 j' z. ?        {0 m- ]; J2 a: x: Q9 t8 N& o. |
            if (upp_buffer_a != upp_buffer_b)) F9 X( e. N6 D. x
            {
. F% p& V3 W5 u1 W; W3 I' O                upp_error_count++;
) I, {* J1 s4 r- Z            }
% i2 O& f; E; h3 S+ [0 B        }
  K$ o3 O, n' |6 L9 P% o* B* M: r    }( n% \" i; W3 R& J2 ~* n6 p

$ o: r; V% A- ?0 b    /* 报告通信结果*/# w8 i1 Q- d7 x3 ]$ t$ _
    if(upp_error_count != 0)
) A2 \# K9 ?) C. c5 M* j9 k        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# W# t+ H! w) [  X. b    else4 j/ C; k4 Z2 T, C7 w' P
        UARTPuts("uPP transfers complete!\n",-2);
$ Y' Q4 A; m* g5 N  B7 |/ ?
/ G* E" e2 Z# H    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  S2 r! Q/ {4 T
    UARTGets(ch,2);
9 U0 T1 e, u3 v5 T    UARTPuts("\n", -2);
) ?" q# s1 Z9 M+ P1 R9 a( j3 Q' w) S- i# o- I9 J+ q2 N8 i* K5 T
    if(ch[0] == 'y')
& M6 l' z3 _9 o2 p/ r    {
" y7 W6 u, a0 H7 k) d        /*打印全部读到的数据*/
) ^" S# d& Q* C# s5 ?        for(i=0; i<upp_frame_size; )
- Z9 V9 e- m$ ~* x        {
8 ?+ j1 s( |. ^9 ^            for(j=0; j<5; j++)
" A8 U) Y3 i- S( e            {+ O2 u8 Y  L; H5 H5 y% U# {. B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 p0 @  h  S4 i3 E                i++;9 }1 W2 t+ K/ C
                //if(i >= 4096)
0 `6 `3 F6 Z) t2 b, V0 E                //    break;& n, I  l$ |+ X) Z4 y- A7 v
7 C: Z- ^! U1 f+ ~) Z' ~
            }9 D$ A, H2 \% N- f- n
            UARTPuts("\n",-2);; Z' D) s) E1 ^3 Q1 |, K, V
        }9 Z. Q# w5 F/ _) ~  s
    }. Y- ^2 E  g5 X" a% ]
, O3 D( j, e5 T$ f7 c
}

  M8 T  h! C" t; H

+ G3 W+ H& d$ X4 m' n, t* ]
4 V( K+ @, a# I, D# `5 e( D* j8 P% ], i
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# k( v& r) |8 u; f

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。: v0 O6 X9 e. p8 t





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