嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ ^8 l. y0 b3 F$ T% ^
Void UPP_TASK(Void)
& j7 G+ T  F7 C( F" |) y/ q{
4 w1 u4 x+ O8 O% i0 C: m0 s: g' w) x( D# X2 \
    int i,j,k,target_int_count=2;
: R' q; N! Y* J* [5 H    char ch[2];
8 m1 q8 C& I, e6 R! u1 ^" R! s0 X, V$ b; D" f2 g% x: Z
( w- s4 ~& J. y) s; q  p" B3 V

( j( g8 a  y8 c9 ?" B    upp_interrupt_count  = 0;) A) b- m" C3 n
    upp_error_count = 0;
9 U- _, c8 G2 Q: \2 }* t! w! Z' |: x" x( E  B, K1 H. l
    UARTPuts("\tResetting uPP buffers...\r\n",-2);! O2 t6 D* ?3 A; K4 ~6 u* X
    // Initialize data buffers
; z  _3 [3 D# ?/ H2 h    for (i = 0; i < upp_frame_size; i++)* F1 Q: o4 N5 h! V
    {
% m8 a+ ~5 H4 [- k1 x       upp_buffer_b =i;
. ~4 D3 @3 C/ |4 u+ [5 D( i: q, j       upp_buffer_a = 0xDEAD;; `' r& E* w2 ]9 T# K$ ^- a+ T2 V
    }
9 d3 F# G- Q, ?* I. b( ^0 W+ s% E9 _% l1 e
    //for(i=0;i<1024;i++); ~0 F. ]1 F+ @( K! @8 c! O
    //    temp=0;3 J1 {/ O7 q- e
5 ^8 f; n8 W2 B& n) H5 \% L
    //UPPReset();$ R1 d5 A5 U! g- d& C
    /*启动UPP DMA传输*/8 h- k( Q: w8 A! c4 Q7 I! |
    UARTPuts("upp_prog_dma_i\n",-2);
5 @. H. J! Y  V) N% B# n# Q  y    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, ?% o( B9 S9 i8 l- S# x, P8 T
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# P' g5 [' k. A$ K4 ^5 o' R    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% n) {% y; `# C- L2 O+ I, q. R6 E& k9 W
    UARTPuts("upp_prog_dma_i\n",-2);7 |4 m$ d7 D/ W% D7 l, I/ S+ C0 {
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% L& @" N  B( {0 x1 H- x2 o    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* H7 [/ J. X7 b/ N/ X8 [& f  e    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* S: K* u) e1 u! w
" b( @$ q4 H4 Y
    /*等待UPP传输完毕*// T, S' V/ T9 L4 Y, s% Q% C4 N
    //i=0;
* v0 S. V6 C7 Q    //j=0;
7 L; f: s* S2 S: [! ?" a) G& ?3 H    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 R7 j% D8 A" y3 o& f$ H; e    {
  }& |$ v1 S2 x% w        /*  测试UPP传输的同时操作普通DDR数据
* x6 U+ s6 \" a        temp=i;; V: J" ]' x& H5 t
        i++;, C  F) F4 i5 {0 g7 y9 b
        if(i==1024)* H  ~* l: A2 p: \
        {% O0 Z$ c) m3 C* V$ I# K
            i=0;
4 z% J+ j& d$ f8 l; p- M            j++;
7 y% u( P7 k' G' R' Y2 P7 N        }
" }4 n  S4 L" a; s1 P        */
8 t4 A0 V: ~$ O/ |6 A! E& {
+ {6 I$ q* g3 j8 D  X       asm(" nop");
' c6 g: I2 P) L$ G; m$ E4 v
& R- R/ Y* R$ e5 S- A1 z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# p2 o5 g  V* B/ L. e! z
    }
, m5 c  t# E7 H; J+ S
$ ]5 m: F+ i) i) m; x    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 d* V: g. T7 a3 X8 l, o    //UARTprintf( "i=%d\n",i);3 I0 B3 w2 C. Q) N5 A% A: i5 ~
    //UARTprintf( "j=%d\n",j);) ]' x1 m( b, |  t! x% m1 E
    UARTPuts("Data mismatch in buffers.\n",-2);4 D& M3 z$ T1 ?2 l- t0 N  ~% j) i: ]
    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ M' }* p" F# F/ L$ }* K- }; T    {
. T' X% @5 |5 @) f" g        for (i = 0; i<upp_frame_size; i++)
0 e9 Y) c6 }1 t5 S) s( d& [! Z        {& k" R& r! T3 v/ C
            if (upp_buffer_a != upp_buffer_b)
0 _6 d& v/ n. {, P& N1 P            {: d) y* n1 C+ H  G! A9 t
                upp_error_count++;
1 f8 W9 Q' {& h. |7 J8 w$ h            }
0 ^/ a& G3 ]1 F6 H, f- H7 N2 T        }) e+ e% @9 ?& A/ S8 D$ b3 M
    }% m# Z5 F! R; _% j. s+ e$ r
% u5 ^+ p; T, T
    /* 报告通信结果*/8 I5 k" A' G  z( C
    if(upp_error_count != 0)
/ {0 Z; i+ Y6 [: h        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 r- k5 _- K' S2 G6 J5 F6 Q7 ~
    else
. ?9 A4 f& P# t        UARTPuts("uPP transfers complete!\n",-2);
* U0 L/ V9 ^4 h5 h- b  i
  i$ B9 }: h, l; Q& ]    UARTPuts("Do you want to print all the data?(y/n)   ",-2);9 w/ u: [8 K' Y' a% {" U% E# d; S9 ]
    UARTGets(ch,2);
+ _$ N7 B9 {) Y1 x6 o6 o- K    UARTPuts("\n", -2);
& L0 |4 \7 F, a) h+ V; B* t( U+ p5 _: \5 f, N
    if(ch[0] == 'y')9 p8 P" X* S; X8 ^1 I3 K! @7 h
    {( s9 P; s6 j2 Z# W+ o  }
        /*打印全部读到的数据*/+ }- l( m9 [: j  o
        for(i=0; i<upp_frame_size; )' K, d& _' B: C' j+ T2 Q
        {
5 h( U1 a/ o9 P4 Q            for(j=0; j<5; j++)
- o4 j0 C! ?3 W( e            {: o7 i1 e$ E& o" {& O
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# u: q& Q- {' G6 |8 h0 W- r                i++;) E% }' Q, I# n7 V: V; A( [. h
                //if(i >= 4096)
" ]4 N! N! T6 N, d9 a2 j                //    break;8 k! m7 T( a( G2 l

* o: V% U4 U# J3 y6 ~4 h            }
, ~9 `' I' g/ S4 l) t            UARTPuts("\n",-2);1 R# u% l: V. v/ ]7 h4 m$ V- t4 v3 f
        }, @/ `3 M0 e! V3 n
    }! k% F& m  L0 Z
7 ?) V+ G& ~3 N6 u
}
# J1 v2 o+ W, j  u( M

9 v8 |/ m; o) H. x/ N  I  W2 Q, C: y' E' a: \5 S7 A. @8 X4 D

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( q6 ~) _; G# c9 g% }
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* C6 v0 U6 L: U! X. Z+ a





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