嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; g! W$ h, x5 j3 H. z# U! F: Q
Void UPP_TASK(Void)0 L0 n2 l& K. i9 r2 ~6 F
{- C( g: s- y! ]" f
% y+ W; ~! S/ N+ b- Y6 ~/ E* r# ~' W
    int i,j,k,target_int_count=2;. ^1 d) ?7 F7 n+ B$ c
    char ch[2];+ H5 u9 q% r, @8 z

. y- \6 _# \, T+ m9 f% n$ p5 g8 F! Q0 ~# v; c& Y) u: s+ G3 _' d" o0 X- C4 T
2 c& m+ H) B. l# Z( k
    upp_interrupt_count  = 0;: @% V" d; g3 X  H6 ^; y3 y. O! F( m
    upp_error_count = 0;: f3 K+ q% p7 `) o: k
( e% \% s3 ^0 T
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; ^1 e, ^$ X+ X- q7 p# B" k, y    // Initialize data buffers+ N  _+ ]+ |8 [# W" R" E" x/ k1 ?0 ]
    for (i = 0; i < upp_frame_size; i++)' x$ T$ Z7 \& |  B4 O# Y9 ~  \8 E. k
    {( U& l9 m, U  ], S! u
       upp_buffer_b =i;
0 D; M% j: b/ @       upp_buffer_a = 0xDEAD;" ?5 I# W+ ?2 q/ N" X- m
    }
( c' c3 r9 E* ^, Y2 j( e1 p, J+ X6 G9 S. y( C2 H& u& r* ~! Z6 ^
    //for(i=0;i<1024;i++)# x5 t. Z$ G8 f
    //    temp=0;8 S& T/ g$ o( y& i+ T5 |7 G
# _/ `% l0 J  C+ H7 I- c
    //UPPReset();, T6 U; L+ X( J/ ~1 \
    /*启动UPP DMA传输*/
$ ?+ L  n& X% }& A    UARTPuts("upp_prog_dma_i\n",-2);
6 y6 r3 a6 a0 G$ U% |; j    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 h7 A7 C# x+ |* d, k
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 D5 n6 h: v, M    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% R; p" N, p( A7 J  F  S2 M# }

7 f& v; m6 L0 z3 n- d( `7 Z    UARTPuts("upp_prog_dma_i\n",-2);
5 o: }, p8 D9 e: {4 u1 i+ B- A: X    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 [& O4 ]6 `& w5 ^- X    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) e3 g) v. j1 _) g9 m6 w' G# D    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  V0 X6 p4 |7 [
: N( L& ^6 S! D/ V1 v& L& ~7 f
    /*等待UPP传输完毕*/8 W# n& o) P  W2 ~
    //i=0;. t; {8 ?; n# }5 {* j) Z
    //j=0;, f( L/ T$ T3 [' L9 N, ?
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 I8 |  Y1 ]1 Q6 \    {
  S+ e4 V# E" _6 T/ L% r3 |        /*  测试UPP传输的同时操作普通DDR数据
5 u- D3 |4 ]3 B: G* X2 G$ B9 K        temp=i;
8 m3 |1 s9 W* E% q/ s        i++;
& S& J; g% v; ?' e7 I        if(i==1024)9 L7 Y5 U5 h6 T/ C2 E) Y$ o
        {
- S1 D; H3 ]0 b) i& ^            i=0;
: ?3 m8 c5 A  F/ l! R' Y# X            j++;/ G- ]0 z8 U, f7 i
        }
7 v9 u# }1 K1 e7 ]4 x        */
; I3 U& P% _  ~0 `1 ~2 e6 z7 ~+ k- {; t* Q
       asm(" nop");) u5 B7 y+ X9 [3 m; e8 T

! w0 Q% d# v3 _& n+ P2 _2 }2 x       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 D8 W- s5 G' H; x, S: w    }/ J1 E5 e1 i! E7 }4 T. }( _. U

! J; E6 v# S) V* V    /*检查UPP传输的数据是否正确 (loopback modes only)*/, }2 V$ F, S, K% {4 J) u
    //UARTprintf( "i=%d\n",i);+ \9 m. G9 ^1 Y9 h3 V9 \
    //UARTprintf( "j=%d\n",j);$ O; c  W3 _( e& |, z
    UARTPuts("Data mismatch in buffers.\n",-2);
: s( _( M* ]% w/ ^8 Q* H. U8 c    if (upp_interrupt_count == 2 && upp_error_count == 0); J8 v4 @; n2 j& ~
    {+ r1 b/ j" U- m; B+ j, U2 B1 l
        for (i = 0; i<upp_frame_size; i++)& t3 c- t$ E7 v. p6 D
        {
4 J$ F+ g5 z4 P4 F            if (upp_buffer_a != upp_buffer_b)' x, u- u  D7 I% d/ H: x) V
            {- `% _6 P/ Z1 T( J9 I
                upp_error_count++;  Z; {+ U2 Y1 a: y
            }
6 P3 \7 l7 D4 t3 q4 l        }/ y9 B$ F# ]6 R3 ]  |
    }- n" i8 R4 e& k7 a- I

5 F+ f2 J. @+ T# @% [5 q    /* 报告通信结果*/
* t! d0 @' `" k. k8 f" [+ S    if(upp_error_count != 0)! T+ J* R5 c' t! g2 |# k- O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ y% X, p" K4 F* y* e# g5 d    else
$ ^) v# j. f6 @3 ?* q6 e2 j0 P        UARTPuts("uPP transfers complete!\n",-2);' {9 X. z$ M; A/ o
: V* I, y$ R8 R) t% e
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; `. k" ?* W! S1 q4 e" T    UARTGets(ch,2);
% N: n8 w$ M$ L" w) C, m% L- k/ `    UARTPuts("\n", -2);6 a& ^) G# W4 I
7 ?8 d7 K5 O" g3 V! ?+ ^
    if(ch[0] == 'y')
" S# {2 e7 m% ?- j: h    {, A$ D/ J# q2 v  Z$ D! P7 D) D$ ~8 r
        /*打印全部读到的数据*/
$ N$ x3 Z; @& t        for(i=0; i<upp_frame_size; )
: t& L( a% P+ n( R- G" n) E        {
, p: [: r+ G3 E; W5 H" Y3 c            for(j=0; j<5; j++)2 P; s# p' v. s$ n5 D
            {
# u/ U1 Y( M' |- ~                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 n# i- u8 R1 @3 R8 j1 y
                i++;8 {/ ?! M& H! \7 p' t
                //if(i >= 4096)+ X! i" S' k5 @) l
                //    break;) U. u6 Y2 r. c+ @9 c5 \+ t
. g; S& Q5 \3 q5 R. X
            }8 \! |7 O! d4 k( K
            UARTPuts("\n",-2);
* [4 w( K$ ?( S& x8 ^        }
/ R7 K0 c1 q1 c) v6 V& Y    }
% l: r% U" G) p& \8 a; S/ g# f- n1 O8 U2 ?
}
3 ]% R+ L: B" x" B( y+ n0 Z
+ s7 \: _5 u/ m% O% T. o: H

6 z. v7 ~$ P( H4 L+ r6 L
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! r/ d& z- I" x! S4 O* p& }5 h

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 ]; ?$ K; S5 Y4 V+ d6 }- n




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