嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* L  n4 E; E# z" `% _* |
Void UPP_TASK(Void)
" U  u! `& d) n0 E0 U9 Y( c{/ V( O. x4 |* o5 A- K. Q! t, v
& ^. e# |' O& t( v6 O  D& E
    int i,j,k,target_int_count=2;+ p! b1 F' g+ a% [
    char ch[2];! t$ P' k7 [7 |- r' e1 L

/ F/ s- t6 V# N; a" u8 R3 M0 F8 B# s8 g! B+ O
* |2 ^" m2 V. `  k% X# {1 ~
    upp_interrupt_count  = 0;5 k7 N. q9 O) c) T+ S1 u% _
    upp_error_count = 0;
1 x, B& R3 z; {3 W
9 w; d4 B) T/ X; M4 Q/ D: }    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 u8 n1 q! }0 g# N* ^; O$ j1 G    // Initialize data buffers
. f. B+ h( @9 e$ a8 f    for (i = 0; i < upp_frame_size; i++)
5 k  l; O7 B% z# o) p! Y+ H+ u  g    {" j! I+ y/ y2 D% o
       upp_buffer_b =i;5 t0 V! J0 a: |! t. E
       upp_buffer_a = 0xDEAD;
& t& z1 H3 C7 }, D- I7 ^6 E# a, f    }0 [; c* X* W* t( Y; S0 F/ E; ]
# K0 M, }3 S* ~
    //for(i=0;i<1024;i++)$ Y! z' B) _: }: l, g. m0 G0 `
    //    temp=0;* s( U: Y- U) i$ K" j

$ R/ D8 `- `; t8 @4 v5 }    //UPPReset();
' [* A+ P1 V, l  K    /*启动UPP DMA传输*/8 h1 z7 H4 ]5 h
    UARTPuts("upp_prog_dma_i\n",-2);
% Q. r0 [  w# B" r; n    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 A% @- W' K; [
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' X: `% |6 b1 b2 Y# n  W    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ c5 y$ n. V+ p5 G! s! A. S4 Q" M" u/ `  j& {; }
    UARTPuts("upp_prog_dma_i\n",-2);" p: r; F8 u! O* Y8 O& o, e
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;2 W/ ?/ l' X4 z: x7 B
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" G) n4 e' e* P) t! S    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 ?6 P1 \, a" R
* {, Z$ c; T/ X( c& |0 [    /*等待UPP传输完毕*/0 e1 f# H, J$ z0 A% K& w
    //i=0;
1 f8 _6 a' l+ \1 x5 T. t& z    //j=0;' r9 W3 g8 q& S; G$ j2 h4 L
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" I, b) ~- d2 r  h( {    {( p2 p$ H& P: ^( w
        /*  测试UPP传输的同时操作普通DDR数据
; ?# T$ A: u9 t  w# [/ d3 _        temp=i;' ~- |0 p( W8 ~5 Q4 D- P( z" z6 [
        i++;
) H( L" i9 G: X! N6 n8 L        if(i==1024)( N8 n, C$ @5 W% s5 L
        {( @' b. P+ o! {
            i=0;
) I% I3 @! l8 i/ ~            j++;0 a3 B+ m) B6 h- v
        }& m7 N3 d$ J3 N: p
        */
, g, L) ]  k: D4 N  i$ F8 ]5 k! e- T
       asm(" nop");
/ x1 _% q1 ~! |! i
$ n' \' L% p* b% a8 p       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 S" q0 {, r" i3 j; @
    }- _( L. r/ p8 [* t9 i
7 W  s2 ^, b& d) ~8 V. l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 x( x0 l0 r3 b. b    //UARTprintf( "i=%d\n",i);
6 C) y/ p& S/ @/ b/ R: X    //UARTprintf( "j=%d\n",j);
8 K4 T& E6 h( d3 z5 V    UARTPuts("Data mismatch in buffers.\n",-2);
4 i5 ?/ X' ~1 c- Z# k; W  n    if (upp_interrupt_count == 2 && upp_error_count == 0)3 C  D0 ?% b* N' ~
    {6 U9 F, m3 b% h+ w1 O6 M
        for (i = 0; i<upp_frame_size; i++), a, B8 G+ J) ]7 h. _' ~+ {
        {
( o  f5 D' z' S' Z0 e# H# v            if (upp_buffer_a != upp_buffer_b)
, K3 H$ q. }" O. t6 t/ v9 _! q            {
9 k4 R% T7 \# m' B* j% e                upp_error_count++;% _) Y4 b; P$ @6 \1 c3 V
            }
9 l2 H8 L+ n+ }# C% d        }5 `/ h, t+ I& [- ]' N9 a! D0 ?( _
    }4 M. K6 o& I) w+ U3 z! t% O

' m1 J6 w$ }. \6 i( u7 s. a  j    /* 报告通信结果*/
5 f* l0 \9 A0 f5 l0 P- w+ ?; G    if(upp_error_count != 0): D- x" m5 O5 |+ }/ k; k
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! d( ^% S4 Z5 u: K    else! j9 a$ w, _$ g; C1 B
        UARTPuts("uPP transfers complete!\n",-2);9 x9 A0 q& A, T' L- J

# w; `  C6 _7 M( o  Q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  K( ^/ y& a7 f: `" p2 ^    UARTGets(ch,2);
  _2 f8 j3 ?2 a$ `1 D    UARTPuts("\n", -2);
3 m- P: e" Y; R: h( P" R7 G% _4 r" R$ {& |3 s  K' u
    if(ch[0] == 'y')
' x. {' Y# L9 M1 ]    {1 D8 s- K* U3 l7 Z( d  }3 y
        /*打印全部读到的数据*/( |( C* d% `! b; B% N6 p
        for(i=0; i<upp_frame_size; )' ~; _5 l3 z) S
        {7 ~& U! `, v% {8 H, s# V3 d) P+ h" S
            for(j=0; j<5; j++)' o! K" r; z/ ^) ^  |
            {/ J( y( q3 Q2 ]) @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, G: c0 Q- a0 P5 g) `
                i++;
" G) w0 A' S1 A0 s                //if(i >= 4096)
+ {5 ^: P2 g$ Z% K+ \$ b! a3 |: i                //    break;
# n8 O9 w- ^& O3 m4 T2 i. [
) C2 x0 S7 Q3 g& K. b            }
$ a4 D& d; m/ a( Y  w# b            UARTPuts("\n",-2);
3 J, `. Z2 J3 ~, f7 l        }" x. V3 b0 d/ @0 v/ C2 ^
    }
) F6 M& I  ]* V( z. ~* p& M; [& R. p) k5 m; J
}

- Q) Z4 M. Q! Q
& H, W1 d( P4 Y/ F, h7 W6 U1 o
' o) O7 \0 q9 ~" \" H

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。' W( b" ]1 F' v/ O4 q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 O+ |9 q& B+ U; N





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