嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 E! X1 e; J" {) C+ N7 m! n
Void UPP_TASK(Void)
9 c' L. s+ s- R0 |) j{$ c; f( {/ Y0 x; c

/ a3 J: c6 `8 |( e8 F( O: s    int i,j,k,target_int_count=2;/ R! N1 l2 U, W5 C
    char ch[2];
; H) [; |) p$ j# g  o; Z4 ^9 c# i# t6 l- Y! K5 ~$ S  {
( }) y! `: ?* r0 F) j

3 C- m6 [) x4 u    upp_interrupt_count  = 0;  P' s/ m$ `0 F$ |  G
    upp_error_count = 0;0 E) l$ e2 V2 y+ e
, @5 d. z* }' C3 d9 \
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ e+ ^" J$ J) u, ~    // Initialize data buffers0 x3 ^0 C. ^+ h0 j
    for (i = 0; i < upp_frame_size; i++)
- W5 `/ o( [" w# r4 Y2 v# y) o% n    {$ n3 ^' k# R  _1 M3 ^
       upp_buffer_b =i;6 Y: ]( T) _$ V  D- {9 ~
       upp_buffer_a = 0xDEAD;" m7 o* z: U; l) m  F9 Y' q  H$ J
    }  Z1 p- k+ b& i* e
4 L3 X* t$ I5 P5 S5 J3 j& ~" e, ]$ @
    //for(i=0;i<1024;i++)0 p/ T& E( \! d# z' z
    //    temp=0;$ @1 S0 z4 t+ D/ z. M2 Z

8 a/ k8 ?, V, P2 Q% L1 U    //UPPReset();
4 I: P( B6 `6 q; c    /*启动UPP DMA传输*/
+ Y3 v3 |8 U& p" o: d    UARTPuts("upp_prog_dma_i\n",-2);
$ F& n) j! L8 O+ Z2 {: A    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;' P2 y& A" q3 Y$ _# ?9 d4 i) M6 I
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) r% `4 d& j% ^4 u
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 ~% w6 T5 h, q( P
0 n1 n2 i* F$ h4 d9 z/ k) Y
    UARTPuts("upp_prog_dma_i\n",-2);
8 u. p2 [2 E. g9 P5 h/ g    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) v/ [  Q0 f+ ~! |4 l+ M$ l; k6 s
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: e- F0 w) E- C% [% z
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 m6 _: {4 K/ F  @! j8 {: k

0 x4 @* q8 L1 ?& n1 [7 X7 b: u    /*等待UPP传输完毕*/
3 }) m) C5 [* w    //i=0;7 @0 J7 ]% l% |1 z/ C# h
    //j=0;' ^# Z& H! Q' k" P
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)4 F8 g! }# G, C
    {- |1 D( G5 w, c
        /*  测试UPP传输的同时操作普通DDR数据
5 s6 d+ X! c# i; [; E& ~) w/ N        temp=i;
% f3 B! n) W# ?- Q, x! W        i++;
$ ^' T& t7 Q! `7 J3 X: x' n! D        if(i==1024)6 P: z( v6 p3 T% L* L( ]* O
        {7 E8 a# n% B4 o& t5 ?
            i=0;; P$ m' b: w* {3 I9 B4 a& {
            j++;7 z# ?# y) m0 Y  g4 c- M
        }
9 \( ?( h% w' K2 D1 ?5 a6 }" |7 H        */  a# N' D" S& R- P
$ x8 N! k& Z( M# W( P
       asm(" nop");
) I1 T" Z5 W3 P" ?2 P, V0 @  |% @/ z
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ L. j3 ?0 l# |; _    }
( u* }  L) H3 W' T; K" \# i. b% |( }
    /*检查UPP传输的数据是否正确 (loopback modes only)*/' V) \# f1 M/ G( w- H- V1 C
    //UARTprintf( "i=%d\n",i);
; d, b: |' ?6 J7 A3 i    //UARTprintf( "j=%d\n",j);
9 u8 k1 H! d0 F" D  F/ J: Y    UARTPuts("Data mismatch in buffers.\n",-2);
* A- x( H1 o$ o1 _5 y6 W    if (upp_interrupt_count == 2 && upp_error_count == 0)
' h. q. F4 A) V" `6 o9 F    {
' I) w0 ~6 x" I        for (i = 0; i<upp_frame_size; i++)) H. r4 f5 k% l$ I
        {
- u! `, N, \$ }7 j  w; ?            if (upp_buffer_a != upp_buffer_b)
* @- }0 m. |. A& N$ y- `+ V            {. i0 g  F; E. G5 N/ Y) H! f
                upp_error_count++;5 F/ R7 |8 B5 K
            }. g' S* M7 a+ Y% D0 ~, E
        }
! O7 N- A8 o) b7 Z" q3 i6 j" O    }
6 v% a# J5 Y0 \8 Z9 \1 L: Z4 |
7 C: w% f3 q! ?% w    /* 报告通信结果*/9 R8 Q4 g6 O2 G0 E+ \
    if(upp_error_count != 0)6 F. V/ L3 M9 Y3 |% a
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) G6 }( x- p  _% Q. {: x/ {    else9 `: X# {$ j. n
        UARTPuts("uPP transfers complete!\n",-2);
( m0 X% J4 S6 j; b7 F0 G( W; L7 @% `- f$ |7 g% M! I: n0 H9 y: S. j& b
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
4 \! {0 o& j9 I. g. c) J    UARTGets(ch,2);
# i) t3 Y9 I' _4 t; C    UARTPuts("\n", -2);! F8 M- Y1 b' Q: k# k9 ~

9 A! c$ |9 L% x. Q/ Q- J! _" _# F! x    if(ch[0] == 'y')
; h0 N" T, T# ~% G    {! d: j6 _0 H4 U9 v( b. R; T4 F9 |$ |8 N
        /*打印全部读到的数据*/7 B4 G6 f- b8 B3 x) x( R
        for(i=0; i<upp_frame_size; ): ]1 ^4 O4 J; G6 q% v# o
        {/ M% ~# I/ ?) n7 C6 X4 ^
            for(j=0; j<5; j++)
- |  k: f6 {  u0 r            {
! ]9 T) T+ y1 B/ n6 B+ f9 E                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);4 |( n* a2 `0 }& v4 b. e4 j& g0 U
                i++;
( F6 t3 v! K  R! N                //if(i >= 4096)
' c7 I) q& b1 l: u                //    break;6 R0 x! Y9 i7 G

# S; J4 |5 y) ]: A7 V; f& {            }
) P0 @3 k$ w( \7 X            UARTPuts("\n",-2);1 q  w( D- r2 \5 y7 I, U
        }! M5 \/ \$ k! p# g6 E: |' Z# C
    }1 D. G7 s+ M+ u# o, S- V# @
" j; r5 S. h8 V. q5 l
}

# y) }, E: O: Z$ j9 g( k& ?1 W
7 `2 I5 {  f2 W5 A6 F/ e4 \1 f& d. }! D
  W$ k  o+ P  r

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 @7 N* C0 @  j& n
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ f/ |0 j2 A0 ]/ ]4 K6 @. P




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