嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* `+ ^" N! g$ T) B* I9 u
Void UPP_TASK(Void)4 P, \% z( a7 @( a9 o
{
3 r* u: }% r. F* n6 |
0 t4 z; |& X9 _$ y/ W8 V; C    int i,j,k,target_int_count=2;5 y: o- C" I- j" D3 M
    char ch[2];; a6 b) f# o! T' b" d. }3 N
/ o- O, X1 v) L4 A% D

0 k4 f$ \& u& r" F
: Q7 M9 m/ _6 J+ h; Y, |    upp_interrupt_count  = 0;
' o1 G$ N; C2 ^- Z* f% r6 h    upp_error_count = 0;2 X& c8 x5 N3 V- G
, G" c" O5 D' E$ ?2 }
    UARTPuts("\tResetting uPP buffers...\r\n",-2);; w1 k' w. f3 ]. E8 P0 Y
    // Initialize data buffers
2 ~1 `4 ~( X- J    for (i = 0; i < upp_frame_size; i++)
0 y; Z. B* M$ v2 w9 q) H* E% Y    {2 y! }* C* G- `: K$ z5 h- N* D4 ?( Y
       upp_buffer_b =i;
, D& d3 B, e* K& b% p1 j; k2 @: p       upp_buffer_a = 0xDEAD;
6 F9 `( Z0 A3 r' [: _) T6 i7 v    }
; _4 H" n+ X5 i' x- D' R* z/ F# b6 A0 G. O- M! H
    //for(i=0;i<1024;i++)
0 r  F  }/ Y% J  c' y  a    //    temp=0;
; I. i, D' x% c" B7 {8 y9 @
- B1 s) t+ W9 I7 h    //UPPReset();
( H! ]2 a" y, R9 Q3 P* C    /*启动UPP DMA传输*/
" V) Z) |6 n/ D! l4 Y% u" a* X: ~! z    UARTPuts("upp_prog_dma_i\n",-2);) g+ j' d) {2 r! r
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. Y" X- N) e  }- r6 e    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. u+ ]2 K% |2 U% ^1 S  `$ o
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) N& g) r7 f5 g8 W( c3 z
$ e' z7 n9 {4 F    UARTPuts("upp_prog_dma_i\n",-2);6 v. T9 A% w+ u  k' C* P
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;2 a4 \' g! _6 s$ D: H
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) T4 c# Z' Y) a2 b# K
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: x4 {% E1 L' x
5 m- U* x3 w) m9 c; f  N
    /*等待UPP传输完毕*/& E8 e% z- n4 b- C
    //i=0;
: R" b- m$ ^& X6 [( E7 r    //j=0;
3 Y% v% ?$ k& Y, [8 z! H6 j    while (upp_interrupt_count < target_int_count && upp_error_count == 0); ]3 \2 T  z7 W4 T* y. ~- @4 }
    {
$ Q. E/ |7 o9 l        /*  测试UPP传输的同时操作普通DDR数据
3 [; Y3 `' c9 q2 ^& Q- l- y        temp=i;9 \1 P1 I/ X: d+ i8 N. [
        i++;
3 ]8 p1 G; v! D: C+ w        if(i==1024)
+ G2 x/ `* t' }4 n        {
4 I, P8 d7 L1 _/ y2 I5 _& S            i=0;
, n- X, `3 o/ O3 p: a* K. X% ?            j++;( Z! \( M/ T) L" \" D& t
        }  l0 P, r# K% N5 y
        */
) j( Y; p6 U1 M. x  [8 U# Y& M8 C6 l/ Y" s  c, O. v
       asm(" nop");( V3 d. e: F7 i9 f- R; b

8 h9 S# P4 E1 U3 J       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 S# L0 U9 E% T1 w4 n2 }0 N
    }
7 |6 K- l8 ^& b$ Q9 H! [3 [/ e  |0 i+ D
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( O$ H! X' Z( S2 h  r
    //UARTprintf( "i=%d\n",i);
* y7 g4 Q7 C0 Y  N- C# Z+ z/ V3 m  j* h    //UARTprintf( "j=%d\n",j);1 |; l. _: F$ l6 J
    UARTPuts("Data mismatch in buffers.\n",-2);+ H2 ~: H! x( T1 E# _# k
    if (upp_interrupt_count == 2 && upp_error_count == 0)/ Q, l( K5 ^" ~6 U7 ?2 i7 U
    {. Z( p2 P# [0 ?
        for (i = 0; i<upp_frame_size; i++)9 b$ ~! j# W2 @& s# r. _* M
        {
2 l4 @$ h- y2 }5 o            if (upp_buffer_a != upp_buffer_b)
1 I6 _" t! q0 C! G. ~            {
: c) U8 w8 T$ l! B. _9 l: X" c0 _1 o: M                upp_error_count++;, y, _3 n$ e2 j& H
            }  w; Q! O, V  o4 k4 h1 t6 C5 q
        }
: ]- a: _3 v) W6 q    }" j8 `8 O, `! p* q  ^+ G7 Y- J5 {

) i7 w6 `8 t( Z4 V5 ~' p; x" E    /* 报告通信结果*/. k; F/ F, |0 l) {: b. L
    if(upp_error_count != 0)' |* z1 j  g# ]8 \
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* B9 n- f, K' A) v    else; A1 Y5 P- L4 j* h* b! j' x6 n; F
        UARTPuts("uPP transfers complete!\n",-2);
1 b  f) L* |* Z3 s! q7 {& F
3 N" I- Q  O3 N: h: t3 A    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 F6 S% ~7 X  \4 ]2 H6 Z
    UARTGets(ch,2);# h' _+ ]* T. t6 \0 S
    UARTPuts("\n", -2);  Z( \) F: p$ \$ K* z3 p
& q8 V* t( n) E- V8 [
    if(ch[0] == 'y')5 {+ }8 w! q! y
    {
; }- W( ^5 D. X9 g* o9 l        /*打印全部读到的数据*/
5 @& U; r" u5 ?6 V# c5 B, e        for(i=0; i<upp_frame_size; )
" d3 q3 u( e. e. W) [) w! |: ~/ |        {3 d' X& p# M1 K/ }4 q/ J
            for(j=0; j<5; j++)5 ^; h1 H1 h1 g+ s9 @1 B: ^
            {
5 f" Z. t8 k0 d, [                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; U5 |- ^2 b; x0 @  X                i++;
- D, B! }* E8 n                //if(i >= 4096)* g' V8 t/ p# F  _5 s* l
                //    break;# \: k/ a' {# n- E2 I* n
) S; q" b  x2 e) }1 k3 D1 w
            }
. g( S4 Z: y$ ?/ w            UARTPuts("\n",-2);
$ L& o* M6 \9 Y; Q+ R4 q+ \6 h# @        }
  K" S+ Z% b5 Q: q. m; g# W% j& Q    }. W. d8 B2 R* k$ p) }) k; o
; m! z8 A1 x$ r+ k) Q/ v
}
: q0 T6 m+ J4 A8 P1 L, {* I: G* E
: b6 u2 }/ T0 l9 P

# [4 @: Y/ u: k  m- G" {8 |' e
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" a) k6 M/ I6 z6 `9 q6 U
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ j4 H+ S* a' m5 X; c( |- N0 X, m





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