嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ ?) {5 e% R0 v9 I. l0 P
Void UPP_TASK(Void)3 s8 B2 k- l( U
{
% o/ p5 R9 F, S' v/ D* x
  N* Y/ D. `4 W6 R7 r5 J3 s    int i,j,k,target_int_count=2;
3 S0 S' `% I" Z  K5 u$ m& p. w    char ch[2];
0 |# K5 l' }& {! s) E  M; p3 G# I7 G
2 K4 D  j0 {. y

3 F" {1 B5 z$ K; X    upp_interrupt_count  = 0;
4 n) f7 v; O( v. p" n7 S6 f    upp_error_count = 0;
$ E. Z+ l. K) U+ t8 U: J2 g# R
7 e1 H1 @+ ?) Y6 B- D" q    UARTPuts("\tResetting uPP buffers...\r\n",-2);
& L( h: X! ~2 m( }! F    // Initialize data buffers1 n) `& J% Y/ u3 G. z* ^
    for (i = 0; i < upp_frame_size; i++)
1 g. r  o. ^8 Y9 @% s+ G* Z2 ?    {
# |  L0 A9 B( p" ]$ C0 ~       upp_buffer_b =i;; H! B  ?2 Z% k9 Q
       upp_buffer_a = 0xDEAD;) H8 a, j' @4 ?' F6 R0 S
    }" d4 v" J! D: M/ v6 [
# O" s5 \+ q" ]3 N3 J
    //for(i=0;i<1024;i++)! k2 w. m) ^) g# ^1 L7 f
    //    temp=0;1 N3 z6 r; a; K. c

% g; g- g2 B  B5 i% C1 I) n! R1 v    //UPPReset();
5 C0 \2 a6 w# x6 D/ B" J0 d5 m    /*启动UPP DMA传输*/8 V, E: y! x3 s9 g& L
    UARTPuts("upp_prog_dma_i\n",-2);$ T1 e  j7 `; [0 p$ j# r' o
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ ^* B6 [, I* R, k0 N; A! e
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- J6 j, v% p' Y( u% a- b' n4 J- [    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 W; ~' P9 O" E" b9 c6 p# m

; p9 M' J6 B$ [2 r+ o+ w( l# {' i' Q3 b    UARTPuts("upp_prog_dma_i\n",-2);& I  t) w% b5 j- o9 q9 L6 F
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: G; H! J; H! s& B0 a. g9 Q& i; ]
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  ~7 P1 _& N: g# j! u
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 ^; j( e% D& ]; [
8 N3 G8 W* m9 E6 R. g9 w    /*等待UPP传输完毕*/4 H- Z0 H) ~) @6 j: V- s4 H: u
    //i=0;; g1 D1 C  e7 }, J
    //j=0;
& L! }5 ~6 X9 O    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 J: q4 x$ e- ^4 p5 x4 @    {0 q0 c& s. J) j( T, x5 ]- r: T
        /*  测试UPP传输的同时操作普通DDR数据
1 z/ ?9 [3 p/ i        temp=i;
0 X3 j' K- W# r1 C7 r( H: g, y        i++;, v6 R% r( R: `$ U) t
        if(i==1024)
( {8 J$ X2 L$ [# V! q9 P        {/ X2 Y! N: R3 ^2 D8 d# r
            i=0;
; v/ L2 ^  G# d6 Z            j++;) d3 S: x8 T# z$ l. g
        }
( X/ n6 m7 S2 \7 B/ x7 w  l# l$ z        */
  G9 Q/ q! F8 W6 ?, a/ s8 L6 _) _& [% @* f6 B' S3 g
       asm(" nop");
0 V6 Z/ C9 ^, e$ [% S' B/ L
" _, c$ c, {! l4 ^: m& M" W$ y. m       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);: {) R+ B2 T9 t; Q. c1 e
    }1 N& s9 L8 b7 [% d" R4 o$ q

5 U: i% Q& n3 p( t    /*检查UPP传输的数据是否正确 (loopback modes only)*/  d$ x( m3 c8 I' W; B
    //UARTprintf( "i=%d\n",i);
1 S( w" ~9 l# y& F: D5 o    //UARTprintf( "j=%d\n",j);5 |: h, u5 U: o/ P1 t; S( R
    UARTPuts("Data mismatch in buffers.\n",-2);4 ]+ w. d, K' Q% d& O1 t+ C, |
    if (upp_interrupt_count == 2 && upp_error_count == 0)
( }# h, j  k0 {$ Y' q    {
" J% f4 S6 ~0 ^- i. g3 N; p        for (i = 0; i<upp_frame_size; i++)
2 L) a# L2 @5 C5 n) n7 s$ [        {0 v# y0 o2 C2 A! W
            if (upp_buffer_a != upp_buffer_b)
1 p* F" S% o% R# W            {! p% W7 Y+ V, c
                upp_error_count++;
9 Z( F( b5 I/ g' {( V) h            }
# |, Y& g2 f: r. @        }1 K/ l8 D; o5 q
    }( q3 Y! u$ J7 N- }

' x: h: J. q  R2 L" m    /* 报告通信结果*/
0 D- {! j- M  S. j: J2 c    if(upp_error_count != 0)3 l7 q, T  b. t
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
& k3 F1 a* h, v) ~2 b    else
+ n3 t+ {; D' B( b* A' f# i- b& U; J        UARTPuts("uPP transfers complete!\n",-2);  ?8 n0 ?* G3 x

+ L0 A. K$ ^0 |  P# c( `6 y0 v. J    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 B' T) h! b6 ]5 E+ }* [    UARTGets(ch,2);
5 |/ x7 ^" u: x+ o    UARTPuts("\n", -2);: C% j& R: _2 a4 T6 t8 M0 A

5 @- [! c8 ^6 Q7 ^6 n2 @* d    if(ch[0] == 'y')/ Y4 n+ M# Q7 ^$ X7 y
    {+ A( O' H/ Y! [$ L
        /*打印全部读到的数据*/- l7 J% y( Q! h0 h0 ^
        for(i=0; i<upp_frame_size; )# d8 N4 Y6 q& A7 z* ?! ^! d, }6 T
        {) x$ K: {" F4 I
            for(j=0; j<5; j++)
6 I; s+ j1 B1 S  B+ n            {: ]3 _* i3 T0 a" ?0 t8 n5 e. k9 K6 w
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! D+ b+ x$ p$ ~0 }& |* t
                i++;( P4 Q7 T* [. a0 B
                //if(i >= 4096)
6 D) |# H7 u! q/ a                //    break;
) X. @/ X4 p) t6 c/ _& L% T4 v; Q( {1 a! {8 v2 x
            }' R: S% H/ `9 t
            UARTPuts("\n",-2);
7 P$ q* S$ g" j        }
0 i" [1 s; W# Z/ h  B/ u: Q    }9 P, S$ F. o3 Q& F, f6 j" W

/ \$ h5 _8 e8 S% j8 _; D}
9 x  \; T9 b2 W9 \% Q0 R+ N

5 g% |' C. D3 F7 T) x3 Z2 f
* c+ s% c9 i8 l6 y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ T) ?- D# {' h; `- H

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ y3 T3 J% o( a




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