嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ l$ s) U3 p* `# a8 j
Void UPP_TASK(Void)
" t0 _* B7 r1 F* L% H{
1 q0 C% ~* a' w  i) m  V% A2 M( e& T) S2 t" b- ]2 y
    int i,j,k,target_int_count=2;2 Y* F$ }0 C0 e2 |% o! P8 I# Y$ l1 I
    char ch[2];* B+ x+ |# u: x7 n0 [7 g  D  L, a9 r

! T0 k- Y6 O  Z8 z+ Y) `0 N0 N6 r# I5 `6 K/ E, `3 [

: ?0 Z* B' ~6 Q/ I/ u: }! D6 z' }    upp_interrupt_count  = 0;: W+ D  U: R. \& |
    upp_error_count = 0;
# b( t* Z# r! h7 Q- j; L  K4 U! F
2 u! V% Q+ B0 s1 y' k% S    UARTPuts("\tResetting uPP buffers...\r\n",-2);
- }) Z5 T7 ?& [1 l8 E    // Initialize data buffers! b" p! K0 Q/ V+ g( s0 Z. e7 u
    for (i = 0; i < upp_frame_size; i++)
; h' q# O9 N+ [* X, j    {
( |$ @% H" ?0 N' S3 H# K' V       upp_buffer_b =i;; D0 n4 g2 E+ a# l' \: E% H$ E2 p: V
       upp_buffer_a = 0xDEAD;/ \/ |% f6 L% D8 R1 q% L' W
    }2 R6 J9 |6 y2 J3 |6 V
( d. {; ^9 Y  r  p9 E% S& }9 C7 y* V- `
    //for(i=0;i<1024;i++)
9 e( _- `# g' D    //    temp=0;! m* ~; J! N: f( m$ q
4 r; C) p8 J" o( I: F
    //UPPReset();
5 |/ H8 D+ L; _* q2 {# g    /*启动UPP DMA传输*/# W9 Z+ I& p3 C( U9 ^! e# H2 L
    UARTPuts("upp_prog_dma_i\n",-2);1 \( y! @: K3 U# d, s
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- u$ I/ j7 y0 k) L: S8 {" K
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# x: G5 Y3 o2 C4 Z. v& J; K  ^/ S
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" N+ B4 g0 o( P* s  D; b- p$ H1 |5 y7 [% Y1 `# W- M
    UARTPuts("upp_prog_dma_i\n",-2);( `, W  E  W* Z7 T
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- l1 o! v* g9 c1 H- d* Z9 R3 h4 L
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* {9 w. H, n" L7 j
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ G& L9 r$ P: a5 d0 U" \# ^
* x; L5 u$ ^7 j
    /*等待UPP传输完毕*/( e9 n2 M5 A6 @( _8 l) R
    //i=0;
! @( p8 u3 X+ [& Z! `# j" a    //j=0;6 K5 t. G/ y5 u( C2 f
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)0 }7 A6 V7 U! Y# F  e4 y5 b
    {
& T! a- h5 ^& o+ j; L: h# }        /*  测试UPP传输的同时操作普通DDR数据; W6 E8 {7 P5 j! Z2 w* V- a: ]+ x9 z- e  s# @
        temp=i;2 `& y$ G$ v4 ^) j8 Q9 b# t& s; _
        i++;
0 {" C) n( }7 d3 C# E* r. m8 P        if(i==1024)
2 D" q- E/ d- L4 m        {
7 S0 F3 h) Z2 N% O! F% X. }            i=0;
8 i8 \1 k! G8 e            j++;
% h/ F7 C7 j6 p' @; r3 N( {        }
5 H: v/ r7 B0 g  O        */  g1 A* y' c% F2 j; i* t6 w
& D5 {4 t: @2 V: `# V/ j
       asm(" nop");
. P, K% W! e+ e" x' t# r
4 ~* ^# [" F; j2 ^/ W+ Y9 ]       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 j' m  {3 O6 s1 c! w3 b2 t, ]    }
) |/ J) l( ~& T8 u0 v6 n4 R1 \; t$ ~
+ p2 O' \( C9 z! y& b2 N4 X- D    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 o9 ?5 }/ _& y' |9 c5 k
    //UARTprintf( "i=%d\n",i);
) R+ O$ t7 K9 M8 G- J8 z- r8 X: j    //UARTprintf( "j=%d\n",j);
# `. f; L7 I; K0 _/ d1 {' [$ X    UARTPuts("Data mismatch in buffers.\n",-2);; k5 i% e5 b5 u- L
    if (upp_interrupt_count == 2 && upp_error_count == 0)
' N, m' `$ z, I- ~    {
( O  b% O; }) D' X        for (i = 0; i<upp_frame_size; i++)( j; g: ~6 ]3 `: ?
        {5 d% B  y1 ~: w
            if (upp_buffer_a != upp_buffer_b)# @4 w3 m. u) o* h  h) L
            {
+ w/ e3 C7 w4 i+ \$ p. r                upp_error_count++;
% O0 l6 _/ {; Z2 G2 g$ I6 J; |            }1 [( K. A# _" P# T4 R- V7 ]
        }
! B# i7 D  Q4 {. f2 U5 k' F    }
/ X0 [$ g; g2 R
/ W4 L/ |% {5 H0 F1 \4 `6 U    /* 报告通信结果*/8 j5 k' l5 }) g' M
    if(upp_error_count != 0)
& e" E7 a* y% M( w        UARTprintf( "upp_error_count=%d\n",upp_error_count);
  I  }6 r2 ~' ~% i    else
$ m! \8 ?3 o- P) E- }7 A        UARTPuts("uPP transfers complete!\n",-2);
$ c( ~, |9 a" W$ [' `! z6 M& g+ M7 g! [* M2 z2 {! k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 p+ a6 }# H) X' @! Z  t    UARTGets(ch,2);. P; L/ C1 S' {3 d- n/ P0 Z! n, l
    UARTPuts("\n", -2);
0 k) h5 R5 v% ]) o' K+ ~! L/ Z* E. e
    if(ch[0] == 'y')/ R, J0 t0 c9 u7 _
    {. c. V; P: {! x
        /*打印全部读到的数据*/: C1 M( f5 r4 i3 X% u
        for(i=0; i<upp_frame_size; )* j( c! F* r& ]' I% l+ f& s6 M( m
        {
/ e$ E) u. J0 j            for(j=0; j<5; j++)
: e& B* i; a( |# H            {/ n- A( v3 S4 ]. M
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);8 ?  ^" a8 f" P1 K  S- O7 b
                i++;: E. {% B8 m4 b, X& Q% {& ]4 D
                //if(i >= 4096)
3 C- j7 W! W! V# |* @$ O$ y/ [                //    break;
3 A% [/ w" X( J& p- @
! v( h6 v& D7 o6 W  h& h9 g1 A            }4 S2 X) P0 X9 ^7 b8 j  @2 R
            UARTPuts("\n",-2);
& z/ C5 f; M9 f  }* E# @        }
% n: P# e% a# u) m* `    }
) x% z/ d" B3 q0 V, \0 O% v
' I5 [4 w% s* N- Q) v/ \}
0 z$ i* e5 s6 B+ x' _( r; D

, Z) [4 B$ D2 Z/ l- y
5 M1 [9 U* S& Z, ~
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% T$ ^; k* ?3 E- o
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' `0 j% b$ e, h/ t$ F3 L




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