嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 B; k* `' i3 U( J8 r
Void UPP_TASK(Void)( y- k: n8 [' K. f) Z2 i* T
{  }8 z2 T, S# \7 d+ I
1 R( v* U! j) F4 |
    int i,j,k,target_int_count=2;8 _% t7 y( K# a3 t9 ?
    char ch[2];
; w* O3 d# W; y8 x+ t/ E9 ?, _3 b. j# B0 k" i, @

3 ^8 `, c8 \, A4 O. @8 \
3 t+ n' O) O# K9 C% D- O3 Z    upp_interrupt_count  = 0;/ P, L- r+ ]6 z+ d. Y- U# r
    upp_error_count = 0;
1 I0 |  r% c" M+ T) t  U( K' i8 H7 U7 w! ]) x% e2 @
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 q/ I) K. j  x, M3 C    // Initialize data buffers
3 f/ r; q4 B) {' @    for (i = 0; i < upp_frame_size; i++)
  }# |- B. W; A7 u  F    {
, n2 Q6 K8 _9 L( h. n) F2 R( g       upp_buffer_b =i;
3 o1 C% @; j' J% P0 o       upp_buffer_a = 0xDEAD;5 w! B# O) @' n$ y
    }3 M  d6 t* x, E1 w' J$ W# ]  Z5 C
9 }. L' `8 f1 q' M
    //for(i=0;i<1024;i++)+ M6 o" ?  z3 ?) U' _- N: B
    //    temp=0;
0 O: _( B- j) r$ u& h3 w5 F& ^9 K$ j7 d
    //UPPReset();
% T  q) H( P6 u9 R8 J! F1 F' k3 x    /*启动UPP DMA传输*/! ]( d1 N' T+ b) s
    UARTPuts("upp_prog_dma_i\n",-2);
* x4 p' c1 ~1 [  X2 P  q$ K    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. D" U8 R/ f! l: i    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ ~2 K  k1 r" H8 N* I# a. \    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 g& n. R! w6 N* E' ]$ u

4 B" A% N8 V/ v1 v+ r5 w1 x# W! G    UARTPuts("upp_prog_dma_i\n",-2);5 G4 |$ x4 ~/ v0 W  ^& Z
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;" f& ~  _: G/ s* M$ ?
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 U8 {& P% F' x& f/ i    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, Z, S. L1 U& \) a7 c4 M

) t" {% ?& F0 u. |) g    /*等待UPP传输完毕*/
2 R% L8 q$ j; ^1 s7 z    //i=0;
; J' I7 T2 ?  A; ^8 g% _6 @    //j=0;
' c5 w) V' v; M' T0 M, h6 j# g" h    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* B7 [* G  `  E2 ^6 w! D+ K
    {# J* C5 q0 a  L. x+ ~' n" ?
        /*  测试UPP传输的同时操作普通DDR数据! ?2 v- h5 Z- m- b
        temp=i;
  A" I# g' b0 b+ A4 E6 q        i++;' L5 G: |" E* y1 R
        if(i==1024)/ s: B% ?3 j- C$ i4 o! @0 ]! _) e; x
        {; l! s% u0 f8 F; ~, P# [
            i=0;
2 p3 Y& m. _- C/ y0 O2 q9 s            j++;
  X6 s" O9 K3 L" C( x        }
/ M) i- e2 h' X6 H9 f9 p5 o2 H        */
+ a; i3 Z3 K8 u# F7 _9 B% [- E. v2 ^# u! L! R/ N5 L
       asm(" nop");
' P6 c# J8 ^& u* P' Z- p2 E
5 I" u7 }. g' S       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. N( Z/ F3 \- N3 g( B- ?! x    }
; C, Z3 j" A. Z! [! H6 i* X0 E, Y4 f6 i# c& E
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 P! X* d- \7 o    //UARTprintf( "i=%d\n",i);
4 t: K# u0 t& _    //UARTprintf( "j=%d\n",j);8 p: l& i  h# a) H
    UARTPuts("Data mismatch in buffers.\n",-2);
3 p- w9 e' C9 J  c! O0 v% i2 I    if (upp_interrupt_count == 2 && upp_error_count == 0)
/ O: O: X# v, H2 Y/ m    {( w0 \6 X, A# U0 k7 d) H+ B6 T2 z- V& y
        for (i = 0; i<upp_frame_size; i++)
$ b1 Y- d9 p" u/ W        {
* j  Y6 d; J# `8 N5 ^            if (upp_buffer_a != upp_buffer_b); o& z- v! Y6 w9 P. I% J
            {3 H* n# p5 c, V7 |9 k
                upp_error_count++;3 w& R# Z2 A% r# T$ D5 D
            }5 X& P; M1 N& [% i1 v+ E" M% q8 S
        }6 p" V5 x1 c$ F
    }3 R& {% J. F8 `* T( {: v$ t& U

( s, a* J; b5 w8 [( O2 i    /* 报告通信结果*/! |% m5 _  ?* P
    if(upp_error_count != 0)1 F( k4 p- A1 l- A# m/ D  G
        UARTprintf( "upp_error_count=%d\n",upp_error_count);) Q7 U. E2 {* Y+ h* N
    else/ q1 _4 Y. T/ i
        UARTPuts("uPP transfers complete!\n",-2);
+ |" _$ ~6 G% @* q, M
# C' k5 o, l4 N  n( m  Q/ R8 R, N. l    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* R9 T% z8 j8 X3 `2 r& g
    UARTGets(ch,2);0 E" J( }& d- u
    UARTPuts("\n", -2);7 P3 r1 I& t9 {  r3 z+ [
5 G( @$ M" J6 O; X. V( \3 \: @
    if(ch[0] == 'y')
; W0 E! d& g. {8 Y    {4 g9 c# k0 v& ?) O+ m2 X
        /*打印全部读到的数据*/
, y- Q. [0 i+ {3 Y4 m% P0 T        for(i=0; i<upp_frame_size; )1 b# L1 M( N# r- I* P
        {
% B! q( O; L+ ~- h  ~            for(j=0; j<5; j++)
4 C1 ~6 Y5 y: r5 o$ w            {5 Q1 H8 h4 t5 L4 ^. i
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' k$ _/ O8 C8 \" l! u
                i++;" o4 m, Z8 O9 t; W* y
                //if(i >= 4096). r. A% f, @3 G. Q1 ~! R
                //    break;
) A1 _0 A. m( Y/ B( ^: s) @8 R+ B
            }
8 G& p  W4 M+ Y  E3 _            UARTPuts("\n",-2);+ x1 D9 \. V, b5 n1 K9 T
        }1 h/ r. S1 `+ l: ?" P; J5 T8 W' D
    }+ M  U. o, k( `% T) {) ]
% z0 U% c: m3 X
}

9 b* _7 q, r0 c  h, P) n

1 ?% w- E4 ?6 u8 `) h# M1 v) u
% Z* e5 A1 }+ z' t3 E* H" K
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 w+ v% ]( L( j! E8 w! S; M4 [

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* t, k7 n6 g* J+ d0 U* d9 ]





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