嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?3 a8 E4 y7 {% D, n5 J
Void UPP_TASK(Void): r5 F# e2 b+ {# p) w: B, u" l& B
{. S# n! g& u* D# z5 C8 H: K8 N* x
/ D, M$ n! E( L+ {1 h3 d
    int i,j,k,target_int_count=2;
4 B( a4 o* s9 S" C    char ch[2];( M3 V4 ^( G5 `! s& K" H

7 J1 c" n( {  b3 o3 P2 y% v6 x+ `
+ ]! S! G/ {2 y, K
5 ~$ Y9 i+ R8 k: @    upp_interrupt_count  = 0;3 e. T1 o0 l/ L$ Q
    upp_error_count = 0;6 g5 n( _% k( u4 I/ g; M2 _
/ z- ~. h+ W& R3 D
    UARTPuts("\tResetting uPP buffers...\r\n",-2);! R0 l1 T- C$ n! a) h
    // Initialize data buffers5 o4 D8 T  x+ \0 c* ]' K  J* S
    for (i = 0; i < upp_frame_size; i++)
1 I/ f2 h4 W5 K/ _: Q( r    {* K) v1 }: [5 u0 [
       upp_buffer_b =i;
- ?* d9 o- e" n4 c8 X" p* e0 ~       upp_buffer_a = 0xDEAD;
( W4 i1 r9 q) s& E( }1 Y    }
5 E; L; L2 X" D& E4 R) S9 l
* ?, ?: ]3 [6 @( U) q# W    //for(i=0;i<1024;i++)
1 o3 z1 P: b: \    //    temp=0;
' W- m4 i; V3 |9 [6 k' V4 T% F0 `. [1 b8 @! Z
    //UPPReset();2 i! x: M/ {8 o+ \4 ~1 J
    /*启动UPP DMA传输*/: N. g+ h0 O0 e9 I/ u
    UARTPuts("upp_prog_dma_i\n",-2);
. ?$ y6 a7 q$ b) _% N" x4 E0 S    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# R6 a6 l( c' J  V" f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ N* X1 q6 I0 p1 b% c5 Z" E; H& y, a    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 R: e, l6 R! Z
( y: K# ]5 q; N2 M
    UARTPuts("upp_prog_dma_i\n",-2);
8 [8 L% f7 K) ~0 J  ^7 e# H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 Z4 d% @  P; s* o; I    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# `, i/ y" I9 E; h- Q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 n) V! W- \  y3 Z2 D$ y4 b

: g6 ]8 D4 q5 i. S6 \    /*等待UPP传输完毕*// q) f1 Q9 [4 {$ L
    //i=0;. C' L- r! x3 m$ o
    //j=0;; v( M4 F+ I3 D3 x9 S* [
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  |& S$ X2 k) i# C2 Z' e6 v; a# f9 n& E
    {' p) {: D) |9 c/ J
        /*  测试UPP传输的同时操作普通DDR数据3 ]0 Z% @+ P3 r/ g* n3 _
        temp=i;9 Z: F+ H- a6 P2 F1 u0 N* X' S: J8 m
        i++;
% p5 d( e5 V! p- H0 q6 j" z, }        if(i==1024)
) T! h# ?7 {$ i6 J) D! k        {/ k/ `2 K& V6 E/ C  I
            i=0;
* a3 ~* \7 T1 {6 h0 {2 A            j++;) _) C& L$ A8 S+ s: S1 @
        }3 n8 D; Z* r9 b3 X" B5 |: `
        */
/ o# a0 }! `$ N' \8 ]4 c
7 A6 m4 F3 U! F% m% {       asm(" nop");
( l! k$ w. G2 q( T$ |6 r
) z# l$ Q- l$ r% M       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);. r  p' d  h2 `; ?  K
    }
5 Z+ `1 d/ S0 R  v" g; P' V
8 p1 q+ v1 B4 |' G    /*检查UPP传输的数据是否正确 (loopback modes only)*/! {9 J" k& U9 ~8 N' l
    //UARTprintf( "i=%d\n",i);$ [( V7 G# [: N" m' b
    //UARTprintf( "j=%d\n",j);  j( e. a6 S5 u) s2 [5 z, A+ w
    UARTPuts("Data mismatch in buffers.\n",-2);
2 O+ O  F' y1 W" x: \    if (upp_interrupt_count == 2 && upp_error_count == 0)
" J: b2 q: _( p0 F/ g2 L/ B4 u    {
0 Z/ x) p! E7 u8 H6 `! `        for (i = 0; i<upp_frame_size; i++)
, g/ m1 t$ p  K        {+ @, X: v# N* ~6 B$ k. j8 _
            if (upp_buffer_a != upp_buffer_b)
" O, n0 ?7 w+ g$ v6 ^            {0 z# i' C2 p" @% D8 B
                upp_error_count++;
  E0 ~5 o% @1 c7 u% a/ }" i            }' P) A! q/ [( l3 B/ c8 `6 q
        }
" c; e& u. @. `2 I. C; e    }
) D, D" t$ O+ `& I3 ~2 w) K- x. ^8 R+ j' A
    /* 报告通信结果*/8 ~5 i6 x; @9 {. O7 m5 F
    if(upp_error_count != 0)
5 |" l, P. n( ?        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 I, _) f0 b) c! r8 W6 j" ]* D
    else
) v! h5 c$ q9 D  @/ r        UARTPuts("uPP transfers complete!\n",-2);- |9 @8 Q- d' Y9 D$ V
" o- j, }! c8 O& n
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);, D" R4 g1 c- ?1 m" Z9 z
    UARTGets(ch,2);( L/ c3 x# \+ {, X* X# B3 }" |
    UARTPuts("\n", -2);
* B9 Y% j- `1 b' u/ B) p+ h2 u, O: `  R! N
    if(ch[0] == 'y')" n) _! x6 J! l  b, r& C9 U8 @
    {
& `2 R8 I- m3 O3 D1 U, l+ y2 Y/ L        /*打印全部读到的数据*/: N( d$ \3 @5 h& I* F' J! I7 c
        for(i=0; i<upp_frame_size; )
) K4 I2 C+ h' v* F$ P) R        {
: A/ U2 n6 z6 t' U6 Z. F- q            for(j=0; j<5; j++)
4 j( b  j5 g( b" o" |. `& L4 ?3 A) y            {
3 f1 P; r$ ^+ W" h! R: n                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
+ s0 n' _3 A2 P                i++;
1 v- s6 N, f1 u4 p                //if(i >= 4096)$ o# u: I2 F3 f8 p9 c- W
                //    break;7 |# F; y0 w' Z8 u+ g3 L+ u- H) S

" F4 p. w3 S# V            }
4 z/ Q* @, c5 {+ {5 I5 s            UARTPuts("\n",-2);8 t% u, Y% W! b0 _1 \% ]
        }. _7 R0 N# L3 n& i1 j
    }! q/ Z% V1 h& w$ N$ o1 E% \7 W

% }/ F* Q& N2 R9 [. K}
, |: @( O; @- m

! X) |7 |+ B1 n' ]4 @/ g0 k& k9 m9 d* {8 E1 N! s- ?" k1 c  q

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 u/ t  U3 r0 K  T  c8 u7 r2 n! g

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 f- O0 f2 ?9 s& ]# f




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