嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& ^" E, Z: Z7 x) A$ \" _
Void UPP_TASK(Void)8 o; B7 g4 R  p3 x+ L
{
5 c: m3 o: R( G- `
3 ]( h: {9 D9 ?$ e    int i,j,k,target_int_count=2;
( _6 {6 m$ f* H    char ch[2];1 }! m, y* X* z$ y
8 M/ t3 }3 K) q

  c" c5 Y; J+ [# n5 ?8 f$ E6 w8 E2 R
    upp_interrupt_count  = 0;
+ A! f8 X2 |1 d. F    upp_error_count = 0;( |) d; s( j+ H9 I: n9 L

  Z1 z( S, Z" J, v* b- ^& D5 o- c/ k    UARTPuts("\tResetting uPP buffers...\r\n",-2);# R; H' c# A6 W! X% u6 J& f
    // Initialize data buffers7 B: z' `* P& y6 I. _2 d2 ^
    for (i = 0; i < upp_frame_size; i++): r( I! f( o2 @6 C+ z' _6 N
    {& V7 W+ r  h' B, J- D
       upp_buffer_b =i;
- j' j6 L. q1 }0 m       upp_buffer_a = 0xDEAD;: @- U7 K/ ?# C; k. L4 y% y; k
    }$ r: b( r% t% N7 k: Q6 ]9 Y
3 P* U/ O) [; n8 T  T/ B/ Z2 r
    //for(i=0;i<1024;i++)
' ?7 Q/ \) V  P; F" ~    //    temp=0;
0 m3 z0 q# @0 g" C8 k) @# g  t' S& s8 }! Z' ?0 }. ], J/ J
    //UPPReset();
4 H3 U! k# A8 ]7 Q3 T- `    /*启动UPP DMA传输*/
! _. Y2 X8 x1 L$ _# S  \    UARTPuts("upp_prog_dma_i\n",-2);: u8 @' i0 e1 Y4 M: r* g
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;' y, ~- S% j/ F- \1 D. ?
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 W7 R! K& S( Y3 B6 Y    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);/ h. Y3 M9 V! f. G0 i3 Z* X$ U- k
% g0 J' l. e5 _8 f: j+ Z9 c2 ^3 O
    UARTPuts("upp_prog_dma_i\n",-2);
8 m0 \9 D9 J! L. D    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;$ a' @! V" K5 t  H. k
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, w5 a1 t& y% ^; k5 M4 t    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 M" I+ y' ^9 D/ j$ x3 \5 h, r0 H* Z

( v% f/ R: |1 x8 y; Y3 L    /*等待UPP传输完毕*/
* ]1 S8 S/ G& i! f; w' L$ U4 @( v    //i=0;
0 D; v( m. I, V    //j=0;/ ~. C4 C! c! H, C- y
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ u' {) w- l! I    {$ T1 D8 z/ x# ~8 |
        /*  测试UPP传输的同时操作普通DDR数据
! R+ n8 W2 @$ M5 a7 u- G* q        temp=i;
: p" z) O$ {) w( I, o7 D        i++;( b5 ?7 n3 m" p9 m+ |) |
        if(i==1024)
. N2 V( r2 z  Q9 n5 ~        {! T4 E* E( Q2 I" t
            i=0;
- V& b. F8 F; j- K            j++;7 O$ j  n. w2 h" |9 h( C3 g
        }
* _. ^( u5 S1 _7 s' z: b5 v        */
& b- T! ?& p3 r  b' j
2 B$ i3 o' n; \" f. |       asm(" nop");
( m2 N+ N0 }+ G  ~4 W& W4 b$ y( n7 E& j, s5 G
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);* k" n+ s; O' j) s4 v5 Q! S2 `
    }8 U8 Y( W/ O; w$ M
: Q5 J6 C: T/ u9 n! H, D
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
6 p/ }: S4 F8 p+ b4 D+ S6 _    //UARTprintf( "i=%d\n",i);/ \# K% o0 h3 [2 r  E& F& {
    //UARTprintf( "j=%d\n",j);; s. q7 t, c9 m2 r5 C1 C
    UARTPuts("Data mismatch in buffers.\n",-2);+ ~9 ~2 ?  w! `( q/ E
    if (upp_interrupt_count == 2 && upp_error_count == 0)+ _/ P( i/ e  P: y
    {! ^1 E) _, c0 h& e$ J# @
        for (i = 0; i<upp_frame_size; i++)
; S8 _3 q: Q  F& ~( N7 R2 [/ N- i        {  e1 k8 Y* r: E$ |& u
            if (upp_buffer_a != upp_buffer_b)
3 l6 I$ l# q7 v3 w            {
* f0 |6 t: ^5 `1 c                upp_error_count++;8 D0 B/ n, C. f1 p; F1 ^: _! F
            }& _2 d: t( Z# @( K$ R/ w$ x
        }+ ~& V8 W7 [2 t  N. U7 d
    }
4 Q+ V' {; R1 Q* O" m" `5 X
0 i8 ?8 v: y' g/ R) a1 T    /* 报告通信结果*/
% z% {9 s. m* V7 G& V6 v" Q    if(upp_error_count != 0)
7 K5 t% J' c! d9 W- \8 O        UARTprintf( "upp_error_count=%d\n",upp_error_count);% v; e1 L8 H) r/ |1 M
    else- V& y( [6 u2 l- N: {6 L
        UARTPuts("uPP transfers complete!\n",-2);! i2 S5 a2 {: S- e. Q: B
5 b2 z3 p; I4 Y& x1 l3 I
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: U( e4 H* ^+ C% c5 W; A5 f- D/ a( m    UARTGets(ch,2);
4 `+ e3 G- }0 t* Q    UARTPuts("\n", -2);% ]$ u* ^) v" _7 p

1 ?5 p. G( `% s4 q5 H    if(ch[0] == 'y')& ?3 e, x( ~5 ^) I/ @+ g
    {
2 T8 A" D7 x, \: B$ Q        /*打印全部读到的数据*/8 H) H9 f8 \) {& n. k; u  [
        for(i=0; i<upp_frame_size; )
) N0 b% f6 A( X        {
( h6 ^" v( B& a5 Z8 x! }3 O- Z* D7 q( G            for(j=0; j<5; j++)
7 O+ p3 }- A1 _8 |- L" ?2 W            {
; r; r' Y! t% c9 `! F                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);# {& e( S- `9 z) k4 ]& `
                i++;+ r7 T2 k" |% f, q
                //if(i >= 4096)  I2 a: [6 e/ E$ m8 K5 n
                //    break;7 v) x- b, _, }  h
- p. Q  s5 I. O  m
            }( s+ Y; |) k# C/ ]% Z8 j
            UARTPuts("\n",-2);" M: G+ Z8 E% l3 o$ `9 e4 H" z
        }
# _: A3 V3 E) Q! Y    }5 n, ?1 `" |3 x6 O4 q5 o/ T: ?
% m1 R! Z% p/ g8 I
}
0 c" d) `, P+ y
9 g8 Y5 V1 @- E
% e; r4 p+ s) O3 @( R- f

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ L8 U0 l% \+ P; N. l5 w* k$ g! {, ~3 O
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" c, r; \: `, ]





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