嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 M% N, \5 z+ G4 W. K
Void UPP_TASK(Void)
  n2 ^, }# T1 T. X% m  r{; H0 r. J- U7 D4 F" H

8 s: ?8 @, h1 F" v    int i,j,k,target_int_count=2;8 d* b' R* z8 R9 k; \( J* v
    char ch[2];
2 ^8 F; @; X0 Y
- C! G1 @9 K7 d. |, r7 I
/ u9 |9 c$ P, p0 h1 S; p3 p( y; Q( ?  \7 b
    upp_interrupt_count  = 0;8 @- |. v& E5 D2 Z0 ~
    upp_error_count = 0;
* Y" g4 @. Y7 H. d, ]" Z/ ^
/ \2 ~, y6 j7 Y! |# o! P/ V    UARTPuts("\tResetting uPP buffers...\r\n",-2);) \5 B# ^6 P' m& N, o
    // Initialize data buffers% g* `9 x9 ?+ \1 B" n
    for (i = 0; i < upp_frame_size; i++)
& e2 W* ?) R9 s+ B/ e2 E! M0 |    {) x! r  z* A7 T  E- q! g# T1 s1 y
       upp_buffer_b =i;
: y( W# x! |" Y5 J$ L; h& I       upp_buffer_a = 0xDEAD;/ M, A  i' ?6 Z3 \9 j8 d
    }
; g1 @4 S+ E' l- V, R  ]
. t7 l/ o# v% `& q3 ^; ^  }; D    //for(i=0;i<1024;i++)3 q! K' L5 n! F7 N* p+ k
    //    temp=0;
2 O" w1 c: ^( Q3 ^8 }4 V& v6 O3 q9 p( q! h) ~6 i) T. {1 O; a
    //UPPReset();2 _  |5 L) F! ]# x' `  i: u1 ?  D
    /*启动UPP DMA传输*/
" ]% _& Q* z3 ~/ V  j1 z$ `8 i3 B: z    UARTPuts("upp_prog_dma_i\n",-2);
) \, o; F# N7 W4 }# G4 t, G' u    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( K- B: s# a2 D3 U' l  K2 C
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( A0 K, T7 O8 B5 z7 t' ?% ]' d    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 z2 [% S# t) e+ a: \+ t
7 m% }0 |6 L, l0 Z$ J; b    UARTPuts("upp_prog_dma_i\n",-2);
! L& s: J# B- |7 Y: l1 q( [    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" K. \9 ]2 x0 b/ `5 ]; k, w$ Z: q    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" X, {) R) ~; B" Z* _7 n    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 q5 |' u+ Z( `0 y( ?4 A0 C1 ]$ B$ {
    /*等待UPP传输完毕*// F" G! u3 N' c
    //i=0;6 R: B. r9 e5 @- O
    //j=0;6 k# u1 Y5 A5 A* j2 ]  ]
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ p9 d! r0 u" l9 y    {
1 h% a3 z( q) `8 R# q        /*  测试UPP传输的同时操作普通DDR数据
' t9 B# ^7 l/ D- A. u% I, \& }, M        temp=i;9 [7 v$ j" T& Z
        i++;
* l( L! c# }# j/ W% h; |        if(i==1024)' U( I2 d7 j( I4 z6 V; u3 R
        {
  D  D9 y+ N5 h# K            i=0;: V- b. b" C& d1 S' w8 a. \
            j++;
6 t2 E5 H7 ?" b7 C: j# I        }( J! F6 D: f% M' K8 Z9 U8 j# g0 q
        */
. r. H0 ?, f/ x  {" M  a6 E/ ]- c" |2 t0 ]
       asm(" nop");' o$ R1 [# a, Y6 N

: S" }. I& a: q3 T& x7 T, s2 q       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' ^: S+ e: |' k    }& n8 P% O- p* m! H
+ s* |; ~& w9 ]: C' {
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* c/ E  K! J  T' A% f) ]$ q
    //UARTprintf( "i=%d\n",i);
3 f' |8 f' U$ o* Y. v    //UARTprintf( "j=%d\n",j);& n& ~0 `# W6 m2 B
    UARTPuts("Data mismatch in buffers.\n",-2);8 G$ L) n: k% b. q# C; w3 y
    if (upp_interrupt_count == 2 && upp_error_count == 0)
, p, F/ F. }2 i  Y$ u    {; h# ~3 a( i1 n; [0 j
        for (i = 0; i<upp_frame_size; i++)3 \, r0 O* }& q$ W! E: t# `
        {# t4 `! P* e$ o
            if (upp_buffer_a != upp_buffer_b)
3 N& d1 y% p* s! S            {
; v$ l$ K1 H3 {6 P* _7 g                upp_error_count++;8 p9 J, a/ U7 G. F" ~
            }
) N0 ^1 o; P6 g' k) A+ p4 q        }
" A; f# B, E, o+ ?4 ^* F    }5 n0 H5 C7 t& t1 o( o  G5 U; m
7 H, B3 h% t! b! b* T) N
    /* 报告通信结果*/
/ [' \9 {7 f0 Q" U    if(upp_error_count != 0)
7 `: @2 K6 ^' v8 U3 p        UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 X' {& T+ Q$ p6 [, Q/ I0 j4 E    else
: N/ ^( |8 D% x; K* _        UARTPuts("uPP transfers complete!\n",-2);
, x2 B8 o$ p* Q4 \. N' F! |9 D9 b1 `; ?* n/ p" d& j
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
3 m) t4 l1 b# b8 [5 \, r    UARTGets(ch,2);8 ?  ]( e+ L$ i7 i2 O
    UARTPuts("\n", -2);8 n/ ^3 r5 n( ~( a) F( j0 P/ E
( _( p1 Q; X5 u1 \; g
    if(ch[0] == 'y'); Q4 Y9 J% T  ~  H
    {
) D7 a- Z. ]; Z        /*打印全部读到的数据*/" M: j  z/ d! t' x2 r* M+ R
        for(i=0; i<upp_frame_size; )
& v' x9 H+ o7 B  P& u        {
$ V, W) _: j. L- |4 O! X1 `+ I1 L            for(j=0; j<5; j++)( A/ p& ~6 v5 f, O" S- d: }9 @  u
            {& {: A4 W9 {+ g) a! n
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ H; _; j7 M9 O% X4 ~0 u" v                i++;
9 e( N0 q+ k* w5 Y                //if(i >= 4096), s9 u" ^# T0 I+ b* a9 I) m. ?9 Z
                //    break;
4 ]8 ]& q; B6 J7 C; }! N- T7 l0 y
            }
* g  d, _  L8 U( S, k5 Q- S            UARTPuts("\n",-2);
8 M: p8 k6 O3 I* z. X        }
5 l/ S. N% E1 m2 ~9 H! N1 B    }
) ?1 l: K  u! {. `- \5 I9 r4 |; x, F. C# l) G1 V
}

! f1 W7 M; X2 a- T

/ @+ F. m: o* @& u7 z& r+ a( X) {- i  O0 e* C# s1 u, Y1 ]

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. A( M, v/ h3 ]; S1 U9 t9 ~

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 l! w" Q/ X/ }- u7 P





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