嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% G2 x9 t6 ^! l
Void UPP_TASK(Void)0 u8 V0 j. x  `! C0 Q! T2 i
{
+ O  a/ x  ?+ V/ c3 i8 Y" m+ x
$ T  J1 f% A, C0 @    int i,j,k,target_int_count=2;
6 C7 ]% W5 i8 L; l+ |8 m# n    char ch[2];
( }" _/ ^! P( p0 p, J0 C+ X8 w8 _; J9 n/ t: w" S9 M' S* E* S

8 H' k. Z) u% |- e3 \
! s1 {; v2 F* H) a! |) D0 I    upp_interrupt_count  = 0;
  f$ V# e0 g; X0 s- k    upp_error_count = 0;" O  f" N5 I/ m: n9 G
0 z. m7 {7 j- Q8 g
    UARTPuts("\tResetting uPP buffers...\r\n",-2);$ x6 @' `* i5 g$ d' b+ y4 v/ D
    // Initialize data buffers6 f% v: ~$ W* l$ \
    for (i = 0; i < upp_frame_size; i++)
4 B7 P/ g0 K' B3 ?& N7 h    {; R! ]( U0 i4 O* s, k
       upp_buffer_b =i;
6 W/ E, j6 n3 ^! B/ v       upp_buffer_a = 0xDEAD;
; A6 p7 [. \1 F6 m. C- ]* f) l    }
' `( t  S# v8 p/ i. d+ L
* t+ M# m; B' z8 N) Z( }( y7 ?( M0 Y    //for(i=0;i<1024;i++)
6 q; B  |5 t% a  N- O- m6 d  ^. I% `    //    temp=0;
1 u, T" L; \3 H3 x, F- m, Q, Q( _- R( i+ |, [. ^
    //UPPReset();9 ^/ A5 L9 n1 G4 o; X* M
    /*启动UPP DMA传输*/
6 K0 G* E% h- x    UARTPuts("upp_prog_dma_i\n",-2);  D- w$ y4 \! |9 l  X
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;3 }. u6 _4 k/ X" v5 c7 y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, I1 n6 Q7 F* F$ o) \( |" T
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);* Q0 S2 K+ S! r6 E, I/ h- @; p2 v7 _

+ D) w- X: F) j) {    UARTPuts("upp_prog_dma_i\n",-2);& o. s. [0 _: d' Y, x* p0 Q5 I( a
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' I- Z7 @* k3 @# a) G    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 e% Y: J  I+ G6 q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);, M+ [' y2 b$ w" ]& C' m
- Z; d/ `8 B/ X* g+ J1 x
    /*等待UPP传输完毕*/
# u- y1 @. K" p- p6 S: c. L; F- K    //i=0;
1 z$ }" \# v" f: t; S& h( ^, |    //j=0;
9 s+ H; G) [* d    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% \8 l$ E' U) |, J( {0 B  ?
    {' Q! l5 L- m4 Z* t! L
        /*  测试UPP传输的同时操作普通DDR数据2 b8 H5 x. d% r6 ~3 K  [) t
        temp=i;& C- F9 E: i) @9 t) ^% n4 t
        i++;5 m, D0 X) f. O% O6 Z! _  H, n
        if(i==1024)
, m. I/ c# c1 T  F6 ^        {
/ u3 o, e5 N# I4 _            i=0;* `& s$ a+ C8 v( m  \. m
            j++;
3 m4 u+ p! q0 h        }" E! G7 m3 o- ^+ y
        */. n& I7 _. _, n
0 w: R+ r& @8 u  c
       asm(" nop");; \" F- g- B+ z& k% K

* O0 X& r# T5 [# Q5 g! P       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! d" O- d) \' a' n    }
9 S, f8 u8 B: D" h+ Q7 X
. c, h! {& L! l& u1 R$ [    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 \( l$ t! A3 V9 f. B
    //UARTprintf( "i=%d\n",i);
+ W& g: y9 M& G2 o/ N: f8 X& _    //UARTprintf( "j=%d\n",j);
+ c9 h' d' f" c9 l' [( O    UARTPuts("Data mismatch in buffers.\n",-2);, F) p( ^! o9 ~
    if (upp_interrupt_count == 2 && upp_error_count == 0)* ?# f: Y, m8 S" ?" |  w2 i1 p
    {
. C4 C4 ^* Q) U5 V        for (i = 0; i<upp_frame_size; i++)9 V/ @) [* ?( n2 E2 r
        {
2 F+ q& c! c0 {/ o+ }3 Q            if (upp_buffer_a != upp_buffer_b)2 |; L& b  E' G% u# G& j
            {; k- K- Z. y! A6 @8 O5 E* K
                upp_error_count++;' H+ |! |  Y! F: U9 [& h/ K' H/ ~
            }
1 B( E2 u" ?( q) ?  r5 K/ B        }
4 T4 B+ i5 ~, B! E% t& Y& R8 H    }
* K0 u( y- W6 p1 w. ]1 @; n; f1 p6 U/ P$ k) Z
    /* 报告通信结果*/3 f$ j. ]+ h8 j8 Y4 B6 w7 k7 B
    if(upp_error_count != 0)" ^9 G. D0 k, I, E
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 p' O9 D3 k4 ], V1 i    else
$ N% l  J. }5 n. \        UARTPuts("uPP transfers complete!\n",-2);  I5 P5 ]+ n/ r. u- t# l" y
' I4 s! C/ R) Y7 S: I: }0 C
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: r( r  o9 D5 Q$ r) ?- q* `
    UARTGets(ch,2);8 k& Y9 a6 a8 h6 N
    UARTPuts("\n", -2);! i6 `: G) _0 J% @0 G5 l/ K4 E! v

- R  D2 @# @, Y3 H: S    if(ch[0] == 'y')
. ?4 W3 ~9 g: M0 ~    {+ @3 _2 c+ m; B# I
        /*打印全部读到的数据*/! {% l! N% z' w& Q, a7 |) C' B
        for(i=0; i<upp_frame_size; )  e' L3 ?+ b6 e/ V
        {& [4 {: |/ Q: v; @
            for(j=0; j<5; j++)1 i- M) R* T9 T3 I# X& s
            {8 `, {8 S. F( v  _9 p& a& N
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
! X% B4 P7 K7 V! x                i++;
9 Z, d, R6 M: _0 s0 X& k/ Y                //if(i >= 4096)
# t- x) n' E* U% b/ [                //    break;
* ]/ R5 ^& k4 @$ k  R
# v: ~# n" t) ]( J            }
" c. s0 `2 J4 s/ d, N            UARTPuts("\n",-2);; p  F1 W3 G" \+ }! W
        }
+ U" M" u4 Y( s+ w    }
& Q3 ]5 j' T5 ]- A$ v( y6 I. \, C& f6 e
}
0 W. `) ?' M! Z! X
+ L3 [& ]1 x+ ]7 `0 @

7 ?0 a4 d1 p. t9 ^' n
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 @+ \. l& N, Y: {1 P' q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 ^) e- F5 n' [





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