嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; w9 W! H* c9 \7 c" R1 g
Void UPP_TASK(Void)2 A- c! h3 A3 [2 d' T5 G
{+ U: t* [  z) U- C% i$ K. q
5 Q) [; i! H2 Y2 k: |2 Z4 p! r
    int i,j,k,target_int_count=2;
1 {  O7 |+ E  J) h: z. E    char ch[2];
/ E/ o9 @: u: e  U) T, z0 w" c! P; \+ p% n, N6 q; _* g

. s: R1 `$ H: {0 P) c- k6 Y) N2 U
    upp_interrupt_count  = 0;
9 F9 a' v% N8 X' K8 K    upp_error_count = 0;
5 g# k5 I2 o2 y" u# E& d1 @$ n4 q( r
+ I: t: ~$ W3 s  W    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) s& m' U( M3 {5 J0 C/ n+ ?    // Initialize data buffers
5 T# `# s: O9 l* P    for (i = 0; i < upp_frame_size; i++)
. s* |+ {) L5 J# p2 W# |% i' z7 K    {! @) c! A* K5 R1 w. Q
       upp_buffer_b =i;
  w! [2 ]) o) H1 I6 ~" h1 b       upp_buffer_a = 0xDEAD;
/ g' S1 p4 c, |: N' X0 w    }$ c0 \% x5 v* T! a2 J( }2 O( w
6 T8 T0 p1 e3 \
    //for(i=0;i<1024;i++)
  P' |( o1 K4 x8 o. o/ }    //    temp=0;
' {9 m' p7 e6 s# U  c8 o* I4 N. Q
. l$ h1 }  [. ~* u) o' K    //UPPReset();
* Y7 H4 y/ `& ?$ y, ~( E+ k    /*启动UPP DMA传输*/
. H5 x* E3 @8 p3 c    UARTPuts("upp_prog_dma_i\n",-2);7 G* H/ e% C8 k  k
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( \- a$ u* S1 a
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; {+ r) m+ a* x8 ^: B( [    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) [' i4 v) D2 N, m7 \* m" I* m, `( y: Y; n$ M5 l7 w9 l
    UARTPuts("upp_prog_dma_i\n",-2);
+ k4 L% T# p. _+ n# a" H) l( M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 J& n& k; R7 J* t  \4 u    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, k- ?6 H+ h3 k0 O6 f    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 @+ N, ~1 ]" v2 _% k3 i& R) v

1 _3 Q: Y- d: f3 X5 i+ d    /*等待UPP传输完毕*/$ Q- f8 o" `4 k" O; N. l* t
    //i=0;
" R' [" ^9 a! W! y) ~, s; O    //j=0;
, C  B+ N8 K7 d1 e! `( a    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ i3 \* a: O. X3 ?    {
% T- e; I9 H* p7 B* t        /*  测试UPP传输的同时操作普通DDR数据! @; ?1 w2 P$ U
        temp=i;3 A4 `7 G7 A! o* w  {$ q
        i++;' _9 [. y: M! w
        if(i==1024)
# N/ Q+ W0 C- g0 K4 j/ m        {: T0 ^- _( a: d' `1 U
            i=0;8 D. N- M) m! q1 ?. x. T, W) a
            j++;9 }( G$ g2 K0 `& ^! Y! W5 U! B! l/ L
        }
6 L- B5 Y2 M( o+ y6 h. s        */
& Q# R& M0 ]7 ]" D  K' t* A
9 W5 v8 G; k. q" W3 s3 Y, z       asm(" nop");
$ q6 J4 M: x% [* g0 o6 I% a  _' |  Q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) r4 I; g: H3 \, T) V
    }
) d- P" s- P' G" S8 t  Y* W$ ^) g$ d: c7 `1 c9 r- B0 c( n9 G7 s  D$ n
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) E. M) C8 s- H; ~3 m6 J( }2 M    //UARTprintf( "i=%d\n",i);
: m$ t% Z3 n1 P! F' X    //UARTprintf( "j=%d\n",j);
6 C( T+ `5 }0 W    UARTPuts("Data mismatch in buffers.\n",-2);
1 Q+ S* F3 U5 s- s& I# G, a# I9 h    if (upp_interrupt_count == 2 && upp_error_count == 0)
! `+ f0 b# w+ N. B    {4 S- a) |) _0 I: ^# Y5 U% \& j7 Y
        for (i = 0; i<upp_frame_size; i++)
( M+ o$ e8 I4 e: s3 t1 C! A        {
& e3 A* Q) b# ~+ p. t0 F5 {            if (upp_buffer_a != upp_buffer_b)  r5 ~& O5 i. d; ~9 O5 E
            {/ B6 X2 @7 o0 j
                upp_error_count++;
& }/ _+ K6 K9 H/ \* l9 Z# l1 ~- h" I6 \            }3 @) E8 p7 Y+ J# r9 l  w
        }0 ~* S' c- Z! q' o$ N1 T; _3 D
    }# G* f6 F1 `% N" d+ v- I

7 ]6 b# J5 J5 p9 D+ J; Z9 I' ?3 e    /* 报告通信结果*/( U" l+ a" ^$ k7 e; U/ F5 C
    if(upp_error_count != 0)1 a: D4 ?( c% i
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ l" N3 U% Y0 |" C. [+ q2 X; S# t" m    else" s5 f( [/ a) N
        UARTPuts("uPP transfers complete!\n",-2);
' \$ W" z3 }, Y8 I4 x
! T! q' o: d! j) J" c    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 ^* L3 W7 h5 j) ]; [    UARTGets(ch,2);% M4 z  p2 \# ?# z( g9 m# _: ]+ q
    UARTPuts("\n", -2);
& p  v, r: H: B- {- |% j: s/ \
* ?" B/ J4 i; y, N: g    if(ch[0] == 'y')5 j' ^7 b; L, x) K" L
    {" ?, k/ U6 D* ^5 j, h9 ?) c- k
        /*打印全部读到的数据*/
5 r8 ~  u& j( j# E        for(i=0; i<upp_frame_size; )! L. A( k" k; _  a& {3 B  B
        {
/ z( O/ f# I+ Z  ]& W! _9 G$ z: F            for(j=0; j<5; j++)' O5 P* @* o! ~% }1 a+ Z7 G
            {
) |& Q* x3 _) Z; h, |- I% M3 R                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);$ o1 p4 d+ J: D6 a% \* w1 [
                i++;1 n7 Y( k& _+ s1 v* e
                //if(i >= 4096)
+ ]* J, Q4 d3 Q# d4 [0 c                //    break;
  i- O  p" E* s6 h8 R0 Q% v3 l9 i' o2 o/ a3 g% P- H6 t$ }
            }
) P  g3 Z$ a  N! T2 v& K            UARTPuts("\n",-2);, Q, x& ?2 Z/ ?. r5 f" E; v. f
        }
0 ]8 [  `( {- y9 \" |4 `& j    }
5 Z5 |" o) g* B" _6 x
5 I3 K7 `3 G+ ~" ~}
+ v6 p' J8 ^+ d0 O! k

8 J0 j# ?3 |' J, v8 B! \) K, _
  |: Q* J* l4 l( R# B  E5 I
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。7 ~* }& Q. |* d8 r4 e

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 f; j4 P( @$ t  f$ ~3 _





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