嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: w" y2 ~, p' v7 N
Void UPP_TASK(Void)
# i0 C' H5 W4 k' Q4 `) E  U/ ?{
! P1 T& m" n, ]5 S! l
' s2 ?0 S7 s! ], m1 r" n' {3 b    int i,j,k,target_int_count=2;( v  R# O7 w3 ~( v
    char ch[2];3 K5 {, [& S0 a/ \$ d' _
$ y0 X9 t& S* M

2 F1 C, ]8 q, a. U( U4 P' P( {9 C. o) U2 H
    upp_interrupt_count  = 0;
1 s( |- b! b& l! H6 B7 q# n4 X4 I    upp_error_count = 0;
5 r& L3 ^2 h# E) ~' J8 k7 ]+ t4 |! f2 A' U
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 U0 Q& e$ b# ], S- y+ K  d    // Initialize data buffers
* V% W  {7 ^1 J    for (i = 0; i < upp_frame_size; i++)  r' O& h1 `# Q, J" D8 h
    {( B/ y8 D- S5 K6 x# \) `
       upp_buffer_b =i;
) I5 ?7 P2 `" c8 T7 P. i* _; I: Y       upp_buffer_a = 0xDEAD;4 m0 j- l+ X( X0 O- [- E& o
    }4 s8 d& c+ L) F! c5 J
1 M4 n* g% t! t
    //for(i=0;i<1024;i++)1 C! _- B7 n, ?# X. D* l: H6 [3 H! w
    //    temp=0;( L% ~( D3 m: S, ^* z

* q9 C; z( v! W8 t- H: r) Q    //UPPReset();/ }$ q& ?  d! Q0 I) M
    /*启动UPP DMA传输*/
) s% h- n5 d9 ]' o7 K" N- s" x    UARTPuts("upp_prog_dma_i\n",-2);1 X2 v  }" s5 Z3 i" q1 h
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- }5 |+ S0 B& @& m    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! |6 P" |/ v- E& ^) ~+ M    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 \" j0 `+ g0 j/ D8 O- W

( L2 Z- x5 Q9 o0 c0 z4 R    UARTPuts("upp_prog_dma_i\n",-2);
! |% |; m' U4 D4 c' L' |6 o    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;( t# b9 @. b- Z; K$ F4 A4 Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 H7 g& M" d8 g( }    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* p: s5 c6 Y) v4 T8 Q$ N! \) ?  S: R3 Y  _
    /*等待UPP传输完毕*/
/ j" D, N! k* X) J7 r4 D    //i=0;8 x" a2 ]: v" j0 t) b# O( f
    //j=0;( D4 k4 s' h3 C) G
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* g7 V  X7 D4 n& _% T7 ?. o
    {  C  c3 E0 ?; d
        /*  测试UPP传输的同时操作普通DDR数据# ~$ f0 H: e, W3 B1 A8 K
        temp=i;
. e% i7 C& F. L9 F  _! s2 Z# F        i++;8 @' [; X3 x  w6 H
        if(i==1024)
1 B& @2 t0 x3 }: a        {6 B& t1 O% W! j8 @9 r# K
            i=0;) @/ n. g+ x; g
            j++;
, l8 ]7 J) d, s        }0 K- m; o+ O2 K. S$ p; ^9 O
        */
: Q( I+ ]' V4 W( ]+ |; x
+ e" u; }# j1 G! D2 b: O7 H# t       asm(" nop");
, }) x, |2 v" H6 v5 r3 E* u. M
; k: c( G+ b2 A       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: Y8 C* u( ~# k: z1 M
    }& W! @0 _, N3 ]( y

; `# e# ]) q3 g    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: n7 O( ]2 l+ a5 E1 F    //UARTprintf( "i=%d\n",i);
* ?8 n' O5 |; j6 |, Z& Z1 |9 m' ~    //UARTprintf( "j=%d\n",j);
1 H* C: _- f- S: N. u2 t    UARTPuts("Data mismatch in buffers.\n",-2);' j* O1 i! H- w+ b  x$ H& ]
    if (upp_interrupt_count == 2 && upp_error_count == 0)1 r5 ?  E, u0 i
    {
2 S. d, Q; e% z, g' V$ D# {3 M        for (i = 0; i<upp_frame_size; i++)1 b# X3 {7 a( {5 R, E
        {
/ C- B% G, |# i            if (upp_buffer_a != upp_buffer_b)
# t7 c4 u$ T% z8 D            {6 }: d; ^( c' Y& K' p& u1 d$ r
                upp_error_count++;
/ e* Y6 X6 s) d, @9 m& m            }/ o3 `- m3 F- r; s$ |4 `
        }* H, S' {" C2 Y! r5 q6 P$ O, H; b
    }
9 ]9 B! j8 {; O1 [$ P9 C+ Q/ f, d% v, [9 s8 G8 P; t! p! Y- d
    /* 报告通信结果*// d. {& P1 }) U) @/ U
    if(upp_error_count != 0): B7 p% a  o- \* Q
        UARTprintf( "upp_error_count=%d\n",upp_error_count);) R1 J2 b  J8 G  t- Q
    else" q8 }7 G) o0 ^
        UARTPuts("uPP transfers complete!\n",-2);  b7 L: c1 Z( H% q: P) O0 `
9 |1 ?* u  [; _9 |
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) {) F- P0 E) G8 @$ l# b    UARTGets(ch,2);* R" s( w$ \$ R2 p( ]- S$ P
    UARTPuts("\n", -2);9 W3 n4 {  z6 j/ G

9 |& C# B+ R( P    if(ch[0] == 'y')
4 n% W- p  O; F: E1 X* H3 E    {/ |, p3 J) e) U9 x
        /*打印全部读到的数据*/
0 d; @8 l; M, n2 M        for(i=0; i<upp_frame_size; )6 v9 n- \# z; O: s* s% x
        {, W) P5 P, Q4 {8 y1 h) O6 F
            for(j=0; j<5; j++)
; x5 d, y, c2 t5 c7 y7 M            {
7 v; V! d1 f( Q/ ~  Y# _                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
3 ~4 c- i3 Z: `. R, f& Z/ V                i++;
( P! M  d7 M  ]$ j* c5 I6 `                //if(i >= 4096)( q7 a# u) L8 S. Q! L2 `
                //    break;6 x. Y) z9 h- k, q5 I5 m: p2 E

0 X+ @* i) Q5 A3 a3 H6 L8 w5 E1 a            }$ n/ N" G9 x) D- C) ~. |8 V8 {) _
            UARTPuts("\n",-2);; {& Z4 \0 P* p# G  ^
        }; ^  v% w/ m8 `+ ^. L$ c/ [
    }
3 [' v/ g+ R2 f' K9 ~2 t( \! t6 @) U( k+ A0 T
}

: [8 h# v1 }2 i0 i) ]
9 k# I0 i  {- l
: h7 |4 y% F( _

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* W4 R  G  A# W  J6 {
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ z, ]0 h/ q3 X4 m




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