嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- H  q1 W$ V1 I4 [  a
Void UPP_TASK(Void)
; z! z' n6 c. }- a{
# c- S# M1 I4 x! n/ v' N( Y* T; c
1 \4 s+ G0 S  I) D  O4 v# c1 D7 k3 U    int i,j,k,target_int_count=2;
4 c8 h; I2 b. o/ K( t    char ch[2];
6 H" h2 s! t2 b) c6 d( _( |/ J8 i# P" t; n' N6 P9 A# `. q& b
% ^8 S% s  ^: m3 t# e

2 Z- ]; E- @9 P    upp_interrupt_count  = 0;
) d2 s& i  B; k( c    upp_error_count = 0;
' H: }- c# w9 z1 ]2 [8 D. _. x. k. [2 W/ B0 ]3 H
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 w3 |. P8 j# ?; {4 R    // Initialize data buffers. B! m  q' i3 O) r) l4 q7 F, [# a- h
    for (i = 0; i < upp_frame_size; i++)
8 Z) ^" K3 j9 f" o2 S    {
( x4 x4 E- I( r3 J3 |) i4 U       upp_buffer_b =i;
0 S* q6 t( R3 |       upp_buffer_a = 0xDEAD;: B) B+ Q6 H! s. }9 a
    }5 F% g0 g% ^' z, e& o9 {/ S
0 ]2 r1 U5 |! _6 p9 S1 ]$ j% W
    //for(i=0;i<1024;i++)7 Q! l; b+ S% \9 r, z
    //    temp=0;3 c" S! L! i) o; v, l

2 ]$ C, G/ f! j  ?: p* j$ |" h    //UPPReset();
2 l: l* L, x' E( j    /*启动UPP DMA传输*/. ?  ^8 H' M5 `; X( b+ p
    UARTPuts("upp_prog_dma_i\n",-2);; K0 P' E$ f8 X8 `# A0 o1 j# E6 _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ H9 M; m; P1 N5 v
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) v5 z0 x. i  q/ a    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" g' i) H" P5 [: h2 B0 `# Q2 p1 P6 r" I

. t" k& r. @  C% s/ X4 A+ u    UARTPuts("upp_prog_dma_i\n",-2);
3 b2 j; B8 o" r# l* n    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;) v: \. \  G8 t, ?: K- y
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! g& ?& c  e1 `! T1 G" |/ v  v    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: \; n) u+ I6 c& x& z8 {1 n
4 q8 }5 O2 o* ~( n! ]    /*等待UPP传输完毕*/1 H2 E9 B" h0 d: T& N
    //i=0;
5 T% b; u  u7 q6 c7 Y0 l" \1 }0 C6 c    //j=0;: b0 p2 F8 [) \2 ?. q2 p
    while (upp_interrupt_count < target_int_count && upp_error_count == 0). ~# j( p$ o% f$ m
    {
% D* [3 z' K% W5 U        /*  测试UPP传输的同时操作普通DDR数据8 `, J( ^# B* C; r% `/ _# T% r
        temp=i;
. V( B+ j1 A( V1 b# q* R. p        i++;
/ S# y$ s/ @, ^; x7 i        if(i==1024)! |7 T- g1 W6 W1 I; P& G. z6 b  g
        {
0 L: g8 o. ~) l6 B8 d            i=0;
- N( b8 S+ l7 [; x% X0 `% a            j++;0 d( c. i! ^- a2 n0 t! h5 W/ S2 h
        }
8 D# G* X& l2 P8 ~8 g        */. y: X* b* g; ~* q6 [" G5 _

" X7 Q7 I0 m. s) _& |# u' i, g       asm(" nop");
( f( L& k' L8 L9 I& _& |: A/ P% r" X
  O0 m( I$ T5 f8 l6 m+ U* `% S       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);( L) @1 D: c/ q4 u
    }
& d$ b+ h- e8 {7 V3 d) N6 a, M) s% o, M6 r5 L) `  C+ [
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
' }; l2 d( D. m/ D$ o4 @" Z    //UARTprintf( "i=%d\n",i);
% a) |8 o0 S& _+ }    //UARTprintf( "j=%d\n",j);% Q6 d) K3 }4 Y, n/ O! a
    UARTPuts("Data mismatch in buffers.\n",-2);
$ }8 p8 U/ P2 \: g3 o+ y  ?  g    if (upp_interrupt_count == 2 && upp_error_count == 0)0 {  p- K  R7 B6 y
    {
& A% l1 b& v- P: w) p: a4 l        for (i = 0; i<upp_frame_size; i++)
3 n. D* N0 Y1 S  B7 ~, O        {$ ^* w* m  _. c7 b0 B8 p3 ~8 p3 j" `
            if (upp_buffer_a != upp_buffer_b)
8 |0 K7 ~/ U# g( j9 |; G            {
! Z( {4 Q5 X+ U4 O  `                upp_error_count++;# V, u- J. i8 p- J* [
            }  L( U5 t% t5 F; J  ]
        }
1 k& V' X5 f. Y1 r' e- |* \" ?    }
* ^# W& [; q! i. D! Y4 o, S: j0 g6 g' X4 `6 U
    /* 报告通信结果*/
6 o$ H! @" ]" q4 _9 {7 y    if(upp_error_count != 0)8 v) N; N& d9 J9 k3 e; ?
        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 |: _: N% a/ t8 d, E: v8 s
    else! j, d$ ~+ R& N' c1 w
        UARTPuts("uPP transfers complete!\n",-2);0 R% Q; K- h/ T0 P1 @" b. I  Y8 A
8 n4 y! u3 z  N" W
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
$ N4 @' h* V8 j5 p" B% E/ L; \    UARTGets(ch,2);
+ w& T7 S/ |  B( k" W8 V    UARTPuts("\n", -2);
. T8 W1 @. Q/ p% ^/ {" ]7 z5 V( V: Q! P. K
    if(ch[0] == 'y')( k3 q6 X# d7 s
    {
; \4 N  L& w2 j8 V8 u- w& K( R        /*打印全部读到的数据*/
) v9 y+ q" h& i' m! r: ^        for(i=0; i<upp_frame_size; )/ E% }4 p8 f" T9 w2 o
        {
: X: P/ Z9 T5 F! @+ X) K# {            for(j=0; j<5; j++); e0 k2 k8 s% g2 \
            {: X5 W' S% E" M2 M$ y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& `- P' t2 \$ g% w. s
                i++;. p0 K" o7 B, A+ y" F
                //if(i >= 4096)
9 Z/ c# e" m) |. T& D. |7 [: w                //    break;# h' _+ T9 G4 T9 B: D: i+ O
9 w0 n+ t5 n( R1 g/ M& Q$ h9 `
            }4 h! V9 D' E+ c" t8 }
            UARTPuts("\n",-2);7 u/ Z0 ~% K$ x. {% \0 p6 z/ V/ @) ^1 q
        }
2 e! I0 \3 L& }    }
# y7 v* }- B: r6 O3 M7 F* S# `* a  M' e  q& ?
}
5 }( _7 z9 ?! ^  o- C; T& E/ G
% l" {/ [6 I7 T. x0 D# r$ X
/ A" Q/ {) w8 _

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。7 i( N$ }* u# X; b- e! E. K# X

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 m% D* ?' D2 a8 z; u9 F- Q5 @" }% U





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