嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% B3 p- t$ R) B( O: o
Void UPP_TASK(Void)
2 ~3 \# e; E. C6 m9 m{1 _1 [! b! p% W5 P) i8 G

3 w( R" y# f/ t    int i,j,k,target_int_count=2;7 b' o% }% r3 \% A( c
    char ch[2];- g# `6 N! Z( C  F* E# b5 E
: d/ ~3 X" @6 i  b! I: @" F

2 l, w7 B. K& J8 B% a3 |4 R7 {. O7 r' [; ?( f5 ]) o1 g8 [5 y+ K. u
    upp_interrupt_count  = 0;: c, K/ k' ^% Z( u
    upp_error_count = 0;
2 k: O. v) A/ X0 w- _2 }) q
0 b$ S; K$ h8 s0 M    UARTPuts("\tResetting uPP buffers...\r\n",-2);& L5 z7 P3 w2 Y. f' V7 T; o
    // Initialize data buffers
+ b2 I# W2 V- z) j' x$ ^. ]% F    for (i = 0; i < upp_frame_size; i++)
3 B5 T1 f7 t3 L: ^    {
  g. y; q5 C( H4 H$ d4 P       upp_buffer_b =i;  v- u* A% T5 o, q! o1 S5 Q
       upp_buffer_a = 0xDEAD;
7 D) B, T+ _- }" J! \/ U0 r    }, m2 o  J- U# y& K0 W4 x0 f' ^

$ o, h) e# s5 c% r    //for(i=0;i<1024;i++)
  ]- O# G/ M3 x! \    //    temp=0;$ p  e" Q' q* o6 {! D/ N! c
8 U( ]% G" y8 D8 n
    //UPPReset();; K- Q5 b% r2 N( h1 `8 n0 z- q# Y
    /*启动UPP DMA传输*/3 ~. E( _% g/ b; R, B, T
    UARTPuts("upp_prog_dma_i\n",-2);: U. j' _& n7 }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 m# z$ l6 g; T
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 D8 P7 \3 e" @
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 M7 C' a8 E* R
* Y4 p" ]0 M; s1 O/ V
    UARTPuts("upp_prog_dma_i\n",-2);$ ^2 [* F# e5 v! f0 B; M
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: y# I3 n# z" L& g    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ q6 z& E$ J* D4 r
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);+ w- Q# r1 T# E6 b8 B1 b# R, Q
; N4 W4 v6 y0 T: j) a
    /*等待UPP传输完毕*/$ J  s: ~# ?9 a# j
    //i=0;7 q$ k; j- h" }0 f
    //j=0;
* N& L! {. j) {) n    while (upp_interrupt_count < target_int_count && upp_error_count == 0); M1 B$ u' ?! I- y5 Q
    {
+ ~4 V2 @" I+ s) b- a        /*  测试UPP传输的同时操作普通DDR数据
; s7 p6 ~% h( E* {        temp=i;
9 T* X; m! \% T1 {: e        i++;
# ?. ]) i: `0 Y; u! e# R        if(i==1024)
: a& f# O+ p0 ^* B        {4 ?1 d# U0 `$ u% ~! `( z. {) Y
            i=0;
6 c4 ^0 ^9 P; A0 w; \- O            j++;7 k- o" n- G7 z6 R8 k* X
        }) G  L# l( B* K. L
        */+ U5 _2 X+ C3 ]7 ^! L, v' E
1 }& F3 Z! `( ?5 Z
       asm(" nop");
9 b; e7 [9 r  R% t5 P7 a# l7 J* p! ?7 l5 I" f
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' k: H1 h1 I' E# O) ]( ~$ l/ s3 _
    }
6 |7 R7 t& h* g, ?
9 A( |$ {. O" m    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 B4 Y" ^8 Z5 ]. ?6 O    //UARTprintf( "i=%d\n",i);* y  X; X5 D$ u( [! ?
    //UARTprintf( "j=%d\n",j);
% ?7 U9 K' E  |2 y5 L, k    UARTPuts("Data mismatch in buffers.\n",-2);
8 I+ e- ^3 K) C2 L( w0 u# d, S    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ t0 \: N6 H" x) s  D  ]% g# h$ H; _    {
+ n$ F# y3 B3 O. T        for (i = 0; i<upp_frame_size; i++)2 Z( A- P7 Y% j/ @  a
        {
/ L+ n- [+ [: v4 p' U0 D. H            if (upp_buffer_a != upp_buffer_b)
, z' O! H, M% Q2 F) i1 u            {
+ n5 ^# x. ^8 |6 T1 A                upp_error_count++;
, R  A  `% Q  C  H            }
: z  B- h  {. {) o) ]/ p2 u5 [        }$ E, Y5 _3 |1 L; D- q3 Z. g. G
    }: X1 r$ o. N, u/ s6 c: h
7 \( E; T7 ~  {
    /* 报告通信结果*/
3 P* ~/ W  ?: M" _' d$ \) a    if(upp_error_count != 0)8 \/ a- \" `8 S
        UARTprintf( "upp_error_count=%d\n",upp_error_count);; |( U; K) \/ s) n9 ]9 o& i
    else3 F: l3 z+ [9 U0 G7 g: ]' N
        UARTPuts("uPP transfers complete!\n",-2);
$ j& o4 N. b+ @; {" ]& @; r3 o% A) X$ M9 Y: l9 z9 E4 Q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- l; R6 m7 I' @4 u( E3 W: d/ [5 u
    UARTGets(ch,2);
3 r: ?0 S4 G$ `( V: D; ~    UARTPuts("\n", -2);
1 m& B4 B& {4 G" ~% E' j
  ]  B" s/ j) I& z% ]9 v    if(ch[0] == 'y')
& ~$ y3 ?+ x* Y' k' d  s    {5 O( k1 \! m9 _( V( t+ I
        /*打印全部读到的数据*/4 Z- d1 _2 ]! y1 ^
        for(i=0; i<upp_frame_size; )
4 }; g3 ?: A' a9 R. j        {
7 @9 ?. |1 `, J4 s$ e            for(j=0; j<5; j++)  `5 g! q: T2 B  j, h# n" _+ t
            {
5 H1 Y, }% s" W3 }* j7 ]$ i( i& b1 j4 P                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);: n# x6 J% E0 j; y6 z/ p
                i++;7 G9 F4 v- V, p+ l
                //if(i >= 4096)
/ y% f; b+ Z  z) O1 q2 ^  I% d9 u                //    break;1 [0 V5 c6 [2 b4 R; _. Q
% i# q. U% b, W, m7 T; r
            }
# |. w: l; D( d            UARTPuts("\n",-2);
* M' {0 w1 g: k# R" o; R        }
0 W$ n4 {# q; L% E9 K    }/ P( t" d, ~# b, N: v

& z. r* S, N+ P% H: T6 b% h+ }}

# F! X/ _$ B0 g- M* F

! t7 A- ~. F$ Z* n/ o/ {: F  l; k" c7 N+ _

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 k7 ?- `; \# e3 W# Z% [
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 x5 D- ?! V2 R+ j4 T% E0 B





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