嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, w  Q9 C6 A7 x2 X6 A7 N1 o
Void UPP_TASK(Void)
9 C; f6 |  n0 W  D* u/ @{( A3 l1 m2 R9 ?5 S
1 `$ `# B; R, [5 A) ]- |# @
    int i,j,k,target_int_count=2;; s9 d- ?# r+ P7 J2 U  F( {
    char ch[2];
' S. |4 e' J" ~6 T2 U9 T* A5 l# ?: S5 p4 C, Q

' z$ @' g0 F& g- J* B: k- ]
+ e8 R- c4 F9 d    upp_interrupt_count  = 0;& N+ |4 V0 k0 c# ^7 t  M- b8 l+ U
    upp_error_count = 0;+ j  P0 m0 p6 G; m7 c7 V

! Z7 M# d; ^/ w7 q2 u" U    UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 E, I7 A+ P: b9 H  A! g    // Initialize data buffers  g4 |% T; s5 E8 n
    for (i = 0; i < upp_frame_size; i++)+ I' u0 u! W) p* t8 M9 x0 ~+ a
    {! ^" f8 p( b$ w% K% q$ d
       upp_buffer_b =i;
" `) F' H& V. B3 M& g3 p       upp_buffer_a = 0xDEAD;& A+ l- @4 q* ]( y% E/ D( ^% z
    }
& b% @4 w$ q" |! o6 C0 U. s' R  E+ k( u9 m4 h# Z
    //for(i=0;i<1024;i++)2 B7 k& E6 ]* Q
    //    temp=0;
4 C) p7 j3 T( X6 g0 s% R& G; O$ X/ n7 |$ W% ?
    //UPPReset();1 i9 k" J5 Y  h. M5 r: ~% ]! Y
    /*启动UPP DMA传输*/' k- x7 B5 r0 d. |' Q
    UARTPuts("upp_prog_dma_i\n",-2);( @- c; {3 m! z& U, A
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! Y7 N" G* \' r3 a  O& f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! p2 o, E" e2 B- S2 i2 x
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  k: ?, D' T/ ^: z$ |3 m1 j" T$ U7 |! `% o6 z0 r; ~& Q
    UARTPuts("upp_prog_dma_i\n",-2);
7 v  k# ~$ C& L: U0 R' E+ N+ i    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! T# ~5 j% y! T: G9 X
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  j5 j% f6 C1 {5 k9 _% @: [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);& C2 r; c* s! L

0 K- B8 T8 n0 a9 N4 T4 d    /*等待UPP传输完毕*/& U# U4 q/ Z: a( f& B9 i5 F
    //i=0;
" G- W0 \, }% B+ [9 f4 [    //j=0;, m, @0 k# ]" R4 U* r
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% ^8 G3 T1 k& }+ ]
    {
; G3 w# x( _+ M! m0 n/ `        /*  测试UPP传输的同时操作普通DDR数据
; R4 `1 u$ _) h+ \' A7 q! a        temp=i;- w# M" k( `! x: X6 X+ ]  A7 P
        i++;
; A) o( |: z4 o7 c        if(i==1024)+ R! G# m6 d# s; \" y
        {! l* Q! o( u# [( [0 |5 ^, A" B1 u3 I6 V
            i=0;
, e* Z" ^+ B$ }+ Q            j++;
" C* v% ~" v9 |$ i7 ?        }
: b. ~# q& v& d/ V: |& x( K+ c3 D        */
. I* s8 O( p2 h. S  n2 g6 n- K  [$ U1 O# y4 @8 J9 D9 m; J# O
       asm(" nop");. V0 T; }" |& ?, W! K

4 ^) B7 \8 n3 X* ]: s" i- |       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' t+ Z1 }: q( J, x4 A4 {    }
; J0 s4 d8 L/ V( p5 w5 o9 C; x' E( g) l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 i) p8 n; w/ `2 Z3 @- ?9 B
    //UARTprintf( "i=%d\n",i);
+ [& v: S# D6 j3 T! M5 N    //UARTprintf( "j=%d\n",j);
' b! I) U9 g7 `: E$ g    UARTPuts("Data mismatch in buffers.\n",-2);2 y5 z- c3 u% g
    if (upp_interrupt_count == 2 && upp_error_count == 0)
/ t( A5 T  B$ C6 n+ K    {
) h) w; o7 ?+ U2 }        for (i = 0; i<upp_frame_size; i++)5 o$ ~' C2 K1 ^( X; i
        {
# V5 s  ~% q. i$ p4 F- Y            if (upp_buffer_a != upp_buffer_b)
6 G; R8 O' V: Z( U/ ^7 w            {* C' G  P  ]. t5 u# |
                upp_error_count++;1 I2 t3 c- ?- e+ M) Y. t, o7 Q
            }
9 Q8 ^  P8 S" E  K3 h4 k        }; X; ]. c1 X+ ^+ N  {# T5 J
    }
4 G; a) C' w# O) w* T! H1 U& y: J: |/ @6 I
    /* 报告通信结果*/
  j, ?9 p0 _; _+ s2 G    if(upp_error_count != 0)+ k, E+ {! `2 H
        UARTprintf( "upp_error_count=%d\n",upp_error_count);+ e/ M& Y' S, i# c
    else, A. C1 P5 b0 @5 d
        UARTPuts("uPP transfers complete!\n",-2);* p$ u* C, {0 o" D
/ h3 @2 V( P( Q: ~  Z* p6 U# w' l4 e
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& S$ c, |% P  c/ z# r    UARTGets(ch,2);
3 u- A. i8 I! X: _. s8 k2 `( T; I8 v2 p    UARTPuts("\n", -2);
7 R/ c. C3 s: P- }# c6 z% d7 N$ y" S- [- u
    if(ch[0] == 'y')
/ U* p& n  w9 N  f2 O+ W    {
5 S* {2 |* B1 \5 S. k        /*打印全部读到的数据*/
+ g: R; V: K) g/ S$ H' i        for(i=0; i<upp_frame_size; )4 p: Y( C. h0 F' w
        {9 }0 p$ O  @% P0 k# p
            for(j=0; j<5; j++)
9 _3 e( A+ u/ \            {% n/ Q- `2 O9 t$ ]
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 r% ]: W  P$ _3 A
                i++;, [% r/ P) x1 C9 i1 r
                //if(i >= 4096)
: D3 p0 _4 Y0 U. `3 y                //    break;: m$ @2 Y3 l. I4 p# V, i8 U
7 Q1 f/ P) Y) U. P# V
            }. S( V; q. Q" b5 H7 {4 m) l/ c% O* N
            UARTPuts("\n",-2);
6 ]0 S2 Q5 d3 ~) _        }
: D$ A6 o! e) _    }
( z$ W# O- ^% l( ?" P; B! \1 f3 }' g" a
}

* {3 ~7 k# G6 s% u+ i
, c0 T2 ~, m0 p' [9 M1 z3 o

: k* y5 v- m6 [+ c% W6 W6 Z% I
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
  y* F# |/ ^( j# ?4 e
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 W* G9 e" I5 B




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