嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. U0 ~' |( C+ h6 Q1 O5 N
Void UPP_TASK(Void)
  e7 p' r5 M5 b& w* }/ O6 w{5 T4 ?8 `' T8 I- }: w( ?

& b0 C. H- ^7 W! ]4 U: V    int i,j,k,target_int_count=2;
( `5 M0 {& `4 }; z' }6 j) j    char ch[2];
2 T. e1 ^1 c4 ?* {+ ?9 n- J) |  K& H! y  M
& }# D3 c9 H; g* ~/ o  j1 F/ F2 u
" f- L, ?7 g" `* V# D
    upp_interrupt_count  = 0;) {# Q. x5 |( i- h/ x( y
    upp_error_count = 0;, F1 K! X, w1 t7 P

9 l* @  p# m- ~- ~    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 ?+ ~# j5 P8 X; j9 H; s8 g- m1 q    // Initialize data buffers
8 p# m# \& e* _8 J: b" c    for (i = 0; i < upp_frame_size; i++)
7 f, [' I* B; R5 K2 j    {
0 c0 u; d6 a; j- S       upp_buffer_b =i;
5 ^3 x0 ~5 }' e% x       upp_buffer_a = 0xDEAD;
! c3 X5 E- D" E; \1 I    }
1 S$ D' {$ S9 S7 c. z6 R' G! B- Y( D4 M
    //for(i=0;i<1024;i++)
+ Z' G8 x$ E4 K/ m# e: S    //    temp=0;
/ C2 Q$ Q, Q- T3 F% z
5 f' c# S, J0 Y. M$ g, g# n" Y! H" F    //UPPReset();
) D8 G+ D2 v9 H$ y    /*启动UPP DMA传输*/% R( D6 u- _' u6 b5 V6 J. L4 R
    UARTPuts("upp_prog_dma_i\n",-2);
' ?" v; L7 F0 v    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ ?3 a$ `' p( s/ ~! k) q2 h
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% F, D: g1 [  e) f+ k8 i    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" m# L* Y9 {2 y& K+ W
; m9 |1 K7 ?, E6 }
    UARTPuts("upp_prog_dma_i\n",-2);3 ~0 M1 K/ y# `+ B6 h+ H
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% P* {- K! D8 ]+ {: M5 y$ ~
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" T0 p  t% w4 G! h9 D
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  Y! [, ^/ M1 F- m4 }

/ y+ o% ]  D+ B6 s) |    /*等待UPP传输完毕*/
" F; u8 ^/ u0 {( Y; t    //i=0;7 x& T$ M. f" ~7 W6 t! B- ?4 _
    //j=0;
5 k8 Z2 L* A; s, I' E    while (upp_interrupt_count < target_int_count && upp_error_count == 0)3 {0 W% R0 V- A0 W9 K  E5 O, Q: r
    {) [' |$ t- F0 m) Q0 ^- K
        /*  测试UPP传输的同时操作普通DDR数据
$ S5 R+ w" e) a- v( o% I" y        temp=i;
% }! W  o2 l5 ?* g/ \5 Y        i++;6 s0 S3 {) K0 u$ {
        if(i==1024)9 ~5 x4 Z/ M& r
        {6 n* p% W5 Z# b- G, q  |- q
            i=0;
! Z; a+ j* ]" o            j++;, g/ {6 f" j7 z) b9 @3 q" Q" V& l  K
        }
' o5 {3 G* Z, G1 g, R2 d  b        */
. Z6 v+ H; m+ g7 `/ z4 ^- z9 W( n% N6 Y# I$ x' o( y
       asm(" nop");4 j9 L. A5 n4 V& ?( z

1 @) a% |0 F# S, E9 Z0 r  n       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);( u4 S9 V& k# V' ?( Q, @; {6 l3 Y) v
    }) R3 A, J1 @$ }( `! m9 |

+ h8 P! N( y1 |    /*检查UPP传输的数据是否正确 (loopback modes only)*/( @. ?+ B+ {- |
    //UARTprintf( "i=%d\n",i);
1 d7 l4 ^4 ~7 {( o& {    //UARTprintf( "j=%d\n",j);
; o( A' l! B" S" ]- W    UARTPuts("Data mismatch in buffers.\n",-2);3 I8 b/ N& h' R) e' ]3 M
    if (upp_interrupt_count == 2 && upp_error_count == 0)
) v8 y3 b# q. L    {$ }/ J. F0 m& \% n" K! b1 b/ f
        for (i = 0; i<upp_frame_size; i++)3 U& u. L  {0 @. V
        {
! s/ a7 Z1 f, B" u7 p3 Z$ S# S' z            if (upp_buffer_a != upp_buffer_b)
2 }& a) X( k% G7 o9 A$ N            {, D" v/ u. M  G+ t. T/ e% q
                upp_error_count++;1 D% d; i) `$ c# ^7 G3 y
            }
% L9 [- O- B& W! @        }
! f+ ?! }" Y3 d    }' X) G/ i) O' X" |; V* E
# z; s  u8 C( W( B
    /* 报告通信结果*/
- r" L" n8 r- V0 i3 U; O    if(upp_error_count != 0)# A& h1 }# `8 Y5 ~3 p2 O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 J- u& l0 w" z8 f  U1 h; n    else* X( p! a3 ]! |; ]$ R; h& ^) W0 M4 K
        UARTPuts("uPP transfers complete!\n",-2);
* s& P& y, v6 G& [) A9 K/ B! m
# W- K1 x7 m" ?$ A" N    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' u/ M& K% N. W. N0 D: U
    UARTGets(ch,2);
- V$ J% J% R( E7 u, x5 v$ m* c) f# o6 M    UARTPuts("\n", -2);5 t, {. J4 H! U  {; b( j

& h* H" a$ r$ S    if(ch[0] == 'y')" D' k2 m+ G3 A7 ?0 j
    {
% Z  \8 F+ @9 {, @4 Y        /*打印全部读到的数据*/
) b8 A- q6 R0 z5 Y        for(i=0; i<upp_frame_size; )) i6 v- X% G7 Q3 S( p
        {6 v! x% Q- I% K5 L7 c& e" [
            for(j=0; j<5; j++)- z% U: ~+ Y1 j: A3 u$ n! B
            {/ |6 B/ G2 R5 `: U+ u* s; h
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ o- h, e' Y7 s# z6 t8 @  P                i++;3 ]- k) t! B' \
                //if(i >= 4096), j' V- d5 S+ H
                //    break;; }. Y7 G9 E& ?

1 B7 a  m. R3 s; i            }
; X2 e# [: |' H, b5 p            UARTPuts("\n",-2);5 E7 g* h+ H4 Q* Z: s8 f6 i
        }
  _# r* w; E  r. O  w    }
7 o( o9 @7 }. t4 _
3 P5 {" c; Y" J9 h3 w; n}

: ~" `8 [; v" t- q  C$ T8 Z

: c9 E9 [- b5 c* p
: x4 C( I8 l% F
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ t+ Y7 d2 i- D/ A2 _& k/ B. z

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* z/ j# s. |: x6 q, S8 o& u) ?




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