嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?& Y) \# Y: @. c
Void UPP_TASK(Void), V( y  ~8 k' ?2 |
{
8 x+ v  s9 ^" b. Y$ ]4 J: Q9 w9 e
    int i,j,k,target_int_count=2;& p) f) c2 w" s$ v) T' z; n
    char ch[2];. g2 n4 X2 Z1 s1 ]  z) }; S, ?5 e
5 M: V* n7 V. P+ p

! h) d- X6 E$ |7 ]" p% c! n
. C: I6 q& p/ O# t! y    upp_interrupt_count  = 0;, O" y0 h8 G/ {  Y: P( `9 i, l
    upp_error_count = 0;" H8 t5 @* q# `5 P6 Y9 ?/ a

$ {! L; l, l2 P0 @    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 |! P- f/ }- k" r, |' o' U% y
    // Initialize data buffers  o* y+ R* Y6 F. B" X7 c+ d7 K4 f
    for (i = 0; i < upp_frame_size; i++)
  p$ f! z! z! L( z1 @3 `  Y& A    {
' N, }  r( t' {, N       upp_buffer_b =i;" @  p% Z# l3 y0 K( \) R! a
       upp_buffer_a = 0xDEAD;
+ g2 r7 M* X- ^+ w+ G    }
- `+ s0 i" y- |# l
3 ^$ |! @3 j+ R    //for(i=0;i<1024;i++)3 f) y# E- X5 p2 p/ H1 `
    //    temp=0;8 a: Y: _: V7 }1 n( c  U

2 b) [) P7 C. w- G5 \, S    //UPPReset();# {- _7 e, e% t% `
    /*启动UPP DMA传输*/9 v+ g$ C6 m6 b3 K: f, T2 W3 n; }
    UARTPuts("upp_prog_dma_i\n",-2);5 m3 X7 c. }( p3 R$ k4 ~4 ~
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;0 ^+ q; ?( o* e
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" u, W- z% \  s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 D5 V+ P* i, Y
  @+ @! o# G5 }$ O  {# O  u
    UARTPuts("upp_prog_dma_i\n",-2);9 u( e7 J' h% b) h( c0 c5 i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 j+ M& W6 J/ `    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; r9 C, E  {' d  I3 k7 p: K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 o. k: B' v% n" G8 K
4 t& V% Z! M: U* {
    /*等待UPP传输完毕*/9 d' I% G' Z: I2 J+ {. @
    //i=0;
) {' Z! `/ k9 m* ~0 S+ E8 O    //j=0;3 \! B" P. p! G2 e
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! c/ V0 x9 P" \
    {3 Q; a6 W: U; Q$ \
        /*  测试UPP传输的同时操作普通DDR数据. d- e8 Q& Z$ A& l
        temp=i;
. ~( N, p1 I" I& @$ S        i++;# Z! {( j0 d1 M- o7 ]9 l4 u0 Z7 e
        if(i==1024)$ c$ D3 J! @, h, K
        {2 u" m( H5 O+ \4 U2 x- ]
            i=0;( y* p. @! _5 M- g' ^# |4 U
            j++;: N0 Y8 B8 g; g4 f' w- W4 b
        }
- L0 e$ y9 ?5 _# i$ T        */
+ D$ [* B+ H% ]: n! u" n/ d
9 e/ C$ S7 {; w, m7 j       asm(" nop");! o8 J' b7 D- Z6 ^" w3 r6 F. s
0 f% q! H  ]" a! @; `
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! s6 {, L( K1 v! }    }" w. C, Y4 X+ i& F6 W. U% ^

8 @2 z2 I) N- \* p& o    /*检查UPP传输的数据是否正确 (loopback modes only)*/% |$ \8 ^: P' ~2 ^
    //UARTprintf( "i=%d\n",i);
* i; M2 c. D/ Y0 j" m2 Y9 x    //UARTprintf( "j=%d\n",j);6 ]9 Y8 Z5 _* a8 A9 f* m1 x
    UARTPuts("Data mismatch in buffers.\n",-2);
# e, f8 B$ y! E& b- ^    if (upp_interrupt_count == 2 && upp_error_count == 0)% y# H6 x' U% |7 F$ T
    {
; B* U* @5 I% o        for (i = 0; i<upp_frame_size; i++)
( Z0 A; a1 T5 W9 y6 s1 ~0 ?        {
3 ^! A# }  i4 g! e& g1 L* C/ P3 s            if (upp_buffer_a != upp_buffer_b)
1 z* ~) t, ?, R; `# ^. z# Z            {
6 z/ t2 Q3 y8 n$ D7 l& b9 n2 b$ l                upp_error_count++;
& f( s) w+ x, [- p1 P            }
5 z0 T! V& |3 d6 t        }
' q' }: L# Q  |3 r, h8 i5 \    }+ u% R; p" ~( m. y
5 J8 z7 g0 p+ s+ o4 V8 i
    /* 报告通信结果*/( t! \* N. o6 B
    if(upp_error_count != 0)
9 H6 _" n# V/ Z" K5 x& Q        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 [, L5 h) i* Q9 X/ k* i# ?6 h) x    else
4 z" I8 W0 O; R; o        UARTPuts("uPP transfers complete!\n",-2);8 H! x5 r+ n) f! ]
7 I6 Y0 @! T1 Y2 O' q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& E6 h& U& }0 o! Q+ o# R- j    UARTGets(ch,2);6 i( {( [" Q& Q1 I8 p4 `
    UARTPuts("\n", -2);
' x9 E1 m' q* a* f
: E# z$ ^7 d  _3 ?0 E0 Q: F1 W    if(ch[0] == 'y')6 p- \. w! J# t% B0 {$ Z6 k' y
    {
! K8 I* G5 i; H5 j! d/ V# n        /*打印全部读到的数据*/
" L, i& i! Q1 o9 c" E( S. T) b! \        for(i=0; i<upp_frame_size; )- b+ {; g0 T0 E3 u  u$ I
        {
# t  j* f+ I1 K! s! [            for(j=0; j<5; j++)( B) a$ L# H! A6 P0 }
            {
* }, c* u9 B- n# _6 B4 _& ^  ^                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 |# ?+ s# C- A8 O# v! `
                i++;- J. D; k2 T+ b  I
                //if(i >= 4096)1 O3 M/ F' S8 _; g$ Q9 ~7 T2 F
                //    break;9 m. B, f/ w. z9 q  ~3 Y
! W0 f9 d: n0 c; b( H
            }
! M; s* K  A7 {' I            UARTPuts("\n",-2);& U& I. [9 i) N: L# m! ~% G  c3 h
        }
! I% f: @) V# Q% z' d    }! b4 `, C! I3 u" r* O

2 x" P, W4 F; G8 Z}
( L8 p5 E( X7 l/ j' o/ }. A

$ j3 J0 y* k9 a+ E3 H6 t* S3 ~8 v: _1 L) o" C4 X5 h  p9 M

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" E$ H2 h6 x6 ~/ @0 w- J3 w
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 A  r" `; q( \* H; F! n& I




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