嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 T& }9 q; k3 h
Void UPP_TASK(Void)
* [, a0 |; l+ y7 D9 ~7 a; k6 j; l' l: b{2 \( C1 ]& }3 Y" S

7 E, Q; s+ I0 ]  t" Q    int i,j,k,target_int_count=2;
# i5 G: ?$ ?# K! S5 K0 G/ G    char ch[2];  |" h& z" |# [9 l  u2 c3 `
7 @( O) f. r& E. A. L! f

* M  M6 d0 w, V+ `9 J' G9 A, x# S4 o( q8 G3 n* h6 u
    upp_interrupt_count  = 0;& A( s; k* u& G; T0 F) k
    upp_error_count = 0;
# I) C; S+ [: s+ I, Y; @# Y3 t! X8 Z1 |% \; x; @
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 ^& i4 i* j! D) n3 e) G# J* U  W2 v    // Initialize data buffers# {1 X* J# {9 C9 b( Q/ }5 B
    for (i = 0; i < upp_frame_size; i++)
8 q8 Z; h4 a8 T    {
9 H5 w6 U5 H/ T7 o& v: @       upp_buffer_b =i;" L0 ^& [) K! T$ a
       upp_buffer_a = 0xDEAD;
$ I, Y( M/ N) Z& L: t    }; E5 y: q$ z# e$ \8 M. ~- ]
7 B# F  K/ d# Z7 s+ U3 A2 I7 N
    //for(i=0;i<1024;i++)
3 [( a! l" W9 S3 t    //    temp=0;; E! @: I& I. b, \  f) T

$ C7 I- U  b" {* l    //UPPReset();
5 c: }" q! _* @3 e    /*启动UPP DMA传输*/
5 G* `. W( Q: w3 }' t: F    UARTPuts("upp_prog_dma_i\n",-2);
- K0 T' M/ a* ]. V# K/ s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# ?& d& t; f/ f5 C0 o    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  B5 {7 R* P6 f' L
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' S1 l. N4 G/ K
1 w+ G3 a9 G  Q0 j2 M    UARTPuts("upp_prog_dma_i\n",-2);
/ |  j' U8 p6 P9 C7 O6 k    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, M: Q* B$ r7 M- _2 d
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, z0 e! c0 U+ z1 \; z. \& v0 L    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  u5 `$ L8 ?6 u9 ~
7 c$ N4 ~5 O# G; {' H
    /*等待UPP传输完毕*/
; |4 y) K# Z$ s* [4 T1 X- f    //i=0;
) _( _0 a: B, C3 `: d) Q    //j=0;# H9 {% T) U; B9 q0 {& i. P
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 j8 h. g" D7 V( k" E- r) f, e$ |    {
+ W7 x* |( N( r( o/ y+ h( r        /*  测试UPP传输的同时操作普通DDR数据
4 [. E& x- B3 s+ M        temp=i;
; g0 J8 }1 J) I& p2 W# |8 h- s        i++;
( ]$ D* A/ l7 U( @  G- y" o$ F+ G# n        if(i==1024)
( Q! i$ X- _2 a7 K' R- f        {' }# x2 z( s- L5 `
            i=0;
& T9 P! U: l1 R2 l# z/ f! v# R            j++;  ]& C& ?6 x5 X: h
        }
: H3 Y  M3 T$ K5 W        */
* B3 e1 @, O7 {6 \) S6 O7 P! i  P% ?  y! \
       asm(" nop");
% Z: T7 u; R& E# u+ F% B6 R* r* l% h8 O5 f9 V2 |; [
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; v8 q- R1 t& w9 l3 ~/ Q6 p    }7 K" l; ]# o, W- Z" v) p1 x; M. R

% z* H/ d7 l" ~2 g    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  ^; }9 |2 ~( w8 e, V4 \    //UARTprintf( "i=%d\n",i);
+ G2 Z- G* h/ r5 ?3 @' x    //UARTprintf( "j=%d\n",j);% W) y, y- n7 t% d
    UARTPuts("Data mismatch in buffers.\n",-2);7 _2 v' O" q' A
    if (upp_interrupt_count == 2 && upp_error_count == 0)& o3 \4 F( J1 c- k
    {4 B# Q0 K, E9 G6 O6 q# e
        for (i = 0; i<upp_frame_size; i++)9 L( p% t  u* o6 W' d# J2 |/ s7 {+ [
        {
! |$ I6 ~; }0 V7 g1 L8 D            if (upp_buffer_a != upp_buffer_b)
( _# M( v" A# W% g+ s7 r            {
% H: X( r& V! j! {                upp_error_count++;1 a% b0 o# [5 s4 z) C5 D
            }6 S! A: o; {1 T+ j$ }
        }
; q7 j1 e( a) h    }( q" O* J) K! ^3 _- m. S

- X* p. P! o3 v. t; _% l    /* 报告通信结果*/7 [3 ~+ h; Y4 D+ Z
    if(upp_error_count != 0)
4 L5 r$ M, g2 ~        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! q& S2 a7 m) b# o$ n, v; l    else
% L/ R9 P# h- l% X1 Y% c5 s        UARTPuts("uPP transfers complete!\n",-2);
, c5 p8 i4 u! _: k- f
; R% o  Z& w6 X5 E    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% C5 \8 A* ~- m! Q
    UARTGets(ch,2);
8 S' H) W. U' ^) F, i& r    UARTPuts("\n", -2);
& b- y4 A& \1 b; ^, q$ ]1 d% R% i+ e6 D+ j8 K, f" ~! O
    if(ch[0] == 'y')  P; w8 @, o  H! B: M  k: d+ ~( P6 p' `1 V
    {0 `. _! m8 k7 F" {0 [) D; g  r
        /*打印全部读到的数据*/! \; |( \2 Z  ~/ q
        for(i=0; i<upp_frame_size; )# ^+ U3 C( [0 t1 k
        {, p) B; U% {2 m0 C3 C/ r' p
            for(j=0; j<5; j++)
; @0 K* w6 B0 N* B- y7 @            {
3 K' l8 A( ]$ O3 ]& r/ M                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 M/ r; p: u7 r' N" s8 c4 q6 ], m
                i++;. v, l3 A# @1 F% a( m8 I- R
                //if(i >= 4096)
0 i; E* p% p4 i8 ~1 b! i                //    break;$ Z+ W3 G9 \$ i9 p
  s/ K) X7 X3 e+ O
            }2 a+ K2 s7 a! n& F/ p; C2 N+ Z6 J
            UARTPuts("\n",-2);$ t  Q2 \% m/ [% W( `; p! w, t
        }: v( Y$ K7 Q. R: e0 t: _
    }) X7 \8 `$ l' G- L9 @( A
- ^) g+ x' c/ `; b2 |: u
}

- u- |! q  [' v& _& c7 v  J' Q
  m- E. M* E6 [. x8 \

$ j  S, i" Z. X. G, ?' R3 e5 w
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。  d5 R$ H! \. l! N3 O

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( o0 X) [( Y' W, q% H! O% c1 |. N





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