嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ ~; X  m5 [% l
Void UPP_TASK(Void)$ X. f( p/ v1 r- I. ^0 w
{8 N. g$ _# i* a9 p
0 j# K4 u" S  Z) {3 t
    int i,j,k,target_int_count=2;
/ u: m, l. L7 y( H3 e( B, p" y    char ch[2];4 v3 C# X9 j8 g

& N9 U9 y# R2 i
/ I! d3 |' G( u/ U$ |
2 ?, f; F0 p7 ]8 N/ j- D# d7 ?    upp_interrupt_count  = 0;4 F/ D% i. L3 t! J- Y
    upp_error_count = 0;8 t* K; K$ |! c; O- W

, t* l- |9 K  \5 \/ }    UARTPuts("\tResetting uPP buffers...\r\n",-2);( f6 M2 E4 e6 s- f+ c8 L, r
    // Initialize data buffers
; H( W2 t6 x! Y8 z' Y8 v    for (i = 0; i < upp_frame_size; i++). t1 G: p' g$ M) E& q% }2 J
    {  h) w3 x( l- D7 t/ C1 U
       upp_buffer_b =i;% ~: ]* X6 ^- y4 X, M* L: Z6 K
       upp_buffer_a = 0xDEAD;7 Y+ `. K& B; I) r
    }; X8 G5 o4 p4 D  u8 A! c" b

. Q8 O, C' \3 h$ U0 E4 m/ ^    //for(i=0;i<1024;i++)! t3 f7 ?* @* S4 n
    //    temp=0;. k) x1 T3 [7 a0 z# P# x% t

7 E7 n. e) A" l# c  ]6 `    //UPPReset();
% r. q- N/ r: a% \. S    /*启动UPP DMA传输*/; @) c. E* _# p* b9 r8 E0 q+ D
    UARTPuts("upp_prog_dma_i\n",-2);% t7 ^/ e4 P8 x% b. o
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 c" ^" z3 x7 x& V8 q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' e0 P0 x9 v. f; {6 G
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 a2 T2 o" W, q" w$ M  k
( I; C$ Y! F, }    UARTPuts("upp_prog_dma_i\n",-2);
' h! X# M1 b: E( y* N  o0 t    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' g" E2 e7 d" Z& i- X
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 `. \- h4 P3 x; M9 K: O& Q1 n
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& y2 [1 m( n5 {* J2 S/ I; g1 }! H) v2 R2 w$ X3 M
    /*等待UPP传输完毕*/
1 r/ n# g. V# C    //i=0;
( T# k* _+ K4 \) L; n- D    //j=0;
' e( i+ b7 W! u, l  J8 U+ t+ }    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 d( f# D/ m" n% w6 H+ i6 g8 S    {% I, }) p7 E; s7 x7 n( G  L$ R
        /*  测试UPP传输的同时操作普通DDR数据
( Y& L* O3 r- D  _" F) v+ o) E        temp=i;, k) e/ C* o; @& n+ N. ]
        i++;, J8 N8 e' @: r) k$ Q3 i2 c( T
        if(i==1024)# \/ W" \* ^3 m5 n5 f9 P+ f: b
        {
  a4 ~2 X0 g. d0 t+ y# [( U, s            i=0;% M" O5 d8 q3 r' E0 U6 n6 ]6 e
            j++;
1 L) w8 R* C- S; G0 q) j2 \/ `        }8 e6 w2 ?4 ~% y
        */
4 J1 T- B5 U: T' V& j  U
# e' S3 e5 ^: V# X$ C; l& H5 v       asm(" nop");0 M! t5 Z" a6 ~. m$ k

$ w7 D, E: s2 D8 e) ^       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" ?$ p: p8 g1 w% u& E$ q) J0 v
    }
! r2 W9 I2 z) j  m: U) Z4 N% U! D7 C
    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 p4 b  x) N* B- [
    //UARTprintf( "i=%d\n",i);
$ A3 _% g0 ]1 p3 P/ b4 N& |    //UARTprintf( "j=%d\n",j);( p( `0 w2 W. c2 d0 j
    UARTPuts("Data mismatch in buffers.\n",-2);
7 m4 a" L9 }9 @    if (upp_interrupt_count == 2 && upp_error_count == 0)
; U, j! O3 f$ U7 i0 r    {
- C4 I3 \2 v0 v0 S        for (i = 0; i<upp_frame_size; i++)
6 E: V/ ]% o" r  L0 a  k        {% R2 [( s8 u9 s7 A
            if (upp_buffer_a != upp_buffer_b)5 g# B5 c& D& G3 v6 |( r: V
            {
+ t. ?: a8 r  `! N  V$ t0 _/ ^                upp_error_count++;9 T# a, U6 J' F/ i& n
            }( h0 r" p( z$ x' Y9 U3 o/ Q
        }" Y+ z- j7 M3 E- ]( l
    }  x6 v9 W5 \& r4 n/ E: }
7 P5 n8 O  [' [
    /* 报告通信结果*/
# J. g3 M0 ?/ J% v' g    if(upp_error_count != 0); v' r  Y4 v8 E- w5 g1 O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);- N5 E  [9 U9 l0 Y; _3 p3 E7 e
    else
% w6 Y, f7 r. c8 d0 s0 G( l+ e        UARTPuts("uPP transfers complete!\n",-2);# C1 B/ R1 F# o  `3 E

: C8 Z7 k3 y7 W# b( Y* {    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
4 j8 j5 O# w2 f6 k  M1 [    UARTGets(ch,2);
" m- C. p& y8 P$ a: Z4 h    UARTPuts("\n", -2);3 S; E$ `. D* a3 y' v+ k' H$ ~

0 K4 a  M' \5 o    if(ch[0] == 'y')- i  F$ m, C, j5 r; U1 {8 Z
    {
$ s5 {+ n  M2 ?& K+ v1 h8 L! N        /*打印全部读到的数据*/* u* ~* g% a+ X* u# T& M' P
        for(i=0; i<upp_frame_size; )  s& k& k6 S+ o  L0 b& [: ?
        {3 Y0 M$ r4 ~& W( a- l$ h
            for(j=0; j<5; j++)% v1 U& B, y+ d5 T9 H3 c
            {( E3 t' S# i  C" z! @) a. S
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);: a! _; `. p  W' d$ V1 f6 N. @6 v1 V
                i++;3 J( G' w' h; a6 n1 t% k
                //if(i >= 4096)
7 z  k6 X/ f: g$ V) i( z                //    break;
6 F: w' J/ `# k$ }  A! o
4 H, y% l2 _; M- d/ `            }+ l7 ]2 y; K) _% ~: V
            UARTPuts("\n",-2);
# O0 @3 M3 j1 }        }7 y* V& r+ `4 j; I2 N
    }
/ e$ h* }8 T7 ~1 N& `7 Z4 c, v
}

) n! Q3 g0 |2 [- s' Y' s0 D( @

& j; N0 P" U5 w+ k: t
2 E& u( o) X4 J2 N' D8 Q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# K+ \5 L+ g* u+ C
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, w4 A2 F% N* e





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