嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 g* M( ^& C4 `& [+ {4 G
Void UPP_TASK(Void)9 F" k/ d+ g1 G: O- D' q
{
3 q- n: T5 c# o# E6 U
: S" z% x* G7 g3 ^6 T    int i,j,k,target_int_count=2;. d& f! P1 |- ?! n- p, _
    char ch[2];1 K* O3 B+ z! K5 ^7 B. u6 ]

5 ^6 s( K( f( m! q) X- ]. S6 Q0 d
4 `( @9 r) v6 X) n$ q
% _& J8 r2 a( h    upp_interrupt_count  = 0;* _4 y' c4 A0 J( \
    upp_error_count = 0;
! Q! o# F: q  j9 O- c2 ~3 _/ E
. c% A' [& d3 l. g0 k* b) E/ b' r    UARTPuts("\tResetting uPP buffers...\r\n",-2);! [) _# |" `5 `, z
    // Initialize data buffers
/ `5 ~5 @. ?+ n/ }/ Y& `    for (i = 0; i < upp_frame_size; i++)
& H: v# @& l: V1 P* Q- Z4 d! U7 M    {
  s4 n) o. _; e' P# m/ K' ~       upp_buffer_b =i;
3 M: c% G9 Q" e# l8 J$ L% K( q( D  U$ L       upp_buffer_a = 0xDEAD;+ m) _8 L6 _0 q& N2 B! ?" t
    }; x9 P& o! w3 v

8 Y. b. Y  J4 P. B7 r: D* o, @    //for(i=0;i<1024;i++)
1 c2 V) w2 i* k" d, s    //    temp=0;
  ?1 z, L# l0 D& O
1 Z8 f6 `# L& v9 _* q4 b    //UPPReset();' j( G: w: o8 w* j: }9 ^2 o
    /*启动UPP DMA传输*/$ u/ g' H! V* C6 a6 v0 \& j
    UARTPuts("upp_prog_dma_i\n",-2);
0 l, s; j( a' Q& w/ Z2 W$ s9 u    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* v/ f. s2 u# `/ J7 R
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* F) I2 J" _3 }2 y# \
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ E4 P, u% J* W  C+ o& C1 D0 D
, }9 D  s: N0 _
    UARTPuts("upp_prog_dma_i\n",-2);
: E' F) c4 P, a* X# f* B    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 T. q: ^+ W- B, C) u" _6 B4 Y% u    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% \6 [  o% {+ i% A
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);2 x7 S! ]2 H- }3 x  j1 H
+ T: x2 k" f+ k' f% A$ r4 s
    /*等待UPP传输完毕*/" o3 ]8 b+ n  F! R$ F3 }+ h" k2 I
    //i=0;
( a7 _1 J" M8 i5 B: P' ]    //j=0;' I# j4 {# C: k" W+ V8 f" X3 E
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ I6 u- g' p9 |$ r( d0 z& z8 _% y
    {' K# j; r9 A) g- m4 Y- H0 w$ I
        /*  测试UPP传输的同时操作普通DDR数据
0 ]; q2 k0 P  A# N' u        temp=i;
& Q. j: Q4 N7 a$ q" v        i++;
3 ^- `0 Q" M) I: v+ i1 b        if(i==1024)
4 C% g# ]/ [. B) @9 H7 }        {
) \/ T3 {9 \* Y            i=0;$ n2 z) A+ _/ g5 o
            j++;8 _- v- d, M1 f7 d1 t" w5 t+ v) S
        }
) z5 v# y) l5 N6 w        */
* ?2 V% H  Z, N8 P2 G* f
, A8 y) W8 d2 _3 ~$ c, t       asm(" nop");
2 f7 N) i3 I* m& b. K8 o' C2 q
6 t2 m& Z9 |. Q. y/ _- i5 U       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- }" \% f( J/ J. H6 R, S% Q
    }: N3 k+ V, J  M9 M) c6 |2 m
% \6 u& ^, w0 s5 k: R1 F! {
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- L% _5 J3 d1 F    //UARTprintf( "i=%d\n",i);
6 z% d0 m# T7 E. s    //UARTprintf( "j=%d\n",j);1 r5 T8 O/ O: r: D$ N
    UARTPuts("Data mismatch in buffers.\n",-2);
6 t# x. Q  v( o  o8 V1 M  I    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 _+ e1 O9 |) d9 K* O    {, ^. ^6 Z: g0 }8 v
        for (i = 0; i<upp_frame_size; i++)
* s* D5 C- j/ h. ~" ~# S( B% h        {
- z" E2 ?9 b1 o3 x            if (upp_buffer_a != upp_buffer_b)3 z5 D! X' D" E
            {
, |% d3 j$ |' r' c( }% ?                upp_error_count++;( ]$ V6 b4 K/ [; y' ?& v1 G" h
            }
  A* |$ ^9 u9 X% H& J  o$ w5 J        }% U& G  Q$ h' J9 Z! m
    }
2 d6 B8 N( S9 r/ M& [4 M
+ y6 U2 c3 k4 [( J5 W5 X    /* 报告通信结果*/# z  w( r, ?, L  G
    if(upp_error_count != 0)% p" b2 F' T. \+ v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 L( V7 a% d- X( y3 |# _    else" ?) T4 l/ r9 L
        UARTPuts("uPP transfers complete!\n",-2);
4 I% s" _8 N$ |4 d  N8 [/ q2 O  a' S
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) Z% I: d  d" q$ U* Y" m. F
    UARTGets(ch,2);+ }" M* k. i! G; Z4 `* a5 y
    UARTPuts("\n", -2);. X8 O( p; r2 C! L% ]8 \

) X* k+ h* I9 q    if(ch[0] == 'y')
7 H( _2 b# u( g1 @    {
2 B0 {: P% ~6 M7 }5 m. B" f        /*打印全部读到的数据*/
1 ~+ T% |; j  H0 t5 W/ _7 E. p        for(i=0; i<upp_frame_size; )
# ^/ o* e# l8 H$ z4 b        {
( n: G& |6 g# c8 G            for(j=0; j<5; j++)
1 a5 i' G8 j4 X( r( M" k* S* n            {
% a) N- ?2 L1 e  ]$ H                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);8 q3 X% C1 e% p, i1 l& m4 D8 _6 N
                i++;$ [+ L. a& {/ f, z) b3 J
                //if(i >= 4096)
) G5 q6 U3 W" g9 L) P                //    break;. k4 o) _& N- b  q- S
/ N) [! B# Y. D9 \0 S: K  e
            }
' x# R& P% K' v; F9 @+ A7 f            UARTPuts("\n",-2);
* f) T9 p6 S" M& s% {        }
2 E; A1 K( Q# E8 F1 I9 n8 {    }7 |& D, a7 y# e0 z/ Q. L* J

/ \7 V" R, N# B}
3 _$ g) f0 K' h/ |1 X6 p! j# h' K
- f, D) Q" Q- d3 o
, }' S+ @: L1 y, F

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 d9 ~) e0 I8 X# u/ j
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 d, a: C. q, V7 I) }* V4 r+ M





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