嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
  e! w, q3 n- p! Q* d" M( p
Void UPP_TASK(Void)* \4 c. X' d8 ]! X) N. v, V& }
{. ?& |" K+ j$ g

8 i7 |: P, B7 y1 S    int i,j,k,target_int_count=2;( ~$ m7 x) W7 @3 |+ j) s
    char ch[2];
- Q4 {# W; {& [. C0 Y  B% v* J& z
# F/ e" V- G! O( [. a" R8 L4 m8 Y" S2 S1 Z

% t# d* b! R8 W! ^9 u/ p    upp_interrupt_count  = 0;+ M: p6 @. E2 _* J% k* `
    upp_error_count = 0;
( z+ X3 N5 a* O* m$ P; r
$ Y5 l( j6 @6 G    UARTPuts("\tResetting uPP buffers...\r\n",-2);% a* M% Z/ Y- }/ |5 f+ F# r) e4 @
    // Initialize data buffers
( L" a  @0 \! N. l+ v! Y    for (i = 0; i < upp_frame_size; i++)
( k1 `& G0 ]0 Z/ G) H& k9 A    {$ `: b: k$ i  A% m' v
       upp_buffer_b =i;
/ k( T5 R9 E' f' J+ h, `       upp_buffer_a = 0xDEAD;
- W( w3 G: E# L! P0 ?& n) ?    }
1 [. g& t% g" Y  K5 [" T! e
2 h9 r+ E2 N2 `7 k    //for(i=0;i<1024;i++)! q: h! s' _7 ~$ {# ^
    //    temp=0;8 O  v4 ^* @/ E* a0 z

4 R6 j4 w' Z3 ?. S    //UPPReset();
- C6 H3 ^. G5 V* C# v, s    /*启动UPP DMA传输*/  ?2 ]% r8 K9 B' f/ @4 n
    UARTPuts("upp_prog_dma_i\n",-2);% [  m8 Z) V* A# p9 H" a& H! c
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 n: ^. ^- {, ^  n. |
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 A8 h9 n' N3 b- Y5 G
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; _% W% m; f3 c" G" L, j
! Y6 o6 t$ j: k    UARTPuts("upp_prog_dma_i\n",-2);$ Z3 {! y" I7 z; d( H% t
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 a# J2 F# v& D- ^: P4 I
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& q! g4 j( _- x6 s
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: F# d! h% T+ L1 C2 M

$ `8 Y3 X  J1 G  ?. @7 f9 t    /*等待UPP传输完毕*/
# P( i2 a+ ~! h% v  _    //i=0;
' R4 {3 F/ X. D" h    //j=0;
1 J6 y6 Y  ~7 W6 G: t7 C. c' g" U    while (upp_interrupt_count < target_int_count && upp_error_count == 0); G# g* [  n% D  w. d
    {
4 g2 |( f9 l/ E, w        /*  测试UPP传输的同时操作普通DDR数据- [9 ?( d" ]2 v
        temp=i;
- u  S; {5 E# ~' P) y6 C% z0 E        i++;
; _: Q+ `" M6 ]% \. L        if(i==1024)
! W9 i8 Y, h& `3 C( P        {
' h4 e8 o# h: u            i=0;
6 n4 Z  f; C& E/ K0 B            j++;
9 T; D0 K$ e& `1 N1 Q3 C        }( U- q2 ?& \' D6 }
        */! }4 Q- x7 J! f' J% r) n6 g
7 @& P6 \, w0 X
       asm(" nop");
3 a* Z' ~& y, @' i6 E
9 b/ o0 }$ r) B" |! r       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) J4 E( M: N1 b9 f6 Q
    }
; x% h. w! [  E% s2 m- @+ r' G4 z6 b/ E
    /*检查UPP传输的数据是否正确 (loopback modes only)*/; w3 T0 f. `& e6 r6 E* x; D" H
    //UARTprintf( "i=%d\n",i);
4 j( ^9 {# r; g+ x1 S4 B7 m    //UARTprintf( "j=%d\n",j);+ p* K/ x+ O" s! f; p$ l
    UARTPuts("Data mismatch in buffers.\n",-2);) |3 ^1 P! L; Y% u- f
    if (upp_interrupt_count == 2 && upp_error_count == 0)
* L. Y" J6 \( e5 a+ v    {
3 T' K& `# n/ V. o        for (i = 0; i<upp_frame_size; i++)
+ ~9 |$ {1 `) Q% E        {
& j8 b  `: V+ M            if (upp_buffer_a != upp_buffer_b)# p! e# \. I/ O* N& E
            {9 V' q9 w: Y, ~# S) O: x. Z6 b
                upp_error_count++;+ L* b8 H# C' k
            }
; U7 r/ Y. |2 z; Y; ], [& J& B. U4 _6 ^        }
! h5 {' P& n0 p% |  _0 v+ C, z    }- q8 K$ v% U' i6 y. e: q

$ a1 [1 L9 A" R# ~, _    /* 报告通信结果*/
4 p) d# H  }' ~. U8 P- L8 v' O7 y    if(upp_error_count != 0)
6 e( v& y6 G* W        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 G) c$ b; |# M, h' Z! S' @% c
    else
7 x* j7 ]0 q9 X' _8 F        UARTPuts("uPP transfers complete!\n",-2);1 E7 g/ t" {8 f: e, I

" g, C$ X* \4 x% b; N- }  M  N2 [# \    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; g+ p0 C$ `/ ?- G2 k& ]    UARTGets(ch,2);
/ u1 z2 ?+ ^" a    UARTPuts("\n", -2);
) R6 p# i. c) j& V- I3 m* F" p0 r! p% n+ q2 X
    if(ch[0] == 'y')
( P' d2 O: O8 H    {
2 Q" j8 r: W/ G        /*打印全部读到的数据*/( d% D6 X6 _9 R4 p
        for(i=0; i<upp_frame_size; )
+ p7 m' d% u" X, X% U+ `& o! z        {
: N  Y3 Z. d) l* t+ _; u7 s1 n            for(j=0; j<5; j++)
9 M3 |  n/ s% R1 D2 P/ k/ i            {
  s4 @. g" o" C( v' D                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 M  m" G# {' X9 m/ [3 C7 v, \1 D                i++;
+ l  I( O" v. v; ]5 w) V8 i                //if(i >= 4096). T& W1 A% ^" ]( d
                //    break;
1 o4 Q. `$ R4 T  h( }2 C2 Q7 h/ W+ ~" k! Z6 W2 N0 }* [" R: L/ o9 S
            }
8 n* Z* A; t7 Z! X) n% b- q: M  P            UARTPuts("\n",-2);
# K' X+ K* M9 F        }
/ _% c! R7 P. \5 Y( n  F    }
% z! t- O( {' `+ H5 O+ j, M: G
' s; B" i, k7 Z& r}
% ?5 `( G" G; J/ B1 U; G4 n

4 I7 M& M8 w+ ]# x
4 j9 F& ~' W6 r. W/ C8 _
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 m. g4 E; Y: q7 _+ T) C$ Y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) j+ x6 g' y0 Z1 B1 [




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