嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ D1 o/ U! ?& s. d9 d
Void UPP_TASK(Void)
3 `# Y& j5 `. ?1 B- T! N{0 S8 r' O+ p7 l1 e

3 R7 m3 N. a: ^- x$ e! l! ^- L    int i,j,k,target_int_count=2;1 @) y2 U: q5 i/ |& |4 V$ w- y$ X
    char ch[2];! E6 c  x2 I+ t1 g& S

+ Q. ?6 {0 v8 n8 K) f7 h
( E5 r: r9 L3 s8 Z* o* j7 l; m+ }( `9 g4 W
    upp_interrupt_count  = 0;7 S1 i" ?4 H. ?- R& W0 U. ~5 s+ {
    upp_error_count = 0;
* y/ @0 @$ L1 U1 }+ L0 B
/ T/ A- l; K  k* y    UARTPuts("\tResetting uPP buffers...\r\n",-2);) f% {7 Y  q' a. Q1 d+ @! S# z
    // Initialize data buffers
* ~% I- K, U. i. q' s# b    for (i = 0; i < upp_frame_size; i++)
; I- N" F, B! k8 B6 D    {7 j' p; f7 f: k  p1 ?5 c% l+ Y
       upp_buffer_b =i;* Q7 ^: r- t, {( w2 f9 W
       upp_buffer_a = 0xDEAD;0 ^. _9 O" @* f' ?1 W% m$ W
    }$ V8 D) o% i. q$ X: f( r
) B! K& j4 k! G7 S6 _; j7 y: ^# \
    //for(i=0;i<1024;i++)
  f8 F8 R/ t  _8 b" X) H    //    temp=0;
7 [7 y! L+ n, ~5 ?5 x
! ^1 z2 M. `) g  P    //UPPReset();
2 H1 a/ p) r- d- j    /*启动UPP DMA传输*/
$ F0 `' k" y3 ^* S: U    UARTPuts("upp_prog_dma_i\n",-2);
9 F" Q5 {$ Z6 l    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 O( f2 Z1 v' ?9 w3 E. k5 O& X    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, y/ [6 z- t& U8 ~- a) H: M6 E
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' v+ n7 N& x9 p+ u- P, L+ h7 T

; \- v' k. T# D& d    UARTPuts("upp_prog_dma_i\n",-2);
5 o- A( E1 o3 q& z9 i. c    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ C; s( _/ H; [7 I3 h' ^3 x' a
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! a5 ^- `3 N. L/ B. i
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 f- j8 y; W. e% w( ?- B* M

8 X3 M) u. u$ R7 ~5 k% g7 q    /*等待UPP传输完毕*/) l' V0 b/ M5 K8 B" x2 e' w# o* X
    //i=0;, H3 m( v) p3 Z" n
    //j=0;
& b& b+ ?9 j1 V7 K4 f1 z/ T    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* O& n2 I. c& S4 d. Y) o0 ^
    {
9 G( l7 a" r  b( W. U. T* M        /*  测试UPP传输的同时操作普通DDR数据4 c; I* c2 D! B* S" M: e+ J! V7 d" T
        temp=i;7 n- E5 {' \8 R% P" u6 y
        i++;
# d: y( a$ V4 H9 o7 R! W! u/ Y+ k        if(i==1024)4 O. K' D% m* }0 y
        {' ]9 |! |) q! e, ]# y5 b
            i=0;& W% P& s/ n. ?- d# w5 F
            j++;
: v* z7 Y7 W1 K3 v/ r3 y: U. `        }( h) E  N0 M- s! w2 g0 Q5 ~
        */
( ^1 _9 W( l2 c& h3 c6 ^7 [
. c# T& t; g4 `( k. [/ R" ~. e7 p       asm(" nop");8 J( I. \! F! k
1 J1 ^7 g! p& S$ u" l0 D0 _
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% Z9 M# K% U  M! a1 h! w  j$ j
    }
, R# W- v: V9 f% ^2 f- o6 V- M
& v/ E5 C8 }9 [* E9 m2 [9 j1 j    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ S! F. B8 }# T' c3 c; i" d8 E- P# ]
    //UARTprintf( "i=%d\n",i);8 d( L4 D. M! M' Y0 F) @
    //UARTprintf( "j=%d\n",j);" M1 q, W( m9 D
    UARTPuts("Data mismatch in buffers.\n",-2);0 {( @4 A7 T& X5 I
    if (upp_interrupt_count == 2 && upp_error_count == 0)
" w7 r6 ^, }1 k+ |( q- O& W    {& X; S" N: G6 r& v. v  ?  @1 u
        for (i = 0; i<upp_frame_size; i++)
9 m( s$ {# p% ]$ v7 S; v        {
# N, L: F) L" J            if (upp_buffer_a != upp_buffer_b)' L# d( z6 {' r& e- s. U1 Y& N
            {1 s  Q. b. F( x1 u+ G
                upp_error_count++;+ G1 v; n4 w4 w, J
            }3 D+ K; E- g' N, ]' b3 m
        }
% C( s6 b. b5 ^& e; t    }. r) ?0 E, b! h% X5 z. g
. J" G$ y5 O8 D, [: ^
    /* 报告通信结果*/& H: d$ l4 H8 z# l; H. p& T4 d/ s' D
    if(upp_error_count != 0)% J. o4 o) P) m9 e
        UARTprintf( "upp_error_count=%d\n",upp_error_count);' |" p9 t% P4 E5 u' X9 H% n
    else4 P( y: D6 x3 N* e+ d# S* \
        UARTPuts("uPP transfers complete!\n",-2);" K8 o4 l0 F4 s- z1 I0 p- s& B

- @* x8 z2 m1 M    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) h  {6 I3 m* u+ I/ e8 B    UARTGets(ch,2);
% T6 S3 Z! ?5 a1 A9 D) H4 L. f. @, q    UARTPuts("\n", -2);
3 q- D" `* q& x) a1 x
4 X) h0 }0 G" S0 Q- M. V9 @2 V    if(ch[0] == 'y')
, I: S" {9 F* u: b    {
( R* |) F) W6 E  p        /*打印全部读到的数据*/
( R/ K. t7 N  F0 M8 i3 s- t! h        for(i=0; i<upp_frame_size; )5 e0 }) e) A7 o" E
        {+ m. o: i' K: r* d  D7 r# M
            for(j=0; j<5; j++)
9 e) F2 N* }( l+ z$ U2 `  h3 C            {5 o3 N8 H8 C7 {3 x) X
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& Y3 u8 B* v) p/ [# Q
                i++;
. p9 P! g" _- \$ ?                //if(i >= 4096)
: c8 v- Z" }' m2 I0 K                //    break;7 P( k7 h# @5 k! |& n5 N9 t

( Z, z1 q+ x$ w* @, E            }
4 V' z% ]9 c7 D            UARTPuts("\n",-2);/ y6 B8 d  h( Y
        }
  p4 e7 I; k7 U. D& y3 h7 U    }; {/ z3 y" W8 B; r/ x
, t: S. h* L1 s; C3 o, L. P$ x- T
}
- j9 c! \4 \9 s& l( T
9 G1 s# d. @1 s5 l0 p) D# N: B
( {) I6 ^4 m& o  l

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. X% b5 \. ^) \" p' G( L/ P& P

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: Q: D" u8 n' O/ U; D




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