嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# b" Q4 S/ B4 B! N- ]- _
Void UPP_TASK(Void): A  m* t  e7 p
{
* W. m2 H. x8 h4 m7 b8 T2 V. _2 ^0 @! t4 G# U$ V% ~
    int i,j,k,target_int_count=2;3 `) `/ O3 z/ @# ^
    char ch[2];
% y4 b, n) A* A. Q( `8 x; z, m  y6 s

. Y0 S( X0 [! {- {( P( ~4 G
  o( s1 Y5 n7 m- J8 ~4 r    upp_interrupt_count  = 0;. @' a0 n$ d8 o0 i- R
    upp_error_count = 0;
2 b. ~! }7 l2 b- C2 D
" K2 w1 l2 {1 o# F1 U" A0 ~    UARTPuts("\tResetting uPP buffers...\r\n",-2);' R  A1 y3 Y* y4 c; P8 ?- c& }
    // Initialize data buffers% V) ?% l) l- t1 ~8 V
    for (i = 0; i < upp_frame_size; i++)1 h5 {' ^% V6 p7 @+ k# ?
    {7 P0 F% @# q6 ^) U6 w' f
       upp_buffer_b =i;
7 J9 F/ j5 b+ z4 D/ l. B7 |       upp_buffer_a = 0xDEAD;5 t9 E; c9 f* M5 i9 Z3 b8 ]
    }
4 q* e3 n. `( O( ~; L
6 m8 f- Y' j- _2 P) a' i    //for(i=0;i<1024;i++); x! `2 m5 e3 l* F9 O1 b( {
    //    temp=0;* l( D* q3 P/ E3 k
% H+ S: H; Z; z$ a/ q' B3 q' x$ V
    //UPPReset();
1 ~3 w( V7 W* d) ~    /*启动UPP DMA传输*/2 z5 Q: H  A% _# O$ s7 n
    UARTPuts("upp_prog_dma_i\n",-2);" s  d+ ^( t/ l4 g  r( |) [; r" m+ s
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" m! T# t) v2 x+ z, W' }$ u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 {, y7 v7 a$ B6 P
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) }0 }# S5 a* f- }$ S7 o2 ~
5 N$ h% }% Y9 |    UARTPuts("upp_prog_dma_i\n",-2);
" k+ e6 s5 M" F& s    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% F6 v5 _2 n2 U    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 c5 ?4 A( o7 ^2 X7 F
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 C, p: b* a. M8 w0 F8 X* u
8 z, ^* l# t9 A+ k. Y
    /*等待UPP传输完毕*/
7 |3 v& x8 Q. E    //i=0;
% i+ {& O% O( \5 d$ p; i    //j=0;
' I# |9 J8 l1 w" A' J* b3 t5 V" X    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ ^$ k- }$ O( i- w# c
    {, N, E( D. t" M, R
        /*  测试UPP传输的同时操作普通DDR数据
9 w7 ]! t; x3 W+ C        temp=i;
' @& |) j) }  ?; A2 d) e  `        i++;8 c# }: ^5 S* X. A- E( p' l9 z- z2 D
        if(i==1024). z4 x: G# @: a3 z4 S
        {
* ?" D1 ]6 o+ ~% Y* y            i=0;, y6 _9 K0 c6 V
            j++;
. Y- V! e% w3 K5 d  V/ h        }
0 i* \# N6 r. A0 h: }        */
+ I1 I2 H# F6 |- o. g8 L3 c- N  w5 e6 m* i3 f$ f; `) Q7 |
       asm(" nop");* P) F4 K; a8 e, K% b/ R

- a1 P0 \% q1 L5 l! j       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 R. a* n* }1 u1 h2 r% Q
    }& m* L% |% s* M  D6 U: W

, z4 o. g5 p) \3 U# N    /*检查UPP传输的数据是否正确 (loopback modes only)*/; ]. H+ _& V7 ?
    //UARTprintf( "i=%d\n",i);6 w, k3 ^' T' y" U, L
    //UARTprintf( "j=%d\n",j);
, Y/ c6 r" I$ u5 Z$ M: X    UARTPuts("Data mismatch in buffers.\n",-2);
3 d" ~9 S. Q! A) s2 D" |    if (upp_interrupt_count == 2 && upp_error_count == 0)/ E$ h: G6 d+ r7 Q- x  i
    {* @1 i  N1 r% e1 |' Y1 R
        for (i = 0; i<upp_frame_size; i++)0 p1 ?5 b2 }4 N
        {* Y" ]0 b) k5 r
            if (upp_buffer_a != upp_buffer_b)
$ F/ U7 ]6 _  [3 o" }            {  j  X* G; q: V4 `. d
                upp_error_count++;
, [0 R- H( N4 S4 n" L1 X) C1 X            }/ ^6 R0 K- s2 L! z+ ?9 T
        }
  k6 f8 P' F/ P# C/ B    }1 h% `* i/ C5 [; ~- [( ?2 S
/ i. Q( [1 E- e8 v" |) a
    /* 报告通信结果*/! L+ L+ N7 f6 d' w2 \$ o8 @
    if(upp_error_count != 0)
' X* L! w9 H  O$ J" T7 f        UARTprintf( "upp_error_count=%d\n",upp_error_count);; B& k4 r1 x1 k, q5 v
    else8 ]* W, ^- L2 W; `. S" s
        UARTPuts("uPP transfers complete!\n",-2);
6 J8 y5 H& @" F1 Q8 |7 V6 A- M5 m5 @1 c4 M; o5 r! G$ k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- p. H$ L: A5 \, o$ J* g( W7 V
    UARTGets(ch,2);
/ i( \$ h+ }6 _0 b    UARTPuts("\n", -2);$ J2 J; w; _, V' g

! v' {% c9 H% I0 }3 S2 k    if(ch[0] == 'y')5 u' u( }) V* b3 V) V4 ]1 R4 b
    {
& O, Z( w* e; _2 _- z! R        /*打印全部读到的数据*/$ u7 {4 q8 N5 L) ~9 B4 K1 O
        for(i=0; i<upp_frame_size; )
1 h% ], _5 v  d& ?/ p! x. b        {
2 U" o5 x3 d9 `* J! f2 w/ j" p            for(j=0; j<5; j++)9 B/ _' }) C8 |6 U$ V% c! r5 F
            {  A$ J+ }* P2 e# K8 W5 W9 h. |
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- v' B- c5 Q$ x9 D7 y/ c                i++;" e0 S1 g9 F* ~4 v. Z  F' y
                //if(i >= 4096)# }5 S$ A1 R$ d4 \! W
                //    break;* @: k4 b- B9 R

. O) }5 _+ {3 V            }0 M- V4 k: G! H1 ?& O% b7 `
            UARTPuts("\n",-2);/ {7 X9 q7 |# v7 U7 z- S
        }3 g3 f4 F( }; K. `0 U7 O
    }
3 `6 f8 [: B. d) R+ v1 O0 H7 \( H7 v* H6 B5 b
}

9 O% r; k% \8 Y$ Z; H

3 j% P5 w0 q( E# M8 |1 z' |; I6 q- o6 g1 d+ N7 c. k. D& j) {  v

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ O! j8 |! p) c, C

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, B- Y7 i0 b9 K" y0 T2 P




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