嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. t) Y2 W; X8 a- ^
Void UPP_TASK(Void)$ x* y7 _1 [" w
{/ z+ \* c+ ?! J& O6 K' c
2 n# g4 R7 l& W
    int i,j,k,target_int_count=2;
. H3 x  Z8 ~- Q7 |/ d    char ch[2];
$ X* L8 t+ {7 L0 d, B* T' W2 M( L& y; \. @; Y1 g* s. }

/ w# Y0 r" m$ W6 ?7 B& \) J
0 Z0 E4 E5 K2 `+ j8 ~    upp_interrupt_count  = 0;
9 L5 m5 u: s/ l- e3 G+ w; O( c    upp_error_count = 0;. d" J" ~$ S, w3 m. J& {) N% H+ a+ q* P

+ }8 M) w2 Q& _' C    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 L0 N: q5 Y/ ]) T9 ^: x% V- y
    // Initialize data buffers0 W9 O6 I( U0 p3 l5 T
    for (i = 0; i < upp_frame_size; i++)6 C8 p  E: d* p8 z/ _4 D8 T; h( w2 Z0 ^
    {; I1 t7 l; s, C" X
       upp_buffer_b =i;( C$ K% }) H( j( }2 M
       upp_buffer_a = 0xDEAD;
- l0 S+ ?& R* c* Q8 \( v6 S) X: w    }
+ @& ]; E7 ~2 l# r' @$ A' K' I
; o8 @* t; L+ f. U8 E' F, t( i    //for(i=0;i<1024;i++)
! x# t1 A/ O* j  N7 g    //    temp=0;; u# e' y# W. U& O
$ v8 D& \6 V, t2 z' c& u: J
    //UPPReset();, x; f5 y3 D' k9 A
    /*启动UPP DMA传输*/
. h* d. J, n* [& Y; J    UARTPuts("upp_prog_dma_i\n",-2);' j" V$ X$ k. g5 X3 t  `6 c; r
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 w" K- ]4 g9 r9 ?9 H5 P2 c    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# n- V6 f% r5 F% g" F. k, w; [4 k    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% u) l9 F; B+ t. V% y% R7 N7 |

2 Q+ h. W: q! _) p& G. O    UARTPuts("upp_prog_dma_i\n",-2);$ d1 _) V+ {0 Q2 z
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 v: q* z0 i1 z4 ?7 z    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& u2 f$ \. x; Z8 S
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; W# f8 S3 J1 ], i  G7 Y1 Q* l
/ P! `  b$ U3 `: t* @    /*等待UPP传输完毕*/
9 ]  s/ d* G8 T8 |/ z    //i=0;
5 J# W) t8 m4 V( p* q9 r, G$ L    //j=0;! u* ], j1 b( ~" W2 I( d+ v
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# A# Q' ~; K% u6 e6 @; {6 g
    {
/ x; W" j2 [$ r0 P# w6 p8 H5 h        /*  测试UPP传输的同时操作普通DDR数据' ?4 W, j0 Y5 u% H# F" [: s/ F* N+ q
        temp=i;1 ]  g; h' Z& w! x
        i++;0 s; k9 ?# c) o- u2 m0 z
        if(i==1024)/ _& t9 X. ?( j8 B9 s7 q
        {
" t( z# C; `8 U+ r9 B; _0 K            i=0;3 o! H. _' }/ b) b. l) N: N
            j++;- g2 {* M# x5 o+ g  I6 ]
        }2 w0 u3 f) v: Q( E' F, |
        */
7 y3 `% ^1 M, s3 w' v0 b) t+ q9 H( y
       asm(" nop");" B; ~; ]7 r6 J1 [& B

" T6 L; [# S. }0 p. s, y0 ^; ~       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" W2 H1 s8 q5 D
    }, A8 e2 i  t" B% I7 G0 x/ D

; l, J6 ^9 S' ~    /*检查UPP传输的数据是否正确 (loopback modes only)*/& f' W" `% ~9 |5 f6 u
    //UARTprintf( "i=%d\n",i);
! K& k: D; S7 e. E$ ?' {- v    //UARTprintf( "j=%d\n",j);7 p$ k+ `2 v' \( U
    UARTPuts("Data mismatch in buffers.\n",-2);
" K  R$ C) S& v! U% D0 }. x6 E1 \    if (upp_interrupt_count == 2 && upp_error_count == 0)
8 w) r* r9 K& e' t* i7 B9 N- S    {+ n8 t% G1 u7 P* R
        for (i = 0; i<upp_frame_size; i++)
+ d. E  @: d8 g8 _: }; t, j+ X) {        {
4 l) n! t9 y  l2 \" \3 s7 N            if (upp_buffer_a != upp_buffer_b)7 {$ @' {# M' |% S' z
            {3 S$ G3 N: p2 H  E3 f5 y
                upp_error_count++;
) y4 O9 i9 }) f: E& n* D7 z            }
' u! L4 D0 k/ \! u6 x        }
; ^' l# N6 o. |& ~' E0 I( B    }0 C' _0 X# W4 x- I( o- K  A  J6 X

  ^' Q" x: M( x    /* 报告通信结果*/
1 z0 [1 d2 \  W4 l2 C$ Z2 C$ a* g    if(upp_error_count != 0)
4 ^+ J6 x8 Y' e- X# e% O        UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 @* _' L' b: G. p7 D7 x4 Z6 a    else
; f( j& M+ P( v2 I7 o        UARTPuts("uPP transfers complete!\n",-2);
; i) n/ T- ]- o' z
; b# o! {+ i; K    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
1 z3 Y, R$ _$ _7 t9 w    UARTGets(ch,2);3 c2 P6 L- f# s- H( E
    UARTPuts("\n", -2);- W/ G6 {& E: _4 y2 y
; n% C4 t3 [; L7 P$ i- {/ I
    if(ch[0] == 'y')
, w: y- a2 u4 P6 t5 D8 V3 U7 h    {* N# u  u" B3 i$ r  Y
        /*打印全部读到的数据*/7 l% s: u/ `1 t5 M% @
        for(i=0; i<upp_frame_size; )2 [/ w6 d: K3 m' }3 s. S
        {
7 b0 c: J* @8 A) f            for(j=0; j<5; j++). R; S3 J& F% p
            {+ x1 I' f! F& a0 Q6 j5 [: T
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- j. E8 Q% x4 z: J6 n                i++;
( a' N' N) Q1 v2 M                //if(i >= 4096)/ M5 r( ?) J: E( p
                //    break;- ~+ J- b# h! F5 ]+ P$ U+ Q. d' F

% E6 s6 g0 D( N1 q, m: d, T4 ~" o            }
) h  a# P6 K+ B6 E- C6 @3 s            UARTPuts("\n",-2);0 z3 I* L' w+ X* O9 K; e! C
        }
  l8 v3 G+ V  d) ^    }
' I: |5 y: O, x: [! W, ?
- E: A4 ~) K; A( _}
8 f9 D. a; d# G% M+ N8 f/ W$ i
; R& N- q! a' x. b+ M0 L' C( F
. a( O$ @9 U9 Y& O- J8 l

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ x0 d; z& O6 G; g1 ?' a

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* d3 P% l4 o% [# E/ q! z* e





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