嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ @' |6 l) q# ]
Void UPP_TASK(Void)* Z" u- T  f1 K4 A
{
6 y" i6 A1 W5 L1 }6 C. G
6 _! z7 D$ C' ~    int i,j,k,target_int_count=2;
6 N! n: f- \" o/ T! W& \! o9 \    char ch[2];* X; c2 u4 v( z* t
: u( n; }8 N3 C- [" ?
- N0 \% \" |: l+ q! x+ O- Y

7 m( m3 p" }# q# L- ^, z* V6 H    upp_interrupt_count  = 0;3 R' |9 ?% y# }, N  @+ J1 Q
    upp_error_count = 0;
( R# e' D( T1 u/ {8 e2 J
! ^1 T0 F* W4 Z- a; m' O    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ p3 L  W7 q% C+ p
    // Initialize data buffers3 r* u2 \3 }* ~* M% v
    for (i = 0; i < upp_frame_size; i++)/ W  L) ]% f& f9 @% X, r& o; h
    {  k0 H* Z4 e7 [0 s
       upp_buffer_b =i;
0 B2 G, i7 C+ ]0 J# T/ n       upp_buffer_a = 0xDEAD;
* b& N5 l. a" J  f& `& i    }3 ^+ U% a1 k& n9 K

9 q3 w* T/ N( Z9 D1 k    //for(i=0;i<1024;i++)
8 U1 E6 x$ l! L. G* V0 e    //    temp=0;
" ~  J7 Q3 G& n5 G7 U* r. ?; e) s0 J# C# x) c4 \
    //UPPReset();, B- b2 S8 L, A0 V( b) b
    /*启动UPP DMA传输*/
% M! ^% U& @  c4 E# U- f    UARTPuts("upp_prog_dma_i\n",-2);7 C3 }/ @4 F0 a# P9 \
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 E; ~( O6 z, p4 {    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; ]6 J4 {; e& k5 z& K4 `5 ^3 P6 v  e
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 N4 U( K, d5 @7 h; E: G; P, q8 E2 V8 y
    UARTPuts("upp_prog_dma_i\n",-2);
8 `" J) r& @' u; M# c0 d    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 h3 Y5 O3 i* }) L, a; D
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- w$ n$ d. o2 M$ Z# s9 P
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# Z2 |0 p+ d1 b& r* M2 [3 O4 f) u9 r& i+ A9 J9 I
    /*等待UPP传输完毕*/
$ G4 `+ k5 n+ q  r& `* `    //i=0;
2 _: g0 r* U" u2 t    //j=0;
3 a# m! v, Z& J/ `: P) x" n    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ R5 j' I5 J  S6 h' s! J" ]
    {
' V0 D  A9 f. [4 Y8 r5 ?  c( V* s        /*  测试UPP传输的同时操作普通DDR数据
  L' D6 u& i- a  c+ c% U8 {8 X        temp=i;0 |( q* l0 v; o% t" ?+ A0 j
        i++;
# K$ P9 U" M- L! H: d        if(i==1024)7 l4 \5 g0 m7 y* T- D- X
        {
2 {7 [0 ~4 X$ e$ [3 M            i=0;/ d7 d) {6 D! l6 r( |* X+ ]% g
            j++;
* a9 j4 k& Y: j  Y5 f- J* _. S        }
7 S* d( s  Y8 V6 Y/ l1 S* q; Y        */+ y. d/ Z- _1 L( y
! V6 K% O% Q. x) T
       asm(" nop");: I$ X$ z& m( d5 S; f" O
" U" |9 ^' @: Q5 O* {8 [2 c
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);5 ^% @0 h& {# t* D* {* b7 `$ B
    }
# m  C) C* u# A
( \. E! J. ^! n; U' d1 n' i    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ f& _* s7 f8 `! i    //UARTprintf( "i=%d\n",i);2 V) ?9 u3 V3 S5 K5 [# M1 ~7 \
    //UARTprintf( "j=%d\n",j);5 i( u4 l9 Q" X6 N( n4 S3 n; |/ l( B( L5 @! b
    UARTPuts("Data mismatch in buffers.\n",-2);! ?+ n3 V# B# J: u7 u3 }
    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 W2 W  B  M! r+ R) a# f# ~    {
* ~6 ^. ?: C+ c3 W' U, T        for (i = 0; i<upp_frame_size; i++)
  \' b2 F* z; ^2 V5 V& |; ^; z        {+ m- |; r# q& ^% i) f  ~5 j4 U
            if (upp_buffer_a != upp_buffer_b)6 c; P4 y0 v) ?6 X' W6 f
            {
% r2 R( u4 w$ i1 z1 h4 n4 i' O                upp_error_count++;
2 i7 j" _0 h- ^3 [3 H0 x  `            }
2 D* Z1 u- t9 V* d! d- k        }0 E7 a/ ]6 G$ k" F( |! I# r
    }
* l5 L1 z5 E6 S1 f2 x% ~( L4 z
9 [: [" c: @3 m, b5 M& J    /* 报告通信结果*/
+ p# k( v/ O7 J% D6 G% |" o6 \4 {    if(upp_error_count != 0)
) X0 H$ k3 P& Y6 @        UARTprintf( "upp_error_count=%d\n",upp_error_count);& j- k! y" \& p6 ?$ u
    else/ h$ y) F& i/ u5 @# D  n  e
        UARTPuts("uPP transfers complete!\n",-2);
& |$ g3 L7 B- N( s9 \. u9 _
) i. z' B0 Y) {2 S& I; S) f    UARTPuts("Do you want to print all the data?(y/n)   ",-2);, R0 ~0 D4 {9 d8 ]
    UARTGets(ch,2);
& P& Z& U' G- H2 A. x, [    UARTPuts("\n", -2);
4 `2 x* p5 j6 I6 q; I1 b
9 Z  p+ G* C! A& ?! l) R( }    if(ch[0] == 'y')- U, t2 C1 b* n& B
    {! s. B. i% m# D3 o, L
        /*打印全部读到的数据*/
1 p# s9 y: R+ F+ y3 n. w        for(i=0; i<upp_frame_size; )
2 a6 r. F* v9 g8 F/ ^; d        {0 k. d( y# Y+ T( v/ U4 l* E
            for(j=0; j<5; j++)2 Q3 I. l5 G% E( ?7 N$ d* E
            {7 ^: k% u8 N, z6 {! w: x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);$ O. @5 z& o" x9 K6 j3 w
                i++;. M' S  b- ^& h/ H
                //if(i >= 4096)
: r" U" G# c" N! |) ~8 J" \& D                //    break;; ^) L1 A. y9 k: \& T1 n

2 R5 [: E2 m8 q+ L* h' ~            }. h4 v5 E" ?. i3 t1 t, L; J
            UARTPuts("\n",-2);" N, h& c) ?; O4 |; f; C- M
        }
5 l& H" a0 Y0 }8 z    }
! Y  Q; h" Q  K" d/ N9 b
7 G1 [! t' d) y0 w- b" f* A}

6 q1 m" `) F6 h5 t1 ?
3 s9 p1 [( j- S! `; Z4 Q

0 J" M% a/ Z- n8 w) _/ j7 B
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' R. |9 U! c( i, X
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 Y( H1 N- u( ?+ R" e





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