嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: z8 y" J5 T2 H/ L
Void UPP_TASK(Void)  b. r% W# O0 X$ X
{
+ i1 ]' a6 v- M. M; v8 O$ k# A! e4 q8 V* l* o6 R
    int i,j,k,target_int_count=2;
1 M+ `) R) o8 G5 G  s5 d5 b) M, C* p    char ch[2];2 W4 ~4 Q" y& h9 {* z/ C

: u, l* U# D2 t$ L4 P- O" e% H# Y; e% f& @, a

9 ~  q$ }0 D$ o" G: ^+ G: _' [  p    upp_interrupt_count  = 0;) B7 Y3 |8 x$ Q* ?) Y3 D
    upp_error_count = 0;
6 A# V, \  K" M: ~+ S# q: d9 T7 \
7 _* j0 K. N. D' V" }& T/ y! H* V    UARTPuts("\tResetting uPP buffers...\r\n",-2);! e) i1 v, g1 @# }
    // Initialize data buffers' u9 M- o$ Y  [1 S2 d. v  _
    for (i = 0; i < upp_frame_size; i++)! A8 d3 s; y7 @+ D, I( B. w/ i
    {
- X9 F9 U! Q& {/ U2 s       upp_buffer_b =i;
% B4 R! \1 g$ k       upp_buffer_a = 0xDEAD;; j! w5 l7 L. ~
    }/ J1 [  w( f& x$ j
; \  X& {- S# Z
    //for(i=0;i<1024;i++)  i. s7 E3 j$ s. M- e( e
    //    temp=0;
( m3 }% J5 {% r$ ^, W; @  S2 X, y2 N! S# H3 c+ I
    //UPPReset();
+ M( {) S$ c1 V: \3 i" U6 `    /*启动UPP DMA传输*/
; d8 n! y. i  u1 w    UARTPuts("upp_prog_dma_i\n",-2);6 U7 h4 O# j3 ]
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 T+ A% l. F$ W4 R( p0 A0 F    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, T# U# a' A7 d& Z6 E) Y( Q1 l& B
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 d! i, p$ T& }( `4 O" T0 K% X( P2 q  N" F
    UARTPuts("upp_prog_dma_i\n",-2);
8 I2 L, B; B4 D) e* z4 {7 F    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;3 ]9 x+ {% S$ O& ?6 g9 _5 O
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: {* v$ d  y  t    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, g% z4 b: }# p/ X- ~- ^2 P7 Q* t, V5 J7 X: x2 d8 M- q) S0 A3 x
    /*等待UPP传输完毕*/
' S% L% e2 T9 H4 a5 d% }* x    //i=0;
9 M2 f6 M. M2 j8 U& B; C    //j=0;
7 |- y9 \, ^$ H. N6 C    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 k( P0 q& F. T) d# v    {: V3 C: ]" X/ Y! n, e# z+ G& y
        /*  测试UPP传输的同时操作普通DDR数据8 P8 w, G# g' g$ X; q2 v
        temp=i;% a0 y; S0 F0 Y, ]5 Z( I
        i++;3 G  s1 K* l* R9 m' O+ _
        if(i==1024)) t, ~3 _6 g. @* v
        {
0 {- \# P* G- |            i=0;
4 w' Q% ^1 Z" A5 I+ T7 U$ w            j++;  v) q' h7 o) c
        }
1 N* ^9 `0 p  m1 C0 ]1 Y2 }: O: p        */$ L  Y1 C3 e3 n
: Y- @0 `! `* Q" X- S& k
       asm(" nop");) D2 H* p0 A1 t! q* ~5 n/ |1 ^
& c! M# L* L4 e
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" X; B1 F; D. k$ ]% X) W! j. v0 G/ S
    }
* I2 r1 S+ z) a6 w1 k$ ~. r  w5 T8 e
3 B3 W+ D' v. l' Q: w& z    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 @5 q: H/ _* u: w6 L$ n5 ?    //UARTprintf( "i=%d\n",i);
  R0 x+ W6 R2 N7 \    //UARTprintf( "j=%d\n",j);
% h: h1 u4 Q7 }9 c    UARTPuts("Data mismatch in buffers.\n",-2);" b7 z0 r# C0 j& U6 G
    if (upp_interrupt_count == 2 && upp_error_count == 0)9 l9 x5 C' C6 F& e) a# R; |4 D& b
    {8 X! O1 J: H$ t$ ]8 p+ H6 g' Q2 E
        for (i = 0; i<upp_frame_size; i++)
9 C( g+ @- P4 X, n( R. k        {
8 j) l% q$ E: j            if (upp_buffer_a != upp_buffer_b)
# s0 P; d6 K" t" x* G            {
/ b3 |4 Y7 C, [0 q9 M! g                upp_error_count++;% ~, `! a5 Z+ j1 V6 X4 A- A( l! A
            }
/ d! }! i/ o+ j# u( n  t3 A: F( ~: R* ~        }$ G. X& I5 X* X7 m2 ^. {3 R# C
    }
4 O- K: y  G- P+ l
3 c3 Y4 q+ d9 t* C' S    /* 报告通信结果*/
% Q4 F# `) I) t    if(upp_error_count != 0)! S4 v, m' V9 j+ I
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 ~7 @7 l& m5 Z- x    else
4 D6 P% a8 g: \        UARTPuts("uPP transfers complete!\n",-2);! v4 g! d* I3 P( c0 l/ Y. w
# `! w2 m0 b9 l! d/ [( X
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. h( c5 c' u& K
    UARTGets(ch,2);
$ [, t# j; F/ M9 O4 j    UARTPuts("\n", -2);
) s4 g9 ^; u1 j+ D2 ^
* R, s& ], Z7 [0 ^7 R    if(ch[0] == 'y')8 `5 S3 Y& f8 S: B% W5 a
    {" J7 U( P. m$ y& l' L$ S
        /*打印全部读到的数据*/: `- w; B0 m: [% g6 P
        for(i=0; i<upp_frame_size; )
; Y2 T; X& K: ~, i  u        {6 o# _! H$ E1 K. o
            for(j=0; j<5; j++), i4 D2 `- d5 y: n$ C1 k% F/ u* g/ q
            {* Z9 a0 _4 f8 [/ H, x9 Y) `% s% I
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);7 F( j9 b0 [! P! C8 G
                i++;
# @% h" ]% s! S' {                //if(i >= 4096)
/ x8 D( O2 k; U+ A/ Y8 ]                //    break;( g3 w3 e9 Y5 q% u, m. f
  H2 E1 Q/ E! \9 W# k' @
            }
" Z9 t4 f8 s. ?$ s7 L            UARTPuts("\n",-2);
- F2 b! }6 {7 o+ W) _        }
" \# g  f6 j+ w; [    }
  U- U# U' V; Y! F0 s9 f
, |" {+ c  M- S, V}
+ Y; A5 R6 D' ], L. m/ j7 a
1 H% Y. Z7 A: O% \$ Q
8 R2 {. X6 W% N6 c( T

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 h$ u# k0 ]* {9 b6 t0 m3 y& R6 w

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。: H/ S0 r- U3 H





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