嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% `3 x8 `/ D5 t" [/ C( N! h
Void UPP_TASK(Void)/ s: R. G1 E! m5 c+ |8 D6 S
{
" [9 [- ?: t9 ?# E$ A( d5 z8 _9 M- l2 P; R; m
    int i,j,k,target_int_count=2;" Y6 w5 X8 z7 N
    char ch[2];
$ v. N4 L! @# v
" a0 q- @* [- ~# _$ ]' H% E  B8 J9 ^8 ^1 C( b. b6 m
$ o. W7 X9 l) V! ^0 p
    upp_interrupt_count  = 0;  q' F1 ^9 b5 `0 L
    upp_error_count = 0;
" R* {- ?: m/ u
5 l! q. V. y; C  D" v    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 m9 @2 G1 ?0 w  n* n5 \
    // Initialize data buffers
; I& c" h  }( W( b7 n    for (i = 0; i < upp_frame_size; i++)1 ^3 C3 L, h$ p  _: U
    {) i& e2 b( V0 L& p
       upp_buffer_b =i;0 `+ {8 s) `/ u' u+ W7 r; f$ U0 o
       upp_buffer_a = 0xDEAD;" p. t8 b4 m7 s0 W6 \
    }
  z% V& F4 z) J: C3 G" ?; R% r, K* p0 F% {* T9 d
    //for(i=0;i<1024;i++)2 T, ~% X& z6 R+ [' _
    //    temp=0;
; Y  D  n6 [0 ~! M; |2 J1 w: @1 t/ Z! Y- w
    //UPPReset();
/ @+ }/ n# V) h, b) C8 B: Q$ f    /*启动UPP DMA传输*/
0 F, F+ {; {1 E' h3 }) a    UARTPuts("upp_prog_dma_i\n",-2);1 I0 i6 F* T1 ?; O5 u
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: z9 D8 `! y6 n0 j$ c    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, U7 @7 T, {9 ?    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% ^4 o; S6 h# P/ V- D# r
3 x( `( s7 R- K& X  L: O8 x
    UARTPuts("upp_prog_dma_i\n",-2);4 l# j% H" {5 A- q# X. k- N$ q- @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 ^/ L( W' ~+ x1 A    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  y# m; ~" }- G# h4 W& D; u* E& ~5 o
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  {: K- P9 t2 P3 ~% z: W

8 ?0 g# |8 N) w    /*等待UPP传输完毕*/, B: w' D1 o! d7 Z
    //i=0;
9 y8 s* v3 k+ f+ F    //j=0;
9 A6 @6 v6 ?7 o) s    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# b' \7 U+ g( p5 r5 `5 C    {
6 q! T4 n0 [) E2 L" _" X" e  x2 O        /*  测试UPP传输的同时操作普通DDR数据
1 l* ~) ]- g/ v1 y* o! y        temp=i;3 l) i+ {5 V/ E4 _! m8 S4 o1 u& k
        i++;
/ ?+ l( H$ m' g$ M8 ]# b        if(i==1024)) s* X8 a- \. x) q' H* W
        {
; @' x. F9 g1 Z            i=0;
/ d4 F. u' U. f4 y" p4 f4 v8 K) `            j++;
. v2 y# }. V$ ^5 v( r' n$ Z9 D        }
+ Z. Z5 z: B  L+ X, X3 \4 ?- {        */7 P) F5 A, X; Y& {0 o! B3 x' [
3 A4 A5 \7 E3 Q8 }* g" a2 v7 c5 o
       asm(" nop");
5 {( ?# \% n" Q2 [2 u5 b) G, L) o6 K" ~8 F8 \) f; @: m+ }+ t) {
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);9 |' E: r' {$ T) t3 B- E, E' ~
    }$ R4 m3 I0 u. K) v7 r
7 D. c: g& O) r! a; D
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  p' O& Q5 O6 O/ O4 M4 F    //UARTprintf( "i=%d\n",i);
% j! b* J' H5 X0 k5 k9 j    //UARTprintf( "j=%d\n",j);
$ y  d& i+ ?3 N8 R7 k( I    UARTPuts("Data mismatch in buffers.\n",-2);7 M$ H( V: ]. v$ q/ ?' n8 [8 G1 H7 g
    if (upp_interrupt_count == 2 && upp_error_count == 0)1 _, s1 v  w' c1 a
    {
8 }: a' Q, K& U  A9 Q        for (i = 0; i<upp_frame_size; i++)- b& h7 U# U* [% m0 y6 _5 R
        {# H% `( R$ I7 o- O1 K
            if (upp_buffer_a != upp_buffer_b)
: M! w* X8 D  j  U            {
) d1 D3 a/ ~* v, C; p4 n# h  r                upp_error_count++;
$ M6 Y5 l: S/ y2 y8 @            }& A" L3 f4 n( t/ x) B
        }
  ^" X6 H, E# M3 ~& g    }
% ]- R8 G; M+ r" [& g+ V  p! D) V# L0 b) a5 |7 q
    /* 报告通信结果*/
- ]8 e- `  |. R+ I6 u, E: s    if(upp_error_count != 0)
/ n8 n2 ~, B/ Z; @. }        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 A6 I8 b1 D- k& R4 P$ f: I
    else
* W) `* P* i# @! Y) E6 ?        UARTPuts("uPP transfers complete!\n",-2);1 Q8 @+ d( l  L5 R8 j, O
; j/ L# O  h5 u5 j1 l- [
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% E' p, n+ i6 P  P
    UARTGets(ch,2);
% x" i) g7 `; Q1 \4 C! v1 }/ c    UARTPuts("\n", -2);6 s: ]2 Y+ f% l9 H6 Y) l3 J# d$ K) ^
8 O0 {# q0 S4 Z; N2 R
    if(ch[0] == 'y')
9 T2 R+ P* ?8 z3 G    {; G& j3 K: S6 \
        /*打印全部读到的数据*/3 r; a  S: [8 F' N/ x
        for(i=0; i<upp_frame_size; )
! V4 O: p' f1 _5 f+ n        {
8 P& I& b4 ]! l8 f/ l4 x4 i2 ^            for(j=0; j<5; j++)) I: j, n: c+ }7 g/ y
            {' v1 F9 i* N2 _& S% j. s: r5 O& v
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* f( t; M, E6 a6 K( Z- R) g                i++;# r8 Q) B" B" a# j
                //if(i >= 4096): U, c) N/ M& v2 j' X& r. s
                //    break;# ?- t4 I2 l+ l7 |1 Y( U2 o
# {# J( [/ a: N  d
            }9 y, n! V4 Q/ l& Q0 K
            UARTPuts("\n",-2);1 ^, f; _1 m% q
        }
- g% V, u/ q7 M: T6 v    }0 p  U1 D9 }) P- d0 B* \

. C+ |; M- }0 ^. d}
& P2 f& s* m+ X2 R1 G+ i) x
  t4 L0 z3 U- R8 ~* p8 F

6 {* u" l1 X9 F/ m) l/ K9 F, Z( [! q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" }/ }' ^' t# b- B9 }* L

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 k6 \6 {5 m9 W5 e  J+ }: k/ V





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