嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% X$ z9 b( r5 F% I+ R
Void UPP_TASK(Void)
" @+ v4 v5 n. F, b. w{3 J) T2 o+ o' Q2 X5 i# q% U1 p
1 x, k5 @4 ?& ?2 V0 Q1 A3 o
    int i,j,k,target_int_count=2;
: q2 i; z" A; g6 e! ~- W" E, Z' }    char ch[2];
# x: g3 F0 J: B3 _
: }* i2 W' M0 e( q4 |7 }
$ [' o& y$ @6 g$ x4 [
3 a6 v9 q0 j* [    upp_interrupt_count  = 0;
% h! k$ ?; g5 |1 ]9 K: C4 S: H: ]    upp_error_count = 0;7 y- u8 S" g7 _" S9 C& l1 h/ J

5 J" U0 N; x# M5 s' k; R    UARTPuts("\tResetting uPP buffers...\r\n",-2);! n# K/ J3 z& n+ Y7 w( I# N
    // Initialize data buffers
4 _) w& g# B! Z! o) @    for (i = 0; i < upp_frame_size; i++)
/ W# S3 }1 U3 v  ]    {2 L8 r6 Q, p: c6 j* F; w& n
       upp_buffer_b =i;$ O7 D& S7 g/ c; p
       upp_buffer_a = 0xDEAD;& ^6 O% j' `- J/ @2 h
    }
- J; ]+ d! S) Q6 x; w
" |9 C  @  U8 o& ^2 z5 w: \    //for(i=0;i<1024;i++)! _5 H" b& R" n8 \' y5 ]( ^: U! q
    //    temp=0;2 k# A: q/ [8 A: V

% X) ?8 {8 z: i1 J4 u6 S0 m    //UPPReset();3 u0 D0 v) y3 a
    /*启动UPP DMA传输*/+ l! \, Y( o9 }5 V, b7 v( d
    UARTPuts("upp_prog_dma_i\n",-2);2 P6 y- ~! y7 [- u# {
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ J" t  P& |+ D" A    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' _6 @9 H0 g$ X7 J3 @. c6 U    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 J# f7 g6 ^2 z) _
* Y( H+ b9 r) W9 P3 Y    UARTPuts("upp_prog_dma_i\n",-2);
5 Q7 o+ W. Z8 t3 j% I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% s/ B3 @4 e5 H0 A6 z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) D$ g( m2 o! i  w& n
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 i& i/ `- I! A) u  u
& f$ ^0 F# X- T
    /*等待UPP传输完毕*/
  m' A6 Y3 f( p1 Z# h    //i=0;
6 i4 S) N* `& E. ^+ `6 B) |: _3 r    //j=0;
' ]% c( P* P5 f* n9 W$ g    while (upp_interrupt_count < target_int_count && upp_error_count == 0); s  d' F9 e6 N5 s- d  S/ `
    {
6 [1 L6 c, V; @  ~9 v        /*  测试UPP传输的同时操作普通DDR数据- o1 N9 w8 I: L2 a- o
        temp=i;0 j: A" n5 @+ d: D0 Q' Z
        i++;
6 Z+ s0 I& r5 ]$ O6 h/ N4 C3 o0 q/ p        if(i==1024)
* |" o$ v: r  |7 l& c$ g7 _        {
  M' Q# \) C. Q            i=0;( g! G* `' c3 G8 D7 ^' i2 T4 Y! l
            j++;
; p1 w% e/ B0 X" a( e3 b        }( l* e2 V! l+ T" Q2 k0 ~! c: k
        */
0 o) R* Z# O% d( }0 R( `# @, V4 C
2 E2 t; S% f- C' |  O+ [+ Y9 W       asm(" nop");) B1 G" E, n" B' ?

: \" ?1 u7 `( y) L% f) E* p3 D       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) ^- q  F' S3 c' g9 n    }
  U/ T: F' D" P$ B' {& D# m$ I& c' l0 Y, F
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- G5 H9 R0 I7 o; ]( O' m) P    //UARTprintf( "i=%d\n",i);
9 N/ t$ k8 h5 w+ h! u  ?" j. G: c+ V    //UARTprintf( "j=%d\n",j);
& M7 z) Q* G% I* w# v# A$ R3 W    UARTPuts("Data mismatch in buffers.\n",-2);3 K. E' M# `3 i
    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 P) r& {2 r7 j    {3 _2 m7 z7 y- M. `. U) u3 z( @
        for (i = 0; i<upp_frame_size; i++)
  d5 F5 S; R) a8 a0 O' O2 m        {
4 g7 b' ]. ~( H4 N* P* ^            if (upp_buffer_a != upp_buffer_b)6 P! [$ x- \9 q6 o9 N
            {( J: y: K' _- d% x5 j% o1 `7 m
                upp_error_count++;2 G# G8 W- P4 @/ X
            }
- |+ g) t, z2 K. e1 P' o        }
( `; a" r6 F' a  q- C% h2 D2 y    }
: J0 R/ Z4 ~$ D. ]
) P7 w) z+ {9 Q2 y" G9 r$ ~" f    /* 报告通信结果*/8 x, e1 O! l* v0 B2 r* ?
    if(upp_error_count != 0)
! D, \" [: H; W        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 R* P" i, W  @! D' y$ q' b
    else
2 `7 n6 D7 S2 k2 f8 ^( I  _        UARTPuts("uPP transfers complete!\n",-2);
$ n* [" o) C+ F2 a1 p8 ~
8 Z6 v$ ]1 V' p( d: ~- p    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
7 e, `+ j: s# r0 v9 K    UARTGets(ch,2);
8 {4 J" K2 f7 i! u    UARTPuts("\n", -2);
' x1 s+ P4 H1 u1 }7 l5 b3 C2 p( R+ w" f0 r' {
    if(ch[0] == 'y')0 E  d7 t, z& n/ b' ^- X5 ]1 p9 l! p
    {% `% ~' I! b% p
        /*打印全部读到的数据*/8 N5 N: L! @+ H
        for(i=0; i<upp_frame_size; )( D% W: @  K. H
        {2 P6 p8 @, j% p$ \
            for(j=0; j<5; j++)- s* \5 O& ^  t. C' D) z4 i; [. n
            {4 a+ }7 o0 o0 d7 Y& T
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. `5 H9 G" U8 k. T
                i++;
% |, |# |/ T9 u# l# M7 q                //if(i >= 4096)
; D- g4 S% U! F3 c4 I                //    break;4 ]% U% V9 v. e! o  p
/ a- b7 @7 E8 J
            }
) q9 z8 m. J2 b' t) R            UARTPuts("\n",-2);9 u. q: r: j. ]
        }
. \# C5 D1 }- D& P$ |; j4 R3 Q    }% L& ]6 `* k/ y; q$ |* {6 O
9 f& ]% \/ l9 z& r3 Q: u4 c
}
. u0 S! _$ \+ h

! p  h( M5 k( l; m
, I3 K  e. y0 w/ E
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( m4 i0 R5 r. S: B% }! p% X

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( o9 U  F$ P& `& I3 I  e




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