嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: p8 x2 H! `% d, D9 Z
Void UPP_TASK(Void)
  a% [0 I9 {5 k1 X{
# @3 U3 h; j9 g
, L5 [4 A* `1 w' F/ R) J# i: W    int i,j,k,target_int_count=2;1 ]" }9 @, Q& x8 |7 S  N4 d' i
    char ch[2];; Q) d5 X* y* @: \" M
( h: J8 C$ [2 J1 w6 \* S

$ C2 m2 h$ S  p0 P# g# G4 V2 G# ^& E3 H+ N6 r) k4 N
    upp_interrupt_count  = 0;' o) M) Z* S& B# q5 c+ s0 `1 i2 V3 v
    upp_error_count = 0;0 r/ A* B1 X- X% q- j. u

+ Q  f4 B/ R. N/ H+ Q5 O    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 S, F" R% y( B& y0 }    // Initialize data buffers; ?4 S1 T' A; O2 u
    for (i = 0; i < upp_frame_size; i++)" |2 y  B, ]& i: c
    {/ b9 Q6 C4 b" t* D1 l) s
       upp_buffer_b =i;: s1 o* T  l  f2 u- v
       upp_buffer_a = 0xDEAD;
$ R! E# C0 {' B, e! n    }! f  I1 |+ `1 L  C. _

6 s1 d6 |( B9 e# q    //for(i=0;i<1024;i++)
0 J6 e% U8 N, M! ]& V' \    //    temp=0;. c$ I3 L& K) N, ]" b

& q$ _* m$ q: l' v2 N6 z    //UPPReset();! P% f9 @" F4 W) j: [
    /*启动UPP DMA传输*/8 p3 Y) |+ y4 c# m6 j/ z
    UARTPuts("upp_prog_dma_i\n",-2);
  R! n6 l. f: N    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" D1 f" e, s9 W8 O0 _& a1 }+ ~. o* V" c    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( M, |7 L& E% N+ C
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: a( I# y/ O- J+ ]6 Q. D* g

% A2 L3 h2 h( P, @8 H( X    UARTPuts("upp_prog_dma_i\n",-2);
& Z' j  \) e6 E  I8 ?$ j6 j    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 T6 Q7 B2 S! w6 }$ `: Z    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% p: K. W" y! F& @" p7 z8 J, j
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 F+ H3 d# ?9 ]' r' {7 ~
# |( ~/ D" E! N2 L    /*等待UPP传输完毕*/
" L' I) u! `" v( N" v    //i=0;
' w4 X7 y: V& I9 l3 ^4 R2 f    //j=0;
& F1 r" a3 _5 b8 f/ ~    while (upp_interrupt_count < target_int_count && upp_error_count == 0)) O* d/ s; [% B5 p$ D9 H
    {2 |9 n1 M! S, H* O
        /*  测试UPP传输的同时操作普通DDR数据
; T! h& o. ?! Y& L) w        temp=i;$ X: f- h) o. H, x
        i++;( V3 n% g8 Q* f
        if(i==1024)
& P5 J. }  }( @# P        {
$ I& Z, Y: k% Z; G* r            i=0;
! p6 U3 {1 a5 Q: a            j++;
5 o+ E  k! a9 f# x6 j7 K        }
) n+ d9 h. y& }0 f% Z" S5 j* k        */
. Q% u. ~2 {8 c5 \$ J
! A4 O% y! E. ~+ S9 B! t9 ?       asm(" nop");
* x+ u) L" `$ O' F& t  j# y( s0 ^: d; D: {$ ?+ z- |8 E
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) R6 [% N. `$ V1 X& U* g8 b
    }. |$ k) L/ W. X$ i, |

! E8 R8 v- o/ {- U5 M6 S    /*检查UPP传输的数据是否正确 (loopback modes only)*/
, i; ]4 ]% q/ }0 ^. c) n) h    //UARTprintf( "i=%d\n",i);
5 Z- u( g' u6 B2 {7 I- [    //UARTprintf( "j=%d\n",j);! X9 _$ u' _3 u7 E
    UARTPuts("Data mismatch in buffers.\n",-2);
% \$ o* i, z3 E    if (upp_interrupt_count == 2 && upp_error_count == 0)
% N- ~! H1 R0 V) ^    {
& u7 {- @+ Q' {7 V        for (i = 0; i<upp_frame_size; i++); o3 g1 r" O: B3 s( K! D* h( ~  K4 ]
        {( ~  w0 a: x7 v* `6 D! l. V
            if (upp_buffer_a != upp_buffer_b)
$ v1 A1 r0 S& @- s            {
) w+ }4 y' ?! r                upp_error_count++;9 D% c2 W- y. b. n# r- @
            }, D' j% ^: J) n
        }! o2 {( j( _% v  d2 @! e
    }
7 @% ]0 S5 C+ O; Z, N  w" B* Y5 }
    /* 报告通信结果*/
& f' O3 [4 a3 [' w    if(upp_error_count != 0)
$ ^0 W: p; K. G- c        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 |8 a. @, d! Z8 E5 T# N2 E# A6 d    else
5 j9 h! a% m' T2 U2 o2 I! g2 X        UARTPuts("uPP transfers complete!\n",-2);
' O0 J/ b. e* X& f  Z/ _8 C% C/ d; i9 b& m1 u
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ _7 A% a. M- f% N! I
    UARTGets(ch,2);9 E' w1 A+ E. Y4 h
    UARTPuts("\n", -2);* k3 f6 u. U" J  W0 l3 }
" M6 A+ r. W9 T+ b* Z2 w7 C9 f' l  f: n
    if(ch[0] == 'y')
: S5 }7 C. s' i' K6 [3 ?    {
0 D& _  X! n% j: i# E$ I4 K        /*打印全部读到的数据*/% O( Y2 {+ Y4 N5 S% p
        for(i=0; i<upp_frame_size; )
* K) D* s$ b& D: v8 y  n        {" U- G0 K) ~, V# q) b% j- A3 v9 t
            for(j=0; j<5; j++)
- `7 H! l3 y9 c) A$ T            {5 M: i, [) n& P
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
' g1 n9 |+ k. e  K                i++;) i' @% h3 n. V* f, X
                //if(i >= 4096)
* K- [0 B1 w+ z, V( W                //    break;
" K& R: B/ o! Z5 H
5 r( t, W: @: E3 j& X            }
& s- R. ?8 R" h/ g" c0 |            UARTPuts("\n",-2);& G! g' m. Z1 g; }3 L( k8 v3 t2 B
        }* n9 z0 r( g& h
    }$ o% B/ K: `+ l
, v$ E  D$ r# d/ A& [
}
* n/ e% q2 M$ }" g$ ?
3 J- Z: [" x' a

2 N7 u# B8 X  @# I
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 @" `+ T6 z$ k' G# z
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( t% x& {4 U4 I2 \4 b





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