嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' L  |9 q5 ~6 w$ c# H+ o
Void UPP_TASK(Void)
) Y0 {$ C" y; |{0 i" U7 q: N2 ?* d3 f& `. \0 I4 k

( j8 K1 m! u/ {/ ]1 o' Y    int i,j,k,target_int_count=2;
$ A; [$ y# K4 M    char ch[2];
6 P: `  y& o) G5 N8 [+ R  O# V0 w4 K6 \8 c0 }
; i( z3 l; }' O% i5 o3 W1 v# {

$ u( }% ^5 Z; ~6 B    upp_interrupt_count  = 0;# T2 y# ^8 _) l) E6 {
    upp_error_count = 0;
% @8 S) Q# w( I+ u. v4 q0 k# ?
* L0 G3 ?$ D: _) N4 q  `' i0 ]* O    UARTPuts("\tResetting uPP buffers...\r\n",-2);( Z; K1 k; @) N$ U: F3 K8 C8 f
    // Initialize data buffers
" n! I/ U. U- B: a9 _$ H$ L    for (i = 0; i < upp_frame_size; i++)
0 U, u& ~, i4 W# J7 V    {4 l, I3 x* x5 R$ [
       upp_buffer_b =i;
* i# H' ^# S; }; Q       upp_buffer_a = 0xDEAD;
) s$ S$ P& e9 j; w    }
5 g8 U$ o$ ]; R2 C
5 K' X# q3 e$ j  Z" a6 O( O% b    //for(i=0;i<1024;i++)! t. `* q/ `5 }5 d$ q5 A3 S+ ?: O
    //    temp=0;, U7 w( }+ H# }  W" G$ L" e
: l. {0 D7 I8 T- X
    //UPPReset();
2 U# H( d& C" H6 J) O& _( K9 Y( ^% |9 p; v    /*启动UPP DMA传输*/
- c( e: t1 [4 d    UARTPuts("upp_prog_dma_i\n",-2);
5 W0 e. C* A9 j; H  s, O$ n: u1 L    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. _' D% ]7 p- o5 ^& b0 Z1 H    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, q  z( c; N% s( m    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* C; A# B) Y% f. H) _3 q. ]6 Y* T
3 ]+ L" K* l. _. \5 I/ L& o: H9 Q    UARTPuts("upp_prog_dma_i\n",-2);% p% f5 N* N0 U
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, A4 x4 X, i, H) k    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) p7 E( @' |; G: T- K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, F- G7 L$ j8 p$ M! T: f* P$ D# ?" G1 h! _& D1 a
    /*等待UPP传输完毕*/
( ^0 b) [9 A  M. x$ ?    //i=0;
% m( J& Y% C3 V( X    //j=0;' v1 K% P  F2 ?/ r7 u
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* L( W& f7 r* N/ O! T. F9 k    {
" x0 G6 z  i4 h( S6 \. F        /*  测试UPP传输的同时操作普通DDR数据8 R, e9 g! H: k& P3 {! c
        temp=i;
9 E) ^$ ^3 n4 u  _: @9 n; X9 t        i++;
+ J  ]; s6 i3 ~$ u        if(i==1024)) d9 L0 e  a- [: d- F. t6 I# ~& d3 k
        {
; ]5 G* C( f/ I' o  L            i=0;: Z2 }. H/ a4 k% P; ]
            j++;4 ]! t. k, H5 R
        }
" B1 q4 a! N$ E% [& k) z5 N        */
6 d% J: s" u! p+ P, g2 w; y5 B, r, i! O7 \. |3 n
       asm(" nop");
6 T* D- v- Y  V
; x- R2 P9 I  ?9 I* f       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ \' h: {) v$ ]8 `9 K
    }4 [9 v4 ?2 n  u" m0 a* i

' K" n. H% {6 W# n- f5 h" I    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  u! u! V9 ?* D8 M+ M+ Z    //UARTprintf( "i=%d\n",i);/ i7 ?, S  U. X
    //UARTprintf( "j=%d\n",j);
7 C$ {0 K1 e8 m  p0 `% n    UARTPuts("Data mismatch in buffers.\n",-2);
0 R3 p* ]: S* m9 w+ J    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 J8 ?! X$ X9 J) u& e9 |: F    {& m2 f8 o" M" V/ X, U
        for (i = 0; i<upp_frame_size; i++)
+ d3 c% q( e/ I& V( G        {+ `- M  p, o& Z
            if (upp_buffer_a != upp_buffer_b)
  [" q6 d( A3 Z2 `4 y+ Z3 ]            {8 d1 K1 @, B& M7 {! H
                upp_error_count++;
/ q& j; w4 z9 K7 G8 k$ d            }+ Q1 F, r; T4 h
        }
9 o/ ?. c0 P# m8 Y    }0 h5 `* f; \/ W
8 P7 B6 F0 V0 d2 \
    /* 报告通信结果*/1 Z/ ~2 f+ ?5 p" U1 N
    if(upp_error_count != 0): @6 E- A( X7 @* o# \
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: M/ s& r* f' z: `1 c    else
8 y6 j( q8 y3 p        UARTPuts("uPP transfers complete!\n",-2);5 B; K) h, }8 c# \4 {) t
# w$ m3 }1 W2 p/ r8 n% b$ j
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
6 O2 z& H9 Q, T$ |7 {+ U9 a    UARTGets(ch,2);
" u3 r" h' c+ d2 P7 \& ?1 ^    UARTPuts("\n", -2);
# [1 |4 L+ N* t+ u
' e8 D! D  n9 v! X0 L    if(ch[0] == 'y')
- e- u, K6 M! S2 C; ]2 c- Z% z0 S    {( d# G+ h4 `  r0 H; c% K
        /*打印全部读到的数据*/
6 V! Q5 r2 t# B6 O& U! h        for(i=0; i<upp_frame_size; )
" v, j  x* E: u9 T! M0 ]        {3 K' }; F& P! i$ u) N' \% B- d
            for(j=0; j<5; j++)
& a. k0 k7 p7 P- `. d            {. S8 P7 r+ T0 ~: N3 s
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( D+ \/ j0 F# A' C; S7 G
                i++;
4 Y4 W) \7 z) P3 j/ S                //if(i >= 4096)& i( U, {$ s% _2 B8 l) E
                //    break;
4 x9 s  v0 P% C4 _! \4 B# V! x
9 a7 x9 Q0 V4 U; ~- s3 j            }0 u$ ?' |* [% c% B
            UARTPuts("\n",-2);
& ~5 T! J! R4 v* u        }
. @6 W* D" _  J    }
$ _" v$ r& j. v8 O1 G9 X5 D2 M0 p) |& i8 ^- t
}
" |" Y, t9 N( c4 Z
- Z2 j. K, u1 O/ {- L
6 [! F% Z% Z; b6 x6 }

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。, s" S2 _2 C8 Z# D

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& k8 I5 d5 r5 h! Z3 t& [$ I




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