嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, H, t4 m6 h/ B) u/ h# C  J: g
Void UPP_TASK(Void)3 N1 S* }3 Y" y6 H# j
{
0 |) [' p: Q  d6 m2 K4 k
& n4 j) v: B( w    int i,j,k,target_int_count=2;
5 k4 R& D6 S0 g6 v' j1 r: k    char ch[2];  _$ a& o( }$ r" ~0 b
7 f- x7 M0 i: U+ y; a7 t

+ S) K2 d5 K# `! Z6 [% _. v5 C0 {! R' Q3 A6 i8 Y2 i2 O' ?
    upp_interrupt_count  = 0;
  e0 L. i, x, J8 B" r    upp_error_count = 0;  q$ D9 ^  ]# b- h6 O
5 A* \! u2 o. W2 x+ Y) o1 M$ F  Z  Y
    UARTPuts("\tResetting uPP buffers...\r\n",-2);( ?8 p# o8 B' ~
    // Initialize data buffers% S" e( @8 Z8 \. K
    for (i = 0; i < upp_frame_size; i++)
9 ^6 N% ?* c1 I) S& ]8 g/ k    {2 u! Y0 M# T; z
       upp_buffer_b =i;
8 H9 Z) m( ?$ ^* p       upp_buffer_a = 0xDEAD;9 X3 |6 T5 Q# }6 b. H# \
    }$ n) s% z0 l, s8 I
& I( H2 \9 {  I9 ?8 f
    //for(i=0;i<1024;i++)
# _- k- h8 ^% ?7 {1 c2 ?3 P& V    //    temp=0;: Z8 y, z1 m$ b  W
; P- b  o5 J' o" U' J
    //UPPReset();
5 o5 j8 ?/ R- P5 |/ b    /*启动UPP DMA传输*/
4 @8 s" G9 t$ O" }/ \* @# g7 ~" |    UARTPuts("upp_prog_dma_i\n",-2);
1 v$ V9 w) e& [& g% s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;$ i% k* O4 ^, s* O. H: v1 d
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ A$ `4 z% U6 [) l
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) f5 L- @' _5 s% o
1 k; f3 W  L; w, g    UARTPuts("upp_prog_dma_i\n",-2);
( R) c( w) o0 i* c8 s! L    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& x- p9 v( x9 Y8 p    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, l2 ^5 P. T; d% `5 t1 l6 K  N
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# |" F: i, L4 M8 E5 G  D' l/ s/ V; }
    /*等待UPP传输完毕*/
  W2 F% Z$ e1 }. c) x1 u3 {' c    //i=0;+ P0 z# i- _+ ?# w1 K
    //j=0;
! F1 n5 f# B* k) k( q( B4 n# H    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) e" V; M' ^$ U    {
$ d; _1 \% H& w* W        /*  测试UPP传输的同时操作普通DDR数据# U4 o2 t* I  P) x
        temp=i;& e8 o. I# ]# H. ^* x
        i++;  r! C/ L1 b5 ?0 p' T8 B
        if(i==1024)4 R6 f. o; M' H
        {
$ J+ r( M$ H& a' i/ w. H) w) @            i=0;
! H6 ?& k; X, Z( i! ~            j++;
  v  l3 e- A. G- l        }
9 t. }2 D6 p/ L1 N; ^& e: H; }        */9 @- A8 j; I7 B, V& E+ C! d

! U$ R5 T7 M$ X& F& c( u       asm(" nop");
( M9 b4 y9 j: u) b" d0 T" _' f/ L# m7 M
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& N% L" S( h0 N; h$ e! f$ L
    }* n, F% Q: v/ l, E' l# R

3 |5 H( _5 h- r4 n; p    /*检查UPP传输的数据是否正确 (loopback modes only)*/! A$ s) c1 V% o5 W
    //UARTprintf( "i=%d\n",i);) u$ |5 o8 P( w& F1 ~  Y
    //UARTprintf( "j=%d\n",j);
6 x2 K+ a+ o0 `- W, F    UARTPuts("Data mismatch in buffers.\n",-2);% k% w- K2 d# g5 m5 @
    if (upp_interrupt_count == 2 && upp_error_count == 0)) m! ?* h7 A: ^
    {. x$ W' o8 E' y% P0 o
        for (i = 0; i<upp_frame_size; i++)  [8 C! y, Y* }. M: K& S" x# T
        {
  |8 c: i; D; s0 }$ d            if (upp_buffer_a != upp_buffer_b)
# M9 F! ?% e, J) k5 V) L5 _! x( c            {9 p# }% B8 ]% V( T0 X
                upp_error_count++;
! Y( Z7 D6 Z- W/ ~8 O* ]  z" Q6 h            }( _& o: u" I& ~9 T: S
        }6 @4 B9 N, U  {
    }+ c: y, p, W8 d# m
0 I9 k# E( w: u" d4 B- Q. `
    /* 报告通信结果*/
5 r& ^! z* f! w+ Z" M# ?    if(upp_error_count != 0)
6 s+ e8 w/ D, Z. w( M2 Y5 Z6 g        UARTprintf( "upp_error_count=%d\n",upp_error_count);# O5 l7 J; ^+ U0 Y  E1 |8 M
    else
8 |% M. n8 U4 S+ G- ^% n. \        UARTPuts("uPP transfers complete!\n",-2);$ m6 Q! \! I" W2 C
! G3 m8 B4 N8 m: M6 {0 ?0 c% _
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% v" W/ \; l" U# V8 a
    UARTGets(ch,2);# E6 T) H4 V  a+ l2 E# ^+ v- H
    UARTPuts("\n", -2);
; [3 K7 y( R* c' Q# t$ D
+ J& d4 l' e; j8 R    if(ch[0] == 'y')
# V+ a( X$ H: }9 D$ k- F. w6 h    {; E4 ?3 \& N$ L: l  l
        /*打印全部读到的数据*/
3 u' Z2 D& R& f4 D0 Q        for(i=0; i<upp_frame_size; )
7 ?$ a0 |5 N& _5 f4 p        {
. |5 t$ Q8 Y: n            for(j=0; j<5; j++)
/ _5 [4 M6 r! E& }. _            {
7 W4 f7 b/ {( H' |! I" t                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) \/ C7 T9 V0 E" j
                i++;
9 e1 [' H/ a) _" \! ~3 M1 D0 k" U                //if(i >= 4096)$ B4 d' K8 G' O; G# i# _& ~
                //    break;
, S- o# K) h! M3 |+ N. @% [  e# f# f! e& U
            }
% e7 x& |9 o. V$ F, M& H            UARTPuts("\n",-2);
8 i2 \: t# S4 i5 x8 Q        }
& a: [( C( ?3 o6 B3 }! \    }
* p+ `+ t: p+ {
0 S' S" E; \. j$ w5 K. I}
* u$ M: }8 H2 A  X* M+ g  x

' v; \, c' J3 h) F1 ^9 j
" L: `1 p  h* C7 ^
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! U9 Q  g( d7 v4 t/ I2 W

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: o( D) E3 }; L" @4 a# T( N2 t1 J




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