嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! U9 `5 s2 z5 Z* F. N9 ~
Void UPP_TASK(Void)
8 m# h' ?7 a! H5 u1 L% v2 A" K# E{$ s  Z6 A: ]/ `9 K& L

8 e) r  u* E7 O% P$ B0 q4 Y    int i,j,k,target_int_count=2;' M+ g$ {8 _: w% |- M3 C
    char ch[2];
( a; ^: V- @& P' ^5 b: r) Z! I, z" u5 A! o. i# }3 [$ r3 B
+ c$ t. h+ \3 N; S( `3 l, l4 @

7 o" h: X8 `7 B' @    upp_interrupt_count  = 0;& n0 g. o5 Q+ W$ g: G: D1 Q- g
    upp_error_count = 0;
+ u. i' w4 Q  _
; y$ v4 c) g# y3 B; Y* B    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" r: [% B! W$ T5 R) ^" w- \0 X. J    // Initialize data buffers/ K; E5 I6 a& Q/ [7 z5 s
    for (i = 0; i < upp_frame_size; i++)
7 [, q# W0 @/ |, k    {5 q; s# V- m- ?/ i# E
       upp_buffer_b =i;% R% m& d9 i8 u" P# {: H
       upp_buffer_a = 0xDEAD;- j7 f  A! \- f! a, Y
    }% X) D5 O* d. a2 o- B5 R8 e0 {
4 K! `. L7 Z! L* B& |7 g$ ~5 [
    //for(i=0;i<1024;i++)8 v3 y  u  v/ h* `! v
    //    temp=0;
3 t/ j) ~; T- ], y& p. Q9 q% N) {9 J! ?3 |& G) I; D
    //UPPReset();$ L, a  s( E! X8 y5 K% Y
    /*启动UPP DMA传输*/
- R; t) H  c9 y9 y, D# g7 _3 v" C( Q    UARTPuts("upp_prog_dma_i\n",-2);6 m$ g9 Z3 a3 G/ z
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% i$ p* ]& S) c  |; _% Z7 {( ?( `    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 ?3 n# i& i/ T/ M4 C
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  _% K& _/ e4 |* R% M
9 [9 R+ Z: B5 u9 S8 ?4 I    UARTPuts("upp_prog_dma_i\n",-2);& t$ I- O' k* [  P3 i% @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; ~, J: K! d4 R7 c
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 t; p& y! H, o- h
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 a3 s' p# f) r6 |" X" g

& G3 K  B3 J: M- [5 _) i8 A" d    /*等待UPP传输完毕*/
7 n, w+ T, L2 @6 p) f7 D: e    //i=0;
9 ?, [/ W- ]4 d# Q3 I2 j    //j=0;. N/ @1 p9 L% c! v2 ]4 g. J, S
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* }# Y6 B% g1 `
    {
/ S( w: H1 i$ ]2 i, S  j/ [        /*  测试UPP传输的同时操作普通DDR数据
. L9 s/ \2 J, s+ v1 h& e! O. E        temp=i;
6 V! z5 W  v  y4 V0 x2 S        i++;, P( |( N( M( o5 L
        if(i==1024)
, U6 E  c6 u% x: f1 I2 z" [        {, A; X! q7 B  a( a- A5 }- A; I
            i=0;
2 v( V6 X7 O! L2 y            j++;
1 C  A0 R! F/ S  S1 M3 M/ h/ q4 X        }
/ |, i: o* h' P% V/ s/ \4 j        */
5 ^/ r) T2 H: a+ a4 T# d
) C& X/ Y& Z4 f3 s& Y6 u% p' F. g$ v       asm(" nop");3 E* Y& O) r4 r+ @
% L6 |& _& V( R0 A1 b7 x/ ?9 Y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ ?" g4 A. d2 b. z" r    }( u  v) m3 G$ ]% k( m- J
+ j/ n- Z  o& H4 O9 \7 {5 u5 W0 R
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 M/ H$ L; _+ i    //UARTprintf( "i=%d\n",i);9 ]( d" A! S- y0 N9 A* D$ |9 n
    //UARTprintf( "j=%d\n",j);- J; M' a' U  h2 o" P* [2 s
    UARTPuts("Data mismatch in buffers.\n",-2);1 G0 C$ [, {) [; k, Y: \  U' ^
    if (upp_interrupt_count == 2 && upp_error_count == 0)0 B3 k) [+ T& }' d& ^' s3 ~6 m0 k
    {; @; a3 K8 R8 N2 X) H7 n
        for (i = 0; i<upp_frame_size; i++)
& @0 B+ ]; L% M        {2 M. J' z# m8 T+ N) d
            if (upp_buffer_a != upp_buffer_b)$ X1 Y6 L' j* ^) s( l
            {8 _6 Y3 j% W) F
                upp_error_count++;+ @0 P, G& r9 s
            }
  k; k7 r) g7 H        }9 f3 a5 z5 Q0 i) Q
    }( C2 |4 T( D7 \
" X# [) d- t( `& |/ C2 l9 `! V
    /* 报告通信结果*/2 `- u: {1 q0 f! z2 x: }
    if(upp_error_count != 0)! M* ?" W5 G! S0 I* c
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* U# S) \6 G# k2 }3 U! t    else
2 N* C- p- u8 H. }        UARTPuts("uPP transfers complete!\n",-2);  y: c/ t* C% C) L+ P/ p: Q
- z, _6 Z8 f# X! n: y$ |+ r
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 {, U  U8 `7 |  d+ a6 p0 d
    UARTGets(ch,2);
! Q7 w) c6 G/ a) E$ k5 I    UARTPuts("\n", -2);
! b2 o; d# J* S- i" a, b$ |
# w, h, T% i! s, U' d    if(ch[0] == 'y')4 B0 ?, e* y6 g% D
    {
9 e% @6 M( v  ~' D        /*打印全部读到的数据*/4 M" D( @& h/ H/ g7 _8 B
        for(i=0; i<upp_frame_size; )+ _, T" ?. U7 V( X) O+ l
        {
2 i4 W4 C9 i. @7 g& ]/ G            for(j=0; j<5; j++)
$ i& f: y" @1 q0 O% z0 h) f- R4 c            {9 M( q3 l! c) Z; l. r& U3 @1 y+ x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ ~+ B" \2 y/ S% c  r7 Q+ ~                i++;0 O+ `  V( b# o  D& t
                //if(i >= 4096). o" m' ^4 F6 p
                //    break;
, g1 J7 r, d6 ^3 j3 A) Q( u6 s  M; G1 x4 R. Y: \3 ~; v; C
            }
4 r. i6 @$ W6 n$ p7 U- v" N            UARTPuts("\n",-2);
7 @" l( H1 n: _) {7 M7 F5 T6 ~        }- J' q% ~1 f! D5 |8 O' U
    }+ {" L  ?0 U9 i5 {( |. l
& n6 A3 s. [5 G0 B: m
}

8 ?* r6 b8 T1 _! f; C; _  l
! w7 r8 ]2 ]; o/ T

: t1 \( B6 P# H/ {( {9 K
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! w( z# x/ D3 m" D

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 j9 v" e& y% S: |- I3 a( j





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