嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: [  _& x- J" O# ~" h# ?
Void UPP_TASK(Void)
3 F& k% x) i3 Z- `5 |' M( S{
0 U: f- \9 `' S% R3 o+ T5 t2 N5 u6 \9 I1 {: h1 b" ?; ~9 O
    int i,j,k,target_int_count=2;8 e; V* P" D4 t1 W/ E4 V, P  L( G
    char ch[2];' T2 d2 d4 x  A* P7 w% n. K
% O4 J  u. Z; _6 j& v
2 l6 Q" z3 G' [( n8 q4 E5 ^  R
7 b( u; o, A* Y: S5 R
    upp_interrupt_count  = 0;
& D- l" s2 L" C    upp_error_count = 0;) W# A9 Z9 L) a4 {$ _- [

/ M5 d$ [8 ?4 Y* O) R6 i* t    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. q& F3 q4 O7 W) }! w. N    // Initialize data buffers
( m; T; D. }+ e, z7 c    for (i = 0; i < upp_frame_size; i++)& Y/ T0 U) V, S6 Q1 B
    {" O% s. R# X  R6 D
       upp_buffer_b =i;
' l7 ]! c/ O+ N) e       upp_buffer_a = 0xDEAD;
; S( |9 K3 g: e5 c& v2 J* G    }( d( V: T$ i6 J! A5 X, d! I7 `
4 n) J9 C0 m  J
    //for(i=0;i<1024;i++). h! L; z( |$ b% j* j
    //    temp=0;2 y9 {' ]6 z5 w' a- s

6 ]2 Q4 l1 w; M  v$ U6 d6 A    //UPPReset();& y$ k6 l  G4 }( c; O% G6 \" H
    /*启动UPP DMA传输*/6 h) g' Y  \8 ?! k" ?, D
    UARTPuts("upp_prog_dma_i\n",-2);
- n- S& V% g8 J( {    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ a0 G" s) b  Z' u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% G5 J6 T( n5 D$ A6 B& e
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ i  ^) o* _+ j& ?: s- v
  d3 _/ Y: e1 }9 Q    UARTPuts("upp_prog_dma_i\n",-2);) k# d+ R) f' E8 N+ a: W) s; y
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* H6 f- u% c, x. K( p: B    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: u3 z" j8 ]6 H6 M9 k% j7 H- S    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: ^0 g+ ~& o, [# |
* ^  u& y4 o6 l+ e8 Z" d  |
    /*等待UPP传输完毕*/
9 D4 H" t7 t5 M. K( U    //i=0;
8 S& f. x) _, Q& v/ u    //j=0;) \9 B" ?( ~" |  n
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# J( ~* w& g$ N' O( Q# [1 ^    {
! U8 d- o' `5 o4 @6 Y        /*  测试UPP传输的同时操作普通DDR数据
4 {( `2 ]; b7 k3 Y1 R& Y        temp=i;) {! p7 x8 b: o& G
        i++;
6 E0 f0 ~& Y7 v: d        if(i==1024)
' r' @: W3 k! Z( M( Y+ Q: r6 q        {) ^& j7 ?1 q! x. `! c, E' \
            i=0;% L  K$ F; N. i, b+ k  {
            j++;( o, x; G, [, p: K) ]' X
        }
2 T* q5 a2 V- O$ A. F        */
' N. o( b4 w& }: t$ O! {5 W7 N. N& b  T/ f1 K, s
       asm(" nop");5 M# Y' @- ^. v5 R; t$ e1 ~

3 e  u, Q, {. T: c: Q  W       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% f' X( c  r/ h2 D9 b, W* e
    }
( N! p4 b8 t) y& I. x1 {; H. D2 \9 v; C' i+ ~
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
, g* c: v8 E% u7 V6 ]" E    //UARTprintf( "i=%d\n",i);
0 U4 U6 X0 V2 b! o8 R  f" l: W& e    //UARTprintf( "j=%d\n",j);
) x: g, m4 K& H6 l7 m. d/ `    UARTPuts("Data mismatch in buffers.\n",-2);2 p' V( p5 F" f% |( [
    if (upp_interrupt_count == 2 && upp_error_count == 0)! h/ L  p& Q& T, o! T3 |' z
    {
; l# r( s; F$ g3 U/ W; i        for (i = 0; i<upp_frame_size; i++)
2 \4 R7 |9 x6 [. M+ d" S0 I8 T  G7 {        {9 v2 E$ Z' L& a4 L# x% o6 n
            if (upp_buffer_a != upp_buffer_b), X+ G% V' |# o% K' O
            {) x3 e5 {6 O1 t8 \1 R7 J% u& `- n
                upp_error_count++;% j7 J! z, a% e3 D% R7 u" e
            }$ v/ Q1 t1 d4 R9 z' o
        }  A3 c' _; I, x% x+ e6 L: [* T0 w
    }) A" B( D) t; ^! a
. C7 k+ k% ]; O* C; P# g8 i
    /* 报告通信结果*/7 [  c" J; }3 b# L1 i- o# @* d( G
    if(upp_error_count != 0)* a+ v7 m0 ?# C9 t
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! h9 H% X/ r1 B' k! t- i    else5 l4 G$ R( q0 R8 {; v  P0 P5 _
        UARTPuts("uPP transfers complete!\n",-2);" W0 V: F/ J) J: `* m

1 m) Z. r& k+ t% H! n    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& n$ I( I- V- _5 n1 e
    UARTGets(ch,2);
" Q9 ]. O9 v7 w. S# n4 Z+ K2 D    UARTPuts("\n", -2);$ w" ]2 t  w& H7 f. u6 p

9 t% X# M& l& W* D3 L4 I5 h5 ~    if(ch[0] == 'y')
% _9 Y1 X2 l; J) o    {6 d$ D2 [) D2 E8 E! D1 U
        /*打印全部读到的数据*/0 a. R$ M- u) M9 Z: ~7 J
        for(i=0; i<upp_frame_size; )
! R5 Z, D" E+ G* l        {( z' }8 a8 ?& J, ~( S
            for(j=0; j<5; j++)
7 o5 ^: h' m$ q/ G2 @8 R# J            {
, ], x$ N( a( G9 m, P/ r( B6 B                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
: G: I/ }+ M: f7 z& Q                i++;
4 Q5 D5 F& X* h; r& H- i9 W/ X5 O                //if(i >= 4096)- T3 }( k! Q9 @, e
                //    break;
6 E! g6 G6 n  m8 d1 l0 \6 d. t" y4 K5 M6 r6 m
            }
/ y) r0 @, C  r. O" u            UARTPuts("\n",-2);
. s0 i- W2 V2 \        }
! c: G* h# z& g* T- `4 \& O! [3 \    }
1 s  B6 [- T0 j4 @. S) l0 Z' `! b( m9 `/ g3 n- J
}

% e3 ]8 v7 q3 g4 u3 o
+ H2 f! }! z1 n. u0 O* c; G$ M+ B

" P5 t, L" Z! E1 z6 ]
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 L3 c( _' h& U, C

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 Z9 G, {' G: D: l: k, W) ~




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