嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 g1 c- J7 u6 J' ^. q3 {
Void UPP_TASK(Void)( p! W1 v" |4 B4 H$ j- x2 a/ B& Q& i2 P
{
3 h2 H2 J& N. X* X; b, k
) p2 E, u: N9 @$ {$ F( b    int i,j,k,target_int_count=2;' i% S- f5 \: |8 ~
    char ch[2];
* q- k" R9 X! w8 a8 N
" {4 H3 c6 C* F7 E1 }. @1 Y1 X9 f2 k+ z  n' q

$ o* s6 [1 g0 x# N. n7 `  g    upp_interrupt_count  = 0;5 X( y3 r) t5 {. S
    upp_error_count = 0;2 b8 J. b. h+ u; J9 ^3 Q
5 @3 t/ l3 u/ T4 N9 N7 R4 p$ e
    UARTPuts("\tResetting uPP buffers...\r\n",-2);- X+ p7 v2 |: H4 o
    // Initialize data buffers
4 r% Y3 b- `- @    for (i = 0; i < upp_frame_size; i++)
, R& g8 u7 A! c; X' O* E3 Z+ ~    {
. a- ?1 i2 h& b7 d' R1 T& l       upp_buffer_b =i;4 y# i5 U5 s' X& P0 k4 q
       upp_buffer_a = 0xDEAD;5 G# O/ {. Y9 v8 `
    }2 t8 o8 ]2 W. Y5 Q& c2 A0 H
! I& k/ R# v7 `1 Y& g
    //for(i=0;i<1024;i++)
- a4 L, r' O5 n    //    temp=0;
$ m0 E% w* T& [5 {8 {4 H+ L' p! |/ g5 y6 o- y4 o$ Q
    //UPPReset();
8 }% a4 x6 @0 z2 {+ B" l    /*启动UPP DMA传输*/
7 ]$ `! c) _; q8 s* i. c    UARTPuts("upp_prog_dma_i\n",-2);, m5 R! G8 \" q3 x
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 n) n1 }5 v4 t$ a) p+ o2 p. M( X    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" b" l, Z* f' i9 W
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, m7 U0 @/ [& h5 [5 q
% Z; ?# c/ K& I
    UARTPuts("upp_prog_dma_i\n",-2);2 ]: x, v- Q- b4 l
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) Q, c8 X3 a/ N9 S  \0 b/ a    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 {! U( m4 j8 N, C1 K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; P: {4 g4 i/ p+ T5 `( |
6 t* c& P' H% f% ~% f    /*等待UPP传输完毕*/
; q4 `2 r. g/ i+ [, \    //i=0;0 t( j* G  f/ M; @  d% T( c
    //j=0;
& n) L( o, H; y/ o) N    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- D* P! \8 q% v& i    {
5 l' |5 a* S; B9 R, n        /*  测试UPP传输的同时操作普通DDR数据
1 h% ~( u1 u0 _, I. y4 `$ K        temp=i;# ~' [# r, n4 T; }
        i++;
- ?' W5 _1 L3 b: j/ L        if(i==1024)+ S- d5 S: @& K+ g
        {! F9 J* G5 T, g4 w9 O
            i=0;
' f9 Y& p5 K4 j6 O3 }! \; ]            j++;
( ^. }0 h5 R2 M* x; b% T2 b: n7 v$ I        }
8 K5 ]- ?9 N, N% n; l# k# G        */5 a7 c, t5 R2 X, w
3 [# y& p. f4 t8 ^6 f) J) }. y
       asm(" nop");# ?2 J5 I) A1 W0 |/ ?/ F/ s9 Z1 w/ {

6 c$ O" K& k7 r7 J' ?2 o+ ~       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) _* D& ~- H. R5 n6 s& Y  t    }7 H$ X: Z1 S5 f
8 g( b4 O& }# g, p5 K8 C1 Q4 ]
    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 |7 X( {2 z! p
    //UARTprintf( "i=%d\n",i);  j6 }  Z! i# r, D: S% d3 I
    //UARTprintf( "j=%d\n",j);
4 Y( j: C8 e" U6 S: o    UARTPuts("Data mismatch in buffers.\n",-2);0 S0 h8 Q! S4 {6 o. o
    if (upp_interrupt_count == 2 && upp_error_count == 0)! Z' O" x9 c8 R% s  ~4 Y
    {, t# V5 k; U/ w& d3 V. q" d+ ?
        for (i = 0; i<upp_frame_size; i++); k  v5 m8 c7 C( r
        {
+ I7 D" I" `3 }, B: W* m# i) [            if (upp_buffer_a != upp_buffer_b)
' F$ @6 t" b; N( p4 ^            {
$ |8 r0 n! u% ?  f0 B                upp_error_count++;5 \# ~* L1 k7 J3 ~
            }+ x  A& W% b7 F
        }# _) P2 l! \3 [" Y
    }
3 N, o2 ^4 `! _
3 @( |$ P% f/ z+ y" N" m( F; p    /* 报告通信结果*/% B1 h5 |* i( p$ b  d6 b
    if(upp_error_count != 0)- C8 i7 m& p/ d' [7 u. |# D8 R
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 ^# i# K8 R2 Z& d  q    else) z' u0 w3 D9 N
        UARTPuts("uPP transfers complete!\n",-2);
  _2 p) o4 X8 t/ D- P
0 L+ N2 B  ~# e# K  V  p    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 e/ u9 E* E* v- C    UARTGets(ch,2);2 w" S* n# l% _0 x
    UARTPuts("\n", -2);- j- C7 e" X6 R; I5 |9 e
9 E3 `, n3 l! r) A) u
    if(ch[0] == 'y')
2 {7 H; P0 D) Q( Z$ y    {: I, \7 J' n+ p) B5 `
        /*打印全部读到的数据*/( e' j$ f+ k# ^& B- p" M) @& u
        for(i=0; i<upp_frame_size; )" `2 b8 ?& e* ]$ h
        {
- l% o& |2 b  G7 F) T% q+ i( f2 W1 z            for(j=0; j<5; j++)
5 r) x3 f8 c- A' `8 q  t( F7 r            {* z  A; X  P: S, g1 r8 N1 _' `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( }, H8 y% A! W                i++;) S+ z1 l  V3 B: i  }7 G
                //if(i >= 4096)
! N6 y! n  b" P6 T$ G                //    break;* F4 d4 |, P3 c! S/ [3 P

( }! l0 B8 _+ k/ c3 A1 ]            }8 j6 K8 Z+ G( d% y
            UARTPuts("\n",-2);) U- e. ~' e0 |! K
        }
/ _; c# Q& {# f0 D2 O& }    }! V+ ~- J9 E9 K9 [( k+ D

8 N4 B5 C2 M1 z  ?% S9 E* W5 Y}

* J- Z+ O8 @. n, e! R6 O$ d* m6 ?

4 x+ D$ a% q1 R" ^& K$ I
, k: ~- H1 T$ i! w
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: g2 b' t# W) Q- u# d( d; ^- G
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 W( z; I5 f! c& |. s




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