嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?. E& s+ r* \/ |9 L! F& G
Void UPP_TASK(Void)
5 W6 R" O9 b- P# B{6 v# S2 T; c" S9 {

% L  a' c, ^$ i% A    int i,j,k,target_int_count=2;
2 z3 L, b# q; c; [. {% x    char ch[2];
# T8 ?; i2 @( o2 v
( K( I* _4 ^5 S5 ?! @7 M
; \1 T3 H2 Y& j) y/ e7 @. N$ a/ p1 u! U7 U6 I
    upp_interrupt_count  = 0;
, P; \3 t) b. ?  _+ _* p    upp_error_count = 0;
! v9 q6 j; {4 B7 X; \4 u7 G! D% R
    UARTPuts("\tResetting uPP buffers...\r\n",-2);1 `  u# j; ~" l
    // Initialize data buffers
: l# ?8 }1 R+ V9 J    for (i = 0; i < upp_frame_size; i++)
2 Z, n; y' v8 P/ q' o    {- _6 ~3 _9 L" w' L
       upp_buffer_b =i;7 t$ Z3 @9 }: m: i* G8 W
       upp_buffer_a = 0xDEAD;
  _% h) \# l2 n, \    }* w4 j! s1 M* M! a& p! L0 y
) B/ k' K/ ?: w+ d* s0 `' y, r
    //for(i=0;i<1024;i++)! Z7 Q  k0 e1 D- m6 H
    //    temp=0;1 N2 N; u; C! W* n$ O: I( X
' ]( H, \+ B: ?+ Y, v+ I- s
    //UPPReset();4 }! g5 Y3 B" S" g
    /*启动UPP DMA传输*/
5 A3 k2 S0 I4 t8 j3 m    UARTPuts("upp_prog_dma_i\n",-2);! g, P. N2 b8 q  A. r% S/ `& r# |
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ ]" L. t+ `) b  |/ ^' o& f$ k
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' W% Q, E) w" g2 v1 Q, h; w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- J4 |. H* d" `+ l' Y+ D
) r. A  k0 b6 j; w* d
    UARTPuts("upp_prog_dma_i\n",-2);
( v2 O2 z) J9 |% |1 J    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: E  q: }7 X4 D' z8 U& S' |    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# {3 I& T9 C6 \/ {; o# T2 V9 x) M; g- F3 E    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( ?. P- {% e1 T% S. J; p! p( X

+ C0 u8 h# }. D7 c; X. o% }# s; r    /*等待UPP传输完毕*/
# p, l- a  J3 C" n    //i=0;
8 Z+ r( \: m6 u' h    //j=0;
/ |% K6 t2 Z4 ]  g3 K    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 h' H% N; q( O, ?. X5 Y2 L0 B    {
( y8 s+ _8 [2 L, _/ F8 ]# L        /*  测试UPP传输的同时操作普通DDR数据
, U6 H* {2 v$ m; E- x, P        temp=i;2 C' ?) ?# s! h
        i++;8 }% Q6 b, I& O& t) t* b
        if(i==1024)8 O& i8 Q7 u( L
        {
' k3 ^9 y  j' z7 `            i=0;
1 \3 A( d: p, G; I1 K/ H            j++;
. A* U! t, i5 b. w6 w        }
2 Q8 k- b/ m9 l8 y2 O$ ^# s& K/ x: n        */2 e: y1 _! b  s1 p
5 Y8 \7 R' |& H3 T* f
       asm(" nop");" Y. G/ i- E# }2 ^- _
- R/ a3 i, d# I
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. a3 @2 W3 ?  U1 o. U' B    }8 f$ v! d1 K- p/ L8 Q$ m# J
, A8 D6 |2 @* R
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
6 q) V! s  j) @0 J    //UARTprintf( "i=%d\n",i);" r' d3 M0 \3 _2 _% }; ~8 ]
    //UARTprintf( "j=%d\n",j);
) e/ C) P3 p( \1 ]2 q: [    UARTPuts("Data mismatch in buffers.\n",-2);
: _7 L" Z. T+ ~+ {. g    if (upp_interrupt_count == 2 && upp_error_count == 0)
: c( T: U7 w7 [" u    {
5 {$ l8 D" g- j. {7 y5 j! U8 y1 f: O. a        for (i = 0; i<upp_frame_size; i++)
- M& t6 [3 Y: i2 x! @! Z        {
0 V( A3 s2 n. Y  U$ c            if (upp_buffer_a != upp_buffer_b): @# V; M. P# ^4 B/ x
            {
2 ~4 [7 {7 N" Q* {0 B                upp_error_count++;
2 F9 i4 s, N, G) l3 \            }
8 [( ]1 J8 g. A9 M6 T7 ?        }
5 T7 c# a0 n% o* h( U: N) t2 c    }
0 E+ P( N* Y, ?5 R- E% Z5 A6 u$ y6 [) b: R
    /* 报告通信结果*/
8 c' L! j( o* Q: I    if(upp_error_count != 0)
$ `2 q$ J3 F# C) G. D        UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ \" k0 @- r  }8 L    else3 F' X- i$ ?; c) t1 T
        UARTPuts("uPP transfers complete!\n",-2);* ~5 o1 ~! O3 j# ]

' J5 @6 B1 P+ T: p5 A5 y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);9 X7 @1 \( ^9 D
    UARTGets(ch,2);
) A" e6 l  |9 X- T    UARTPuts("\n", -2);7 `6 E& Y; T( T6 t

. ^6 [9 f' Z' H1 `0 e6 r# Q    if(ch[0] == 'y')
0 L6 O3 x- m0 K3 B/ {) V- ?2 s. E    {
  \! B. \; R- s" g1 b        /*打印全部读到的数据*/
' D9 b1 i. T1 p        for(i=0; i<upp_frame_size; )& b" g, Z) c$ Q3 T- u
        {' e' V2 l! y) x5 m5 i- ~$ ]) a
            for(j=0; j<5; j++)
7 N! w. F  I( w/ f$ ?            {' Y3 h, l0 A) w* {
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# U6 u7 k" K  H3 u: I$ v# A                i++;4 |0 g% g5 z+ O% {! x8 [7 }7 }
                //if(i >= 4096)
; }+ @, ^6 Q. v: n, z" \9 p! K                //    break;! E$ g0 ~+ I  y, u5 K

) \' A3 J  F( l- x3 O  ?4 ?+ }# K            }, S+ B/ a1 `$ z/ K
            UARTPuts("\n",-2);! ]( |; Q" v+ H. Q2 b
        }3 m9 M/ e  J3 M
    }9 z4 T. T, G0 w& o

' J% @3 ^9 J" v7 x  V+ R}
. v/ i& G0 X! I9 Z
- z# G# ]0 _: R

+ G! J' @: w# }8 m1 `
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 C$ ?7 I- i3 x6 a# a

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 N& ?# F+ n4 C& F




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