嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 r" O: X* C6 X+ b- O, Y; t
Void UPP_TASK(Void)
* x" a8 C" C; v0 C+ v{3 ]! V! R+ H+ q7 W7 D' {
& J7 ~4 H, ]+ V2 e  ?' |
    int i,j,k,target_int_count=2;  V' K0 J5 m! F* ]
    char ch[2];" C; J7 E# Q* u+ h9 j' T/ b
4 `' o4 M' J8 W, N' ?

* t. u/ N* Z: ~  E$ O6 V: x1 I3 K+ ^4 `* |/ s1 X7 d" M% Q
    upp_interrupt_count  = 0;
& x7 y5 x$ S1 l1 p    upp_error_count = 0;; t. X5 f* N0 Y" }5 _; W* d4 ^% p% ~
1 I' |/ ^1 Z/ W5 H
    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 K4 u% w+ S* s
    // Initialize data buffers( M/ U9 ^# G' R4 _
    for (i = 0; i < upp_frame_size; i++)6 Y' {$ U6 }' O8 _) F9 m' v
    {- q: _8 P& _; I, |) h
       upp_buffer_b =i;; g, f3 Y4 _8 ]+ X
       upp_buffer_a = 0xDEAD;
% E/ z8 T1 L3 X8 K0 U3 \* ~    }  ~1 E: i* |( K  y% S! A

9 i* p3 l; v& A/ J+ `$ ^3 y5 |* z    //for(i=0;i<1024;i++)5 E. x: S# u7 ]- l: @
    //    temp=0;
4 J' ]; M1 P( L0 q# j. N1 R( c" [' _9 K8 P6 f7 \' O5 Q6 z
    //UPPReset();
" O. e3 [! U- G5 H9 t6 a, s7 v& ~    /*启动UPP DMA传输*/. ~* Q5 z; B% \
    UARTPuts("upp_prog_dma_i\n",-2);; _! h# F( Q* e9 T  T+ B
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: k3 C8 T' t* t* C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: x; D% F0 X3 L) _" p' _6 r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: D+ B' p: ^2 B( b' _
$ D- F. I( w& ^9 A. V1 T
    UARTPuts("upp_prog_dma_i\n",-2);$ N7 H; [/ Q: s& h  P  ^: p1 b
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( m: e. r  j7 ^* I+ m    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ [+ N0 P) e* k: z: e" @* r    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) U1 ?  p* K  I) S
; W  }0 s, ?6 m1 F) n
    /*等待UPP传输完毕*/* _* @; i3 c1 j1 o" A3 q$ l' E0 D( [( g
    //i=0;: n2 p4 Z2 n. d% r4 c
    //j=0;
& p# m6 h7 J6 \. p& x9 X" R    while (upp_interrupt_count < target_int_count && upp_error_count == 0), y5 u% {% N- g0 `  p5 J
    {
1 \- f! z, |' G& Q5 o; r& t        /*  测试UPP传输的同时操作普通DDR数据
/ f8 q! ]$ f9 {% Z        temp=i;
  _+ F9 a" u! i  T        i++;: s, p! T, [% k
        if(i==1024)4 G1 }9 V$ V$ l/ m
        {# q$ Z. _5 s3 r/ S/ g  T
            i=0;
* _: f4 g8 m) i9 L( `( s' s            j++;
: S) Q+ N+ w# x  Q        }
" l  H. Y* o% d- c8 j        */
! c/ C2 c6 N& w/ U5 d" g6 g
8 K6 h6 y' K' D. N: c+ K       asm(" nop");
" U8 E8 S( F+ }! P1 X$ H
' j* b+ e& t9 x4 C9 H: R' w& t  h  w5 r       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ ~, d/ S; e! ~: y( O2 n    }
+ D9 k) X" m: O" h& i1 g- A' i' J/ y& X' ]0 d) c
    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 p, A# ?2 W8 l+ l" L
    //UARTprintf( "i=%d\n",i);
% N6 s0 j- \  J, m; W    //UARTprintf( "j=%d\n",j);1 |+ M; ?) P- p# G1 K) P
    UARTPuts("Data mismatch in buffers.\n",-2);) r+ ?+ W: n2 {( Z
    if (upp_interrupt_count == 2 && upp_error_count == 0)
. l( k4 T7 G9 w  R0 P  k    {
* B9 f  B& f. ^* I8 W) ~& b* z7 r9 T        for (i = 0; i<upp_frame_size; i++)& E/ H7 h6 z3 b7 C8 K) M$ S3 Q. a) E
        {# m, ~( M5 s0 b  K
            if (upp_buffer_a != upp_buffer_b)# P9 t% t5 d3 z3 y% r
            {. h! c. T8 U1 p; B/ ]
                upp_error_count++;1 U2 d6 s; R+ {1 b" p6 B5 g6 O; X6 P
            }- d  g8 ^. K0 I! U( I- [( w& K+ q
        }
* ?4 K3 b# M$ S/ M& Z, J    }4 A& {3 v$ v, [. x

: D& M" h$ S8 |0 \+ C" G; e4 e    /* 报告通信结果*/( e% E4 `/ O! C; @* A; V7 z5 m
    if(upp_error_count != 0)7 o! S) M' M1 i' b! b3 l
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 B+ G- o& k6 J! }
    else$ [8 E1 [7 y5 A3 @
        UARTPuts("uPP transfers complete!\n",-2);
5 ~: J" c; `9 H& c+ t0 R& ^! u; i% _/ o! n
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 `5 H' _$ F0 |5 B    UARTGets(ch,2);
6 W8 Q& }' U3 @    UARTPuts("\n", -2);
' g7 T) @8 `7 f# V2 ~
; h6 y9 d/ i1 C! S! D    if(ch[0] == 'y')5 X) s/ Q8 @+ G" t8 Q" e% v& ~
    {" ~' v" r+ M9 R2 R
        /*打印全部读到的数据*/
* k' k/ w9 s) [1 m        for(i=0; i<upp_frame_size; )
4 E2 P9 R2 e. P$ m  l% ?- A        {
& a  l, X: f8 D; |            for(j=0; j<5; j++)0 F; V0 [/ I' F; F/ t8 u, n
            {
+ w+ r* P' |4 x1 x; l                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);/ k. Y6 o) P9 A/ j% R9 T8 ^
                i++;7 l0 ^9 ?4 [3 ]' e
                //if(i >= 4096)9 a6 ^) M* g& M* p
                //    break;
/ m. ?* [% P+ G$ J$ `  x' T! x* p/ z- L3 f0 Y
            }
, d# K. B$ \  t, d0 h! T            UARTPuts("\n",-2);
' w0 \* c  J8 I- a3 ]# P6 ?        }
- A; o& V; V- j: b( S* I$ r" n    }+ m+ {5 X# Q6 g& n# K' {% S7 r

% X1 I9 f% K$ z- A0 i# B}

5 q' [: d5 s% s" e7 e1 ^: N

# ?( R1 r5 ?5 |* S; W, {) B$ w( K3 V/ x, t

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# r  d% g8 B6 g7 Q3 l

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( H. z9 y, I* N





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