嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, D4 c( A& B0 R$ [: i
Void UPP_TASK(Void)8 c+ N) f/ q- C3 k
{
2 t) j) {- O) l5 @. f2 N# }8 p5 n, A* T. C, @6 [+ l! N5 a9 x
    int i,j,k,target_int_count=2;6 e5 I# }8 a; [5 S6 b& o
    char ch[2];
1 ^2 Y$ y& r! z* u$ G" w) C( Z8 L: u! h' D$ C" G

* l; Y  Z: t% Q# x3 V, G7 S* d3 {, [6 a- y" d! v& J
    upp_interrupt_count  = 0;2 n9 @# i, |1 L1 w( E- `
    upp_error_count = 0;
2 S: ^9 u' h$ [; n9 U
* x9 b$ S9 R( Y9 c: @/ U    UARTPuts("\tResetting uPP buffers...\r\n",-2);* m% B0 j8 c' Q
    // Initialize data buffers
+ O7 S! V. {- h; g  B" n( e    for (i = 0; i < upp_frame_size; i++)
3 z% K$ r1 j7 o5 M3 Y- T    {% R5 O0 i2 E; c6 G3 Z& [! u
       upp_buffer_b =i;7 k: W! f5 K: X# c" n
       upp_buffer_a = 0xDEAD;
% Q: ~# o! K7 q    }
' d3 j0 `& G5 L4 h1 P4 P
- ?% _- Z9 q7 Q5 g. [& q" l5 h    //for(i=0;i<1024;i++)# ^' l- `* _3 |! Q
    //    temp=0;: b2 L% J- N& |8 D- P* a3 Q! Q! [

6 N; x: o: H% I6 u* S7 L    //UPPReset();
& N8 i" o, u5 m2 @$ R: O# X1 p5 \    /*启动UPP DMA传输*/) U. c, q. M5 p; q* @, C
    UARTPuts("upp_prog_dma_i\n",-2);' P' _  [1 f) O% L3 p5 C: o4 V- b& N. R
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- ^* R( }: s. Z. H! a2 u: Q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; @4 K1 O' O/ B9 z* R& V1 W, C    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);+ v# ]+ h6 S4 E# }( J
& ]% t( [$ }! w
    UARTPuts("upp_prog_dma_i\n",-2);
# l+ y6 U7 P9 L$ i. i& Q* _' p    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# o5 z9 \2 M* T. ], ]/ R' |    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ f4 n4 J, O& H8 H$ ?0 L* I3 e
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 T7 B. [$ R! v( o7 R$ ~6 y, L0 t
* r. j2 D7 d- o0 j8 M3 d    /*等待UPP传输完毕*/
' H$ ]" M. ~/ M3 P    //i=0;
& m* S2 W: L! G4 u* T    //j=0;
% z# e) k& X8 M  f2 D' k    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! p) i: H+ L- ^6 m: `    {
, F) K9 D3 ^8 B1 ]        /*  测试UPP传输的同时操作普通DDR数据
& k8 J% z( Y  J        temp=i;
/ E  ?0 D6 w6 J7 L! Q; E5 G        i++;! T8 M! x$ q( k) C5 u
        if(i==1024)" |. I% d% `+ \! P
        {
( S7 h2 C5 g$ d* [! r, m            i=0;
5 w1 i# }' _1 p; o0 ~            j++;% n) b5 G; L9 \. j4 R/ B
        }
! k& H) C# J  C: n3 d        */$ H/ i3 f" Q7 X% M5 N0 i; R7 |. [

# y7 H" n; ^, w" b$ a, U       asm(" nop");
& v2 }0 {2 m2 h6 n1 `/ ~* b0 b% y( [0 J( u( X4 v
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" v4 I' _# X- Y' Y# j
    }
. \7 r( t) V$ R% a: i# @7 E2 l7 ~# `
    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 ~( `2 S0 r3 t2 F( x! M
    //UARTprintf( "i=%d\n",i);% O) H5 G; |) m2 \3 ^
    //UARTprintf( "j=%d\n",j);
% o( [4 u  {* N$ m8 e4 R6 c8 I    UARTPuts("Data mismatch in buffers.\n",-2);5 x( [" L* H8 k6 _- R5 A; V
    if (upp_interrupt_count == 2 && upp_error_count == 0)
! I) X# W# S- B5 t) N1 Z% V/ I    {" k' K$ w! h2 A* Q
        for (i = 0; i<upp_frame_size; i++)
! I/ H0 c9 W2 M3 A" T8 ?        {. @/ J8 S$ K) y  M& F0 m0 _
            if (upp_buffer_a != upp_buffer_b)" Q, z+ o4 a/ s9 g$ {0 K
            {1 F: \! V5 A& @1 w- X
                upp_error_count++;; J. v. p+ O% T! u, u
            }& I& Z) p5 Z( F- P% a* t2 X, d
        }$ L5 A) r( C6 S7 ~- c8 c& j& e, i
    }+ V1 [! }6 n/ q6 Q/ M* o0 p( d

9 ^0 E' R) g) a2 g0 Q    /* 报告通信结果*/
+ w' {+ E% ]: o) J4 G0 Z    if(upp_error_count != 0)% T8 Y6 f9 i! S& E5 a% i
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! E* }/ X& [" t6 |. h- w- ?    else4 Q% `9 a% r" E  V; ^4 h! C
        UARTPuts("uPP transfers complete!\n",-2);
( k8 o2 C, m7 `+ R# r
  F* E+ ~% V, S5 H. z) m    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ t& T9 y5 K8 U
    UARTGets(ch,2);
* P: ]8 I+ U/ f2 [) F7 w: y9 \1 _    UARTPuts("\n", -2);6 J8 p; D5 D0 j, E$ ~" l% C! t
" ]1 G  I2 d9 o2 ^* y5 ^2 O1 d( F
    if(ch[0] == 'y')
0 h9 M- I" j0 Z0 x8 I5 P    {
3 C: g# x; a: `8 I( d8 @: j% H        /*打印全部读到的数据*/6 v; R3 m; |9 ^
        for(i=0; i<upp_frame_size; )
% D4 N! t& K. D3 X8 E& n        {/ B( d2 ^3 h3 |0 i) y
            for(j=0; j<5; j++)
0 t4 o! M' n. B% z! O. P8 M            {5 i& `( z9 a3 y) T9 h
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 M2 ^% r6 |3 Z+ N# S# a% w8 {
                i++;# E9 ]! m2 q+ Z$ M* R7 }; P
                //if(i >= 4096)
$ z' F0 h3 [& O                //    break;
; V* }' h2 D; W6 ^5 c/ k( I  @9 Y0 L. o8 C& Z4 [8 f  g
            }/ H) J9 L' E( F' V( D
            UARTPuts("\n",-2);3 p8 P. g- A( T* D4 c9 ^. u
        }
- C8 N  ^" @2 c! _    }
6 a. @6 Q8 Y; C) u2 o! A, w$ A) P8 k
- j  r& f9 }& A; l2 y' O; D}

, n7 n- \$ t. Y' o$ X: }6 R

$ P$ R( p' o$ X; F5 o' c4 E( n0 m4 M: P% H' A& E8 `

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 i4 x) C+ x0 X4 p
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ R- K- {6 O7 T) f) w5 ^% E





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