嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# n; U: f( I& L
Void UPP_TASK(Void)5 ^4 i7 s* p) x9 j$ s
{
: Y5 E, S8 M5 \9 p8 V* `  R2 g, l( ^6 i0 j* [
    int i,j,k,target_int_count=2;# K6 Y) }4 h- B4 c* t
    char ch[2];
9 C$ T! H; H& b! m8 O9 y" v! e0 `# G/ E0 P. o0 e  x

: E9 s; V0 \" f; M
( k4 g+ W, c% q+ F% K$ W( ~    upp_interrupt_count  = 0;
) U3 v8 y5 C, U) [, g6 J    upp_error_count = 0;/ K% Y- `- ?1 `0 W4 f  z1 H
7 i5 P1 H' k0 K. r6 ?; u# |8 c6 s
    UARTPuts("\tResetting uPP buffers...\r\n",-2);% ?% ^; j. F$ G# a* S# U4 o1 h9 g
    // Initialize data buffers; C: ~" C8 X+ _
    for (i = 0; i < upp_frame_size; i++)5 P7 h6 X1 X5 u- r6 J
    {
  w6 J  N" G. p       upp_buffer_b =i;
  Y0 r8 k, [- S6 o5 [8 b       upp_buffer_a = 0xDEAD;
9 b& j& ~7 A) ^- J* k    }/ d( A( }9 c/ l$ F- q6 e

. \& v  a/ [% q2 z    //for(i=0;i<1024;i++)
) F: b; ~# Y9 f# r4 B$ i    //    temp=0;1 A( _" J; m. G' _& `2 c5 g* t

7 \! y0 q. F+ y3 i" W7 z8 R' L% c7 V    //UPPReset();4 ?! Z+ |1 P' w! `4 `9 Q$ l, s& I
    /*启动UPP DMA传输*/  V" ^! ?8 D- Y/ Z. [
    UARTPuts("upp_prog_dma_i\n",-2);' ?) S6 _+ {- t
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, d2 f/ ~  I1 l8 C    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- D4 _6 d1 @, d4 z! o9 l, s
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 B' P& `" a% \
, w/ l) ~  k" ?) ]    UARTPuts("upp_prog_dma_i\n",-2);2 A2 w, Y. j4 ~& _# F
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" @) `+ X9 [5 ~7 z' i    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% f, R; k: @* J% U" Q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" W$ I1 @# o9 P+ A% {( g8 ?+ y4 B: i
    /*等待UPP传输完毕*/
% G1 z- e7 I2 H) |; [9 j$ h    //i=0;+ U5 |. B# H0 F; Y: S6 R
    //j=0;
& w. a- l8 K: B2 @- C4 n    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 Z4 E) c0 u6 u/ c, Z& X
    {3 O/ H  q6 \0 n. I% U* q5 b
        /*  测试UPP传输的同时操作普通DDR数据
1 a) t0 q/ C7 s/ f1 f7 L# I% N% N        temp=i;- D) Y: x1 L5 T! A7 F
        i++;; L; ~. S+ T$ {4 h: z
        if(i==1024)
' e. j5 o. g) [0 d0 q        {& C) a, l: N% M, ]5 w* Q' l
            i=0;
/ K/ O  B% z4 x            j++;7 k% m$ q2 E; E* u# N: K. }" p
        }
" }! B% |, a/ _# E7 g        */
3 N* Q: A/ \; [) y* ~* T: G* _% N( U9 P- S! K
       asm(" nop");
: B' \. V3 ?! m( D1 m+ p$ |* ?1 Q" ~
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);5 i1 s9 _$ X5 O1 |
    }1 k( `$ R, k7 k  b
5 T3 U+ ?( {) f- ?1 b
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 y! s: R% _3 f% y) v, H    //UARTprintf( "i=%d\n",i);
, w, D; E+ I& p4 f: K5 e, L/ \    //UARTprintf( "j=%d\n",j);
# P) e' u1 m, D    UARTPuts("Data mismatch in buffers.\n",-2);
! b. n; B% e8 E    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 s- t4 f2 R2 O* x    {
  S6 X* @. ~  a  I+ N        for (i = 0; i<upp_frame_size; i++)$ a; [% t9 u) W# _, m1 a
        {5 W* L' q4 }6 H7 t7 Q3 m
            if (upp_buffer_a != upp_buffer_b)1 N* L1 Q( n+ `. g" Z0 a+ p, M
            {
# T4 r+ P# E6 V* I' _1 v! b5 f                upp_error_count++;
2 S% e9 V/ [: n' ]# X6 S1 `            }
2 U5 z: o+ F8 [% n        }/ x0 ]; _% P% w! N
    }
8 l8 V: d6 H3 L2 ^0 i( b& l. v7 I" F3 {0 J- }! h* R" Z
    /* 报告通信结果*/
6 k& w5 p. `- {2 M6 `7 ^) C    if(upp_error_count != 0)
* K- L3 [! D& B8 T* d0 h, m        UARTprintf( "upp_error_count=%d\n",upp_error_count);' x/ @9 n% h8 i( s; n
    else) e1 o) r* `& P
        UARTPuts("uPP transfers complete!\n",-2);( x  W% ~" y0 ~; C% }' o' f

9 F' o( S+ a: y% B    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 k: B8 D+ ^  |% {: i1 \/ S2 D    UARTGets(ch,2);
4 C- u! i  L% K    UARTPuts("\n", -2);
3 @3 B# |" ?% e5 ~- T' a1 {" v/ s- U, W) e* o
    if(ch[0] == 'y')9 A$ z4 Q0 G! i) _' K8 t, c
    {5 D0 \# U$ V0 O/ {" T' i( {; Q6 Z
        /*打印全部读到的数据*/
1 r: W- X9 ^* u        for(i=0; i<upp_frame_size; )
( N& U! }/ H$ F7 u$ [/ ~        {: N! E; o% I3 R) D9 B9 }& h
            for(j=0; j<5; j++)) E; N) @+ k6 H1 x3 k
            {- `! D# A# ~3 e: {# s* `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. I" Z# Y5 R2 K# ?4 E$ Q% g                i++;
8 Z3 X8 j) ]: q  h2 [, h3 B4 E                //if(i >= 4096)
" e9 r6 y3 n  }8 [                //    break;
4 V( I% O& K' V. M* Z: S1 t( l- D
$ ~3 J) `! B  @5 T' f            }
! N5 D2 R. P6 g' Z) i1 n            UARTPuts("\n",-2);
# S' o# F, P8 ]; v2 D/ w# n. A        }$ y6 U8 r# g$ v3 f) N
    }
0 [; s3 f8 f: G3 D+ x2 v) |, h# O: B4 M( z) u" {# ~
}
- ?9 t& b, B* c# F
) f, o; Y% p9 R$ U: |, Z- z# f

- [9 r1 w" }" ~) o( g" \! }
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 u( C( c$ {5 }$ T3 @4 c$ E( G
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% e( ?9 y6 s/ _3 K




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