嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 K+ a" ]6 ^6 J
Void UPP_TASK(Void)/ ~# l8 [! z% u; w9 }
{1 e9 O4 _$ ?) H# j' V4 C/ K, V  l

' t" v4 X: l, C' j% f# R4 ]    int i,j,k,target_int_count=2;
% x0 W3 e1 Q# N    char ch[2];
7 Y1 h- f0 k* m3 B
/ j  ]  T2 ~# ~; ~) A, Z
; s8 ~  b% i9 i1 ], D5 B* k3 g
$ }% l" _- q" ], T; `8 F: ^    upp_interrupt_count  = 0;0 O* g! l% m- T# D3 Z9 P
    upp_error_count = 0;
3 ~* o1 z2 ^! j3 h, Z. m3 ]
: K; I7 B" g5 H" C  x    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 H# G/ h4 K- e# p/ ^; ~/ D0 Z
    // Initialize data buffers( C, g) C; N: ^
    for (i = 0; i < upp_frame_size; i++)
- a% }  x4 P5 h8 @    {
2 X9 Z) p: S: R! {3 y; @       upp_buffer_b =i;! J9 v) b9 f, p2 @
       upp_buffer_a = 0xDEAD;
) ?7 S) I2 L2 Q; f    }
* o9 T3 {' |5 s# A) ~7 n2 @* q. H# h! r, f( W  x, ^7 c
    //for(i=0;i<1024;i++)! a0 }4 `# ^$ l+ p
    //    temp=0;
; ]$ D7 p& W( ^7 W! }
: i' N# f1 q) b( |# P    //UPPReset();3 d% R6 h1 s9 B8 L2 ~8 g  ?0 q
    /*启动UPP DMA传输*/& k6 v" O0 K7 |! F3 w2 m
    UARTPuts("upp_prog_dma_i\n",-2);# C" K: c( r" t( R: U
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 R5 B1 M0 f; s) ~    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- ?! X) E- I5 M* ~# b* G8 [    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) D( ?) @5 X5 i! ?- e/ f& O

6 Z* g+ T6 D' a% r& Q    UARTPuts("upp_prog_dma_i\n",-2);8 r  ~% X2 Y7 @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;( g& e2 J0 Z+ c& e, W6 P- L; X. u
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  y  K& }0 W; r
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 G9 B6 m5 ~1 y' C5 ^7 ]' F
" @" j+ \& Z* r9 f6 z/ s( O* e6 R" L
    /*等待UPP传输完毕*/; v+ U( ~' b; n4 @# i2 w
    //i=0;, ~/ a5 g2 u( w9 H% T) o: f+ D
    //j=0;/ x$ @5 C- @4 x$ g& Z$ h
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 A$ H2 T6 m8 E* z0 l8 {( l+ j
    {
, F5 ^9 L/ d& x' H8 D        /*  测试UPP传输的同时操作普通DDR数据1 Y4 W7 a% O' D% S* `& `
        temp=i;3 A+ l6 S. {  y4 F" ?9 I# ^+ I
        i++;
- G2 n* J- h5 }7 ^1 ?" {, ?        if(i==1024)
" V0 k8 D! x1 f: ?        {
) D0 d0 W4 b$ ]  G% f            i=0;
9 m* I; T* b# V+ l  D            j++;
. x9 h: V" o3 c  T/ Q- ^        }
1 ^- n+ E3 G. i' x' G        */' G$ D1 z, P3 J# }$ Q  p+ Q' R; D9 H
& r# Y8 n& E9 K
       asm(" nop");
" s& p; i; g1 j1 w' l2 `; S( j9 g+ D: H- L0 M* P
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 [4 {& V2 _% p- P5 I. B, T    }
. c) y( q' g8 ~2 M2 `9 B3 x. a; s1 o" D
    /*检查UPP传输的数据是否正确 (loopback modes only)*/. G: x- @: e5 a
    //UARTprintf( "i=%d\n",i);  D7 P* o* u" Z  U, t6 z
    //UARTprintf( "j=%d\n",j);. }( r1 d- n; L0 E3 G  Y8 W
    UARTPuts("Data mismatch in buffers.\n",-2);
1 ^$ B4 o9 ^; Q5 S4 [: E1 T3 ~    if (upp_interrupt_count == 2 && upp_error_count == 0)# U. S8 v( |! l+ Y, K# a. |
    {3 b+ f% ^3 M- T+ B, Y
        for (i = 0; i<upp_frame_size; i++): j9 V/ ?" K% H6 E
        {3 I) w6 o9 ]) V& Q, w7 u  D$ u
            if (upp_buffer_a != upp_buffer_b)
- x9 i% H, x1 }/ z5 H0 N            {
% z- H0 R5 D- @% _: L. R% v7 }                upp_error_count++;" w1 ]; }& a# w. F( X, A
            }1 S5 t6 r. k1 {  r, V8 c
        }
0 N; v# }8 i( S. a9 s4 i' `# D    }
' m1 O9 W; d  Q9 ]) ^! ^5 F  S4 p; {& Q; \: ^) J
    /* 报告通信结果*/6 q+ Y4 a. f$ P" ?
    if(upp_error_count != 0)
* U4 s+ F# ~# L4 E. u: ]% K        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% @, y: X9 |! ^. P    else
+ a7 u; O5 Z( u+ [9 }( z        UARTPuts("uPP transfers complete!\n",-2);
4 l" V$ ]& u8 d9 ^
. s1 f* C5 m% c  w8 x) e, r    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  N0 D; M9 z( D4 _4 c% Q, b    UARTGets(ch,2);( V5 z9 b) m( T0 \0 x! {7 }
    UARTPuts("\n", -2);3 m4 S5 ?5 O( F
* W- M/ P. D+ Y& i
    if(ch[0] == 'y')
; s7 @% c% K/ g" \, U5 p( Y+ l    {- _; b! ^% E# F" H- L- {& j
        /*打印全部读到的数据*/
# F+ A7 I$ d1 _- k: B. c/ J8 V9 C        for(i=0; i<upp_frame_size; )
, k7 E- h' G% [4 t, F: F' y        {
$ |0 {* B, R# K% b+ O            for(j=0; j<5; j++)* _: G6 F& O+ Z. y( |
            {
1 c, _- U! M$ |) Y( I0 z: l- j) w+ o                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
  a' O- N  x  Y- {                i++;7 e  o. j: [  f% k
                //if(i >= 4096)
6 b2 X/ d/ ~3 h3 @$ C                //    break;
9 \. Z- e7 P+ ^) Y
, T! N! t" f. }. V            }3 C  H: {! `2 ^1 n; D8 i
            UARTPuts("\n",-2);2 q: `. i4 D1 S; _, ~: E
        }
- T4 }; \7 X) K, c    }" |0 P1 l" j$ p" G5 L( p' J
3 ^* C  a5 [" G9 b3 A% e" k+ T7 k
}

7 t& z8 s! {% L: V7 d: n& F. }
, A8 v8 `8 ^9 Y' a9 C5 l; E* V1 Q: X
. g6 ~5 P- m& i+ ?; B

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% f+ g7 Y/ v1 k

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- H9 h' R# q: v





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