嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% R3 P- {) V! u) ^+ I0 L/ [6 F
Void UPP_TASK(Void)
" p6 d7 b) H: ?' f7 g{
1 w" \- P: b& ?9 E5 P" A2 c8 ]9 w0 E  X; \
    int i,j,k,target_int_count=2;
1 S9 V0 R: F& H1 \: p( Z    char ch[2];
4 l- }6 ^! T: G& t/ r9 V& d
' x& f4 ]: A$ F: p/ u1 H
" g2 R7 E9 p* c, R  v. b  t, ?% L' `* C* \% z
    upp_interrupt_count  = 0;
* z" e1 X7 F* y, ^9 W! q; G. w) l0 g    upp_error_count = 0;: [( V, M) T0 k  v' R9 L8 R' l
% l7 O4 z$ {5 F; {$ j
    UARTPuts("\tResetting uPP buffers...\r\n",-2);) R2 F: |  e& |
    // Initialize data buffers7 y, S8 H7 `7 ?7 I
    for (i = 0; i < upp_frame_size; i++)
3 s% m0 m- t- \  Y+ W! }    {% [) m" c  w9 ~5 b
       upp_buffer_b =i;
, W) C. ^/ g9 b2 V, M       upp_buffer_a = 0xDEAD;7 L5 |& h" `  H0 N8 U! J: G) r
    }
. f% ~& m0 A0 m3 p+ c. }* x7 d- B
    //for(i=0;i<1024;i++)( o, F( V5 E: x8 n5 d+ p! z
    //    temp=0;' O' Z% \9 F! j: R: x5 q
( s! P: E/ v9 o9 R  _
    //UPPReset();$ Z) L# U2 U% b
    /*启动UPP DMA传输*/
7 x5 n! K0 @/ e, d+ x    UARTPuts("upp_prog_dma_i\n",-2);, X' J! ]; w. ^; J: O3 u
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 i' ?" K3 |0 v6 m1 x( U& a    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ T' U' G9 @2 G5 F2 n% ^, o
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% I) {- D! [4 T) i) ?5 [1 E6 q

  M0 O, h% A, W; S# }3 p4 \2 Q" o    UARTPuts("upp_prog_dma_i\n",-2);
5 w. w7 X+ x; q/ m  _    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 F+ w  o  m" l! D6 C" o, r! f
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ t; V' b# `1 T% _0 W2 n    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ e$ W$ d+ z7 o6 C- _4 x/ A0 D1 Q( j) d& @8 J( s- T
    /*等待UPP传输完毕*/" I. c# |* a. b  U3 l. Y' Q* ?# J. ~
    //i=0;- \; U# c+ T1 g: f% ?  I
    //j=0;
6 E8 M! F' U; {9 m- H3 R    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  H. H+ h/ Y/ G7 v4 J    {- c7 I! K2 l7 P1 U- [; @" B& J. Q
        /*  测试UPP传输的同时操作普通DDR数据
! G$ J" D$ {& J9 e5 W        temp=i;; `6 O+ F) _( K5 G, K1 L; r
        i++;
. r/ T6 H5 D+ ]. }        if(i==1024)/ g* q8 ]5 l% o1 \9 O- b. F
        {# @; Q0 n) s4 A9 x1 h( ^; _
            i=0;; K! s) N9 u7 @, @
            j++;$ h7 |# P6 C9 K* ~) j
        }
+ A" [" F4 L/ N# Z1 e% ^        */
" g/ ?+ N; h. r! a: \/ m: \
3 o3 ~( L( N8 m3 n6 U0 j       asm(" nop");
3 }4 V4 o; o( C, w& W7 C$ Y  r( a; N. P  R" e) |& P* N  u
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' l4 ?8 @) j6 T( }" M; H: s  i    }6 F; m2 V! l/ ], E
4 |3 V5 r1 J' J! v! q
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
4 w' Y( H" ]8 Z) v& N  ]1 l0 x    //UARTprintf( "i=%d\n",i);5 v4 D; z+ P$ ]' }, [" z# W# N
    //UARTprintf( "j=%d\n",j);, ]% n  p1 N' p" E
    UARTPuts("Data mismatch in buffers.\n",-2);
) Z2 \# H$ S* ?: E4 I& c    if (upp_interrupt_count == 2 && upp_error_count == 0)3 O* G, k+ q6 ^1 M
    {
* x; O9 N! u$ w" L& m        for (i = 0; i<upp_frame_size; i++), \" b' X' C/ `
        {' M. B! F& N0 L- }9 L7 ?" Q7 u
            if (upp_buffer_a != upp_buffer_b)' r, L( X+ D! o" ~- v3 [& i! z
            {0 A  e. [8 C0 R1 G
                upp_error_count++;
4 v7 j# g6 Y  i- o            }
$ K; D0 C6 F+ F$ W* `. z$ O3 W' D        }
  u9 p2 C2 b4 }. c/ }) P/ Q    }4 l# U$ ~; f6 `+ U  P2 `$ s9 @

7 a4 R7 Z! E+ a, t! _7 w    /* 报告通信结果*/
; V  o0 I8 p4 H0 q" {: h; a* B& p+ t    if(upp_error_count != 0)
$ j! s- Y/ c2 T/ f. q% ~        UARTprintf( "upp_error_count=%d\n",upp_error_count);
. k! z. u! q4 j9 U$ @7 P    else9 X/ [  o+ ~7 f# J. ~& e# ?! P
        UARTPuts("uPP transfers complete!\n",-2);
- A, v! j+ K$ Q8 N0 F6 @0 p
' x1 I4 T% \+ k7 ~- T* ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& d% |* l& @1 B* |, Y6 l9 V    UARTGets(ch,2);
4 f, d$ y7 h9 Q9 V7 N, \    UARTPuts("\n", -2);9 R' W7 H- P% q3 }4 K" X2 K

* O- a% L6 P2 H7 K' d, _    if(ch[0] == 'y')
8 `  U" t$ h- u" I    {
! E# G* b5 s/ v6 f0 Q; E& P" B        /*打印全部读到的数据*/
. W+ l/ d) N% T+ b8 w        for(i=0; i<upp_frame_size; )
( a, I* e. l/ A1 |$ i. a        {
* Q  }: H0 |# l, M/ }            for(j=0; j<5; j++)& v. V/ {$ ?. }
            {4 q8 c- W- [* h
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( z2 J. e3 Z5 m! ], a2 u
                i++;
% ~1 m& P. h' Q0 t2 F8 @' ^+ E1 R' c, O                //if(i >= 4096). v6 K+ W  y2 ?. L7 M7 m2 D. H
                //    break;
% X7 [3 @5 E$ R5 X1 s2 Y  G( X! B0 f: \5 U
            }* A4 v4 J8 g4 x9 U. s8 u; }
            UARTPuts("\n",-2);7 m- P' p, }0 j4 l% R2 H
        }
* `- E+ P/ C0 G! i    }9 d$ z0 Z0 ?; I8 D0 `9 ?

' O! N! _1 B: O; ^}

7 X" n: P0 |- `& P3 x% w

- I' k- d( ?) h0 z, u1 P! s# e
* r  @: f+ |( P, ~2 h. P  I' o
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。9 Z0 U0 ]) A" R8 f: U5 z. w

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% ?, V+ p$ s3 ~5 r





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