嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 _) _  l5 m- f: R; a3 U
Void UPP_TASK(Void)7 S$ g8 Z9 u$ q& O4 ~# I$ m
{
  u8 H. [2 ^: {6 {' c& @- w5 U# E- }* z9 F, B, ~1 ?
    int i,j,k,target_int_count=2;% ^* I9 }0 J0 i8 X
    char ch[2];- a: s, D4 P$ h, u. _3 @
) E7 N6 O' P- [3 {- E) u& ^% f" G
! e6 q) k6 X/ w7 D( @

( ]' V2 l8 b! e7 [" `    upp_interrupt_count  = 0;
9 I% Z! z5 z7 ?% e3 F3 U% v9 w, W    upp_error_count = 0;
9 i& {6 @8 g# `/ L" v4 M& k1 z& A' o' @/ W- ]9 i8 x9 x
    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ e1 W) P8 n  ?; @' p3 g
    // Initialize data buffers
) G$ R5 Z& N# Z( Q3 G: V    for (i = 0; i < upp_frame_size; i++)
- n- Y$ R( Q; w7 r& ^8 ?3 A    {+ Z' x: G$ m% F& N/ i
       upp_buffer_b =i;/ W( k8 P8 p& o' U# z! y6 O) B# s  K
       upp_buffer_a = 0xDEAD;( h# |, }* a0 X8 R
    }
2 F2 E% O, v9 D- P1 H; n
8 J6 R7 o! y0 E; o, P" b' O    //for(i=0;i<1024;i++), [1 e. h2 C! V+ a* X- h8 h
    //    temp=0;
" G; \6 ]6 Y6 w9 K* [0 g" g3 \" k9 s: C
    //UPPReset();# I, @4 ^* i) W# Q% }
    /*启动UPP DMA传输*/  z: n( Z+ h; C/ j9 s4 |4 B4 u" ^
    UARTPuts("upp_prog_dma_i\n",-2);
$ k' X; O: _8 q. B  g( y    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 |. `8 C7 D  s7 U3 e
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 g/ r0 W* q" y1 x% X' F    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 f, U6 c" {! [4 ~, H
0 N9 `  ~! |1 B; Q2 U    UARTPuts("upp_prog_dma_i\n",-2);- U( o' Q* N; t6 T% ?( m
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: i. D1 m6 F! F5 [9 Y    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; |( u0 g7 O; u6 Y; r* E2 _5 l    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 I2 E. ?9 f8 C) g* [1 F7 \9 ]- D" R4 U; q* q6 n
    /*等待UPP传输完毕*/% l! k1 w/ c" Z' I% b' f( z* O; `  }
    //i=0;3 I4 ]" Z& H* `# F% k& M
    //j=0;$ {8 b7 Z- A* x7 L! B( x' u
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ E# e& Y# R+ }* S' d    {8 Y0 _3 V( `0 O3 E$ Y' ~6 u$ ], A, \
        /*  测试UPP传输的同时操作普通DDR数据
! _; p/ X2 j- u        temp=i;
& {# G0 [3 l, T" b1 o1 P1 D        i++;
5 S- ^+ Z9 p$ l( u        if(i==1024)
7 E8 J0 d- L+ H7 a6 t4 U# r, s! v        {
9 I. U2 v1 g, t# r            i=0;- }+ ]7 F/ T8 u7 g" ?
            j++;- t- y1 C/ |6 H
        }/ @4 z* Q5 _" k7 k. ~) o
        */
  d0 f6 n' G0 Z! Q
! A8 x6 A4 {/ N; H       asm(" nop");
9 I/ O, z+ R$ i( a2 g" ]
, L: @9 B/ ?. _       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 h9 ]7 A/ o  a) g! K    }2 R7 o3 e" @+ E7 q/ s

# Y& x1 B% U, @& X' Q) U7 \2 k    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 S) _: K+ K) H* H' l; w5 ?    //UARTprintf( "i=%d\n",i);
5 p  b/ b, ?9 p/ q    //UARTprintf( "j=%d\n",j);
6 L/ Z. l- d8 [5 D$ I. j2 _1 f$ M    UARTPuts("Data mismatch in buffers.\n",-2);: A2 I$ n6 [- x7 v/ P1 s9 o
    if (upp_interrupt_count == 2 && upp_error_count == 0)
* F6 I- Z( v4 x2 k% u0 i: }    {7 X5 y9 k8 Y( _. X; Y9 R" d# Y3 }
        for (i = 0; i<upp_frame_size; i++)+ c, O: R: m! @4 W: z
        {
3 d; a3 U5 x. Y8 G            if (upp_buffer_a != upp_buffer_b)% h3 ]3 ^$ a: z' m* C) ~
            {2 o, s0 ~/ c* E; k) C& z
                upp_error_count++;: j+ G+ R1 A# Y
            }
2 R% @/ j, b/ k3 |5 n$ S, }        }
2 Z+ u8 ~- V. _( Z    }7 V6 `$ W: B, z8 H% H

# Y0 n$ N# [5 w2 E, w    /* 报告通信结果*/
4 @  ]- Q) G  H& l0 X    if(upp_error_count != 0)
3 q/ I7 K% j5 `, ^! i& A. ]        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: [) v7 Z7 i5 j! W0 v: [2 V    else3 `; L7 @5 R) J/ d
        UARTPuts("uPP transfers complete!\n",-2);
7 A+ R0 m! O1 Y2 D3 }$ \1 V* p. W
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- c9 N# S; W  n
    UARTGets(ch,2);
( `3 s7 v* V9 y    UARTPuts("\n", -2);2 ~; }: P, h7 m" d5 [7 Z

. Q  l  k& _( E& I# r2 k. x    if(ch[0] == 'y')
$ _# d8 Q2 f7 Y    {4 K0 B; C; \" a: H- b0 ?! T" p
        /*打印全部读到的数据*/
1 T2 N5 |$ P& O9 u' i! k0 Q        for(i=0; i<upp_frame_size; )
! d: E. Q% |9 h2 H# V' b        {* Q9 Q# D. X+ S7 G- {
            for(j=0; j<5; j++)+ H6 E" T+ o9 ^
            {* w2 u5 g4 M! _" l+ H$ ~0 C
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 F) Q# B# Y) n  D2 S& E, Q* X9 e. M: L4 T                i++;
% R+ D* U7 E+ @! {- ]9 L                //if(i >= 4096)2 ^- _3 O' O& ^
                //    break;+ E2 c1 Q) A0 N

$ S' q/ o, l- @) V* B5 d0 S            }
# a+ m% R" t0 O; T2 p            UARTPuts("\n",-2);
; ?2 c* x' h$ L( B3 c; P$ \3 j        }, s  p7 A" W% n
    }
" i9 |6 o; Q5 Q
' C( x% q8 H6 d1 G* p( [% _+ H* G}
+ l- F2 V9 |5 w9 Z' Q
, L8 L9 z- E  }3 X- F! R: \

. s0 g$ c$ z! ^" I3 a
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ k5 n2 Z; N  p: x# Y/ f
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ B' s5 u! _* W! J





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