嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 N) R7 L1 n% f5 b8 h
Void UPP_TASK(Void)
) h' X6 z) L/ x0 L' a{: e3 t" q) c7 `4 Z
2 o4 e: u4 C8 l$ I7 n. ~
    int i,j,k,target_int_count=2;" s# x6 z9 i" c$ X6 y
    char ch[2];1 i- [, n% u5 _
3 [9 ~3 m, |8 F, b

  C$ L- I. g: g: X5 k
$ l! _1 o7 \, J) D# s/ @! Y    upp_interrupt_count  = 0;
- D  w2 V" k5 U    upp_error_count = 0;
5 }1 J3 @  o; i( u/ m) r  X% V) r3 c5 z, |, g
    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 m" Q0 ~, ~- k; `/ |, L$ |- r
    // Initialize data buffers4 p$ s, c% i; A2 i
    for (i = 0; i < upp_frame_size; i++). M" ~0 q2 ^, h
    {
  j. u) Q3 v2 J( g( Y5 G       upp_buffer_b =i;
8 V7 v6 v& M0 d       upp_buffer_a = 0xDEAD;
4 e5 B$ n% T) e4 M% q/ |* f    }
% v2 Q8 I& I0 A4 g* s
* C  V) v' |: x/ y8 G    //for(i=0;i<1024;i++)
8 R/ m0 U8 W/ @* Q* x: h# D    //    temp=0;
/ \/ R4 h- \2 J3 O. i$ C  ^3 q9 r! E, c: n
    //UPPReset();' h9 O! e( Q7 A2 B/ }2 t. J
    /*启动UPP DMA传输*/& i% {2 P4 k, D5 y8 U  |
    UARTPuts("upp_prog_dma_i\n",-2);  o3 ~$ f# m9 H) u- ^* ~* H0 q  B$ R7 p
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
  c/ H) J% C& d, ]- b1 Y8 Z" l' T" _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- Y; }3 `, z+ |. u
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# I- d! \5 u" _1 Z) V1 A! V! N% T6 K: G( k4 _0 n. v9 p- L9 L: ^5 e
    UARTPuts("upp_prog_dma_i\n",-2);
) _. T3 s8 @) N( D4 O3 n# s, O; a4 Z    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) c- l2 F" k3 V$ g% |
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 F% ^) d. G2 v; F/ P
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# ~' l# @& ]: o7 Q
+ x" h: H5 S9 p  f  s3 ^; F
    /*等待UPP传输完毕*/& @5 N5 {1 i1 E- g- D/ S9 V
    //i=0;( v2 ?' a: M( L0 x5 q: P# {
    //j=0;
2 _" a1 Y+ P4 y* _2 F    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' }, H1 ?: j8 c+ }2 H    {& y  j6 k0 W0 U
        /*  测试UPP传输的同时操作普通DDR数据
7 k+ i$ K+ B/ O; }/ ~% N* [        temp=i;, W6 L, x' N1 i& Q) Y
        i++;; M- m, a7 ]) B
        if(i==1024). Z$ @: u9 a0 z2 k$ f. Q
        {
1 }4 g7 ^3 [3 Q! _            i=0;
, Y( s" s# S9 [, [            j++;
; e' M, K3 V* B4 q+ S9 V/ i        }8 I( V3 M% Z6 p0 z" l0 R* K
        */
  l% z% y& Q* |9 g1 M+ D: b7 T7 S0 k' L' E
       asm(" nop");, g9 T% u. D! u" X) V
& l! r. g5 G: e4 h/ V, k
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, {$ R9 {- c# {" H0 w
    }2 @' E$ s1 u$ J; g% Z
" T3 S/ B' ^; D' A) V0 {3 M
    /*检查UPP传输的数据是否正确 (loopback modes only)*/$ q5 N! s! c1 M/ j0 q1 p" \
    //UARTprintf( "i=%d\n",i);
! O7 E0 Y$ t' e3 z, Z    //UARTprintf( "j=%d\n",j);
8 c" F; u8 }, T    UARTPuts("Data mismatch in buffers.\n",-2);
* _- V! C5 v, ?* G' Q    if (upp_interrupt_count == 2 && upp_error_count == 0)# v! c& Y9 e9 \! H% }! L
    {
: x. ?# t: g5 E        for (i = 0; i<upp_frame_size; i++); A! u# z) G& {; O: a1 z( D/ P, E- [
        {
& r' q4 }' L  X            if (upp_buffer_a != upp_buffer_b)8 r' D9 Y/ f2 _& l& R# r9 ~
            {
/ p5 |1 Z4 r- `6 j% r& \8 Y                upp_error_count++;' y7 J- @0 ^3 w% Q  Y, r) b0 ^
            }  s6 e0 G4 p" T9 [, t
        }% G/ Z" |: w; v% c/ K
    }  S1 X7 Z1 r1 G% a4 r4 |1 l

$ e: ]3 ?+ ^' M% K    /* 报告通信结果*/' h0 G  m8 @  P
    if(upp_error_count != 0)
. R+ f$ t) }2 x9 ^( d        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% R, N7 o8 g3 m3 D2 \. w. B    else
8 R5 o0 A! p1 h# y- h" ]8 c        UARTPuts("uPP transfers complete!\n",-2);9 m+ d" c5 \% |
/ \7 L7 s+ W5 F( A- R. {
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 w) `7 g2 P; r0 @4 B* u4 ?, E
    UARTGets(ch,2);
1 S7 y4 g* T6 b5 Q    UARTPuts("\n", -2);0 w+ s  b# }( C5 J! s
: x5 \  I5 x* H/ O1 Z
    if(ch[0] == 'y')
9 s2 `  _6 J' |    {* W8 B6 J0 [0 f/ y! s3 T2 D5 S
        /*打印全部读到的数据*/
0 D+ ^1 g: L. @7 z% I# S        for(i=0; i<upp_frame_size; ): X" a( I( ]* t
        {0 J* G6 o  }& p5 n. \" |
            for(j=0; j<5; j++)# z8 K+ Z( D( M
            {" Q( e  x( s/ A& L# A
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, z; i5 s5 H% G/ \- _) a
                i++;
6 ^4 l/ v8 ?& z                //if(i >= 4096). o$ S- I) q$ k: P7 o
                //    break;
1 A9 t: C9 ^: H! q- M
& {$ K& o" I, M" v            }
4 Z5 ]9 B/ F8 r/ j' G$ P/ k, \( Q            UARTPuts("\n",-2);" D$ S- i/ c. C2 {* V
        }& w, v/ U* p( _* d  |
    }! q. ?  ~; X; ?/ B9 N
, p+ v4 x2 B  K' Q& P4 o5 e: k
}

; v) E6 m8 f9 t8 i

- l6 s% O% J# r1 ]) u
5 B$ y) {1 p. N( v# M7 @' J: a
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 E0 U" i: @( Q" G  k& j+ m
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ G  ~7 {; R0 Y. i  q+ a5 Y




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