嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: M0 X- J. C( r& q4 ]
Void UPP_TASK(Void)
% Q! X7 d2 N* |5 ?# S{# x% z) e( E: J

. T/ I: F- S0 p4 O# d! y/ S9 K    int i,j,k,target_int_count=2;
% O$ w0 K, x1 U* G+ S- w' w    char ch[2];
9 g5 ~* L& r, I2 [
: J  e& L4 V) r8 R0 X0 N$ p- h. u/ Z
" e' l, i( @! q' F' q7 R8 @5 F* ^( b9 o
    upp_interrupt_count  = 0;- Q" O8 ~0 U- `3 }* F6 @; F
    upp_error_count = 0;
( q; {" Y$ `0 `( T: }! Z4 |/ q; f1 U; A  e" b* t2 w
    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 S- r, |" g" x3 O
    // Initialize data buffers
: G: P0 n/ G! l0 Y/ r; L9 N/ T    for (i = 0; i < upp_frame_size; i++)
! N, H& v1 D! s4 o5 e3 G3 l  q, |& x3 `    {5 c$ w" }+ `' d9 I8 O! V) p
       upp_buffer_b =i;1 M' R: r& s" T) z/ ^; u
       upp_buffer_a = 0xDEAD;: y& r- O  |3 w  Q' R) \8 y0 @
    }
( [  G9 x" |) W% c3 M
. t" P$ r" a/ ?' C# e2 o( e5 x& D    //for(i=0;i<1024;i++)
4 e7 O& y# m% F9 u    //    temp=0;, u: y% h  C7 e  g
* o# K  F+ u- H
    //UPPReset();8 ?7 c- [' s/ ]+ @% t& W' S/ H" B2 b
    /*启动UPP DMA传输*/
$ l( u) P# B) K9 i    UARTPuts("upp_prog_dma_i\n",-2);
6 D4 s  O0 D: c7 u' d$ r( v    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' H9 e  J7 H; Z, M    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- x7 y' D2 l9 @6 Y- r# A5 B    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ I- [9 Q5 Y5 J( S; G  F! }8 ^% D  c+ R8 J
    UARTPuts("upp_prog_dma_i\n",-2);" D$ r* G; a& f3 c0 }1 x- f: A
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# T% y, w9 l8 C* Q6 u& C# i: t) J+ \
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: X2 M& E+ F' _9 v: A
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) X  z/ N( r* A, i2 I3 W8 X/ W
9 v2 ?+ q8 i. G1 y    /*等待UPP传输完毕*/4 |* f" |' d& M. z: T9 j' w
    //i=0;
0 w% [7 ], w4 t- f$ n; w1 m& c6 H    //j=0;# E$ M: @4 i4 z& \7 s
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 P' [+ t+ L- M, a- a  f
    {1 B8 n6 p9 l  _: V8 `. r# i# F
        /*  测试UPP传输的同时操作普通DDR数据
( b; L! S  }4 _4 C2 B% G        temp=i;
" g& w, D3 z4 p& n5 [        i++;
1 s) i: b1 F8 D! O1 X* f        if(i==1024)
/ V4 n3 K' X. s' g* G) M: E        {
- X1 _- t5 Y4 X            i=0;9 x. v9 l$ f; F
            j++;: b% C* R9 e& y+ X2 k
        }% s5 N3 m0 G) q& ~; d
        *// {0 i. x' }) X0 W
$ G5 |8 n! J3 w/ c2 N5 |. Y6 V
       asm(" nop");
. F) b' U6 n2 q; M& p
& ^2 q5 x' y( {       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; L/ P5 L7 |  Y: ?) E6 a    }
! O: ]2 z! G9 W& ]
, E0 A2 g# s( M    /*检查UPP传输的数据是否正确 (loopback modes only)*/; x8 `  w1 W% z; L, t+ q4 f3 T# B
    //UARTprintf( "i=%d\n",i);
" I0 Q3 }' t+ C5 s* e) d; |    //UARTprintf( "j=%d\n",j);- ?5 g, d9 t2 u
    UARTPuts("Data mismatch in buffers.\n",-2);4 ?5 S& B9 `' K# E! G! F! \
    if (upp_interrupt_count == 2 && upp_error_count == 0)
& H, Z  [& [+ X7 x. }8 W8 _    {7 P$ ]# z. _  ^9 O$ }
        for (i = 0; i<upp_frame_size; i++)
: S+ \: U1 Z0 f$ q( [+ m0 y        {
, z1 x4 _! {8 {/ T5 N            if (upp_buffer_a != upp_buffer_b)3 F+ X! f- U6 j# ~
            {
# J9 r' y6 i, c2 C- O                upp_error_count++;
& z- d9 k7 U& D6 u5 w9 [6 N/ L            }9 _; H( q% u3 M* Q$ [
        }9 ~6 ?* C' e  X0 V& i8 Z' t' X1 X
    }
$ i% f4 f6 X: l9 p6 f2 g7 O0 y5 [( C  D% T" g6 _! b' e+ U8 R  [  J
    /* 报告通信结果*/
  f' b4 p& b4 _& }4 }    if(upp_error_count != 0)
" N% _$ L, A- p% g& T" P/ U- L        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 C$ }4 p( D  o- Y1 d    else- w! {  R) s1 T0 |5 ^& ]4 z
        UARTPuts("uPP transfers complete!\n",-2);7 J9 f" `  I2 l
' H% U% `) ]9 G7 Q" x
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);3 e2 D) z3 G  h3 y& l. j
    UARTGets(ch,2);7 l7 O1 t1 }/ b: y  t7 _
    UARTPuts("\n", -2);+ ]+ e# X; Q' o, n2 l; N$ C
/ b# v8 W" s# h& b1 `5 _
    if(ch[0] == 'y')
+ C5 C; \- D# H1 j    {
) r* g, y9 O7 X/ D& ^        /*打印全部读到的数据*/
& g1 h( p) F. s  W4 _& b$ C( d        for(i=0; i<upp_frame_size; )0 A1 ]' x3 O6 b, K
        {
9 F# j' M6 E/ m) W4 w; H  T0 z            for(j=0; j<5; j++)
) o) [  R3 d/ x- j8 A            {
- `9 w, N: I* F# D- j                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- C1 v' w* d2 k5 J( }, n
                i++;7 f, S8 @+ c6 \% Y
                //if(i >= 4096)& b7 ~, w: V8 b/ s
                //    break;
5 t* G$ u' D' c. T: h0 S0 w7 w& h3 {) ~' ^5 j2 I9 z; R: W
            }+ Y; P4 J9 R* i4 }* s9 e" h
            UARTPuts("\n",-2);
/ y' i- X, d8 U- I; S        }: T9 [* S7 y1 t7 ?" j$ ~
    }8 \7 }. d- [( b6 L& f
& n7 @* @4 R/ f. E- `- r
}

2 K6 N. C1 |, L: d) ?1 d2 _
; f* q! D# P; `9 z+ F6 b
1 B7 r$ @5 C9 j1 W

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ B2 A  R$ v& ~- e& t1 T
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% a! ?6 k/ P3 v4 g8 E





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