嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?5 M) e6 Q2 E- D+ \: e' m
Void UPP_TASK(Void)
5 R0 r) ^# ]. E% G# [' m/ T{
# u$ V; W* c. j, B1 n: X* s4 V6 F9 V9 K$ A2 N* {: U
    int i,j,k,target_int_count=2;
3 C: n+ V3 v' m$ X: g/ |    char ch[2];, |6 g2 h+ B" g8 ]

' }) b# B. g. m& y1 a% {( E4 m
6 w& G8 |; ]3 S0 X" {( D
- C* v  _" C" O* G    upp_interrupt_count  = 0;
% ~" r# i* ?; K# ~' n* r3 {    upp_error_count = 0;8 q0 ?: Y4 q; ?

. c; O% `# s2 F% O/ \2 F& y    UARTPuts("\tResetting uPP buffers...\r\n",-2);! s% x4 w$ N  V
    // Initialize data buffers
/ H# I- R. ^2 k+ W; i, [+ B- q7 B    for (i = 0; i < upp_frame_size; i++)0 [# V4 h4 W, h. V: d( r
    {% K! l+ \2 `7 D2 j2 z
       upp_buffer_b =i;0 N7 C' _5 @) h! ?- C+ f0 d
       upp_buffer_a = 0xDEAD;
1 |1 r5 Z+ }* @" Q- q    }4 S# V* t  e& H# o; h  U# @2 E
1 F# G: A) J  Q& p8 Z- B2 ^
    //for(i=0;i<1024;i++)7 U2 Y2 S, A( v6 f
    //    temp=0;5 S' B' ^% ^! q9 e
: Y* Q, p3 F! J! m( ]; p
    //UPPReset();
- l8 \) H9 Y7 U0 B! Y    /*启动UPP DMA传输*/$ R- b: b# U( X1 v$ U8 {" L  H, [) _% H
    UARTPuts("upp_prog_dma_i\n",-2);
- V8 F( v4 k4 ]  a    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& C* [, E' T4 I( w- T! N7 L8 r/ J
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 B7 @; l6 d+ F3 r- H
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 y9 y, i1 f, i' r* V, M5 B1 A* V
    UARTPuts("upp_prog_dma_i\n",-2);0 w3 w% `! i# a, l" E! a4 C" z
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- {6 h0 `) }- T1 j4 q/ X
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 }' a6 Q8 G4 |" h' e
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ Q. c! X! V$ j- Y: a) [, C3 N: X8 N8 B1 K6 M- `
    /*等待UPP传输完毕*/
: y% @/ z5 U) n  b' w& N# ]! L; a& E+ o    //i=0;
1 k# e" f4 }& _* J- q" J    //j=0;
* J( K4 O2 w' ~4 }0 h% E    while (upp_interrupt_count < target_int_count && upp_error_count == 0)) ~3 [* m$ e* F+ }1 W! i
    {7 ?- F$ Q" n0 `: \' b
        /*  测试UPP传输的同时操作普通DDR数据5 L0 U1 D8 c( r# {
        temp=i;, R9 D3 `0 ?! }6 ^
        i++;
: E3 m1 a" ~$ U: Z6 R# `        if(i==1024)
: |; L, U, R" {8 h9 a        {4 I! I8 \5 Q. j
            i=0;  |* ~/ Y+ C! d1 \
            j++;& S& Q% H% p, Y, `) c, c! f
        }
3 `, a) I8 o, `3 \4 {/ |1 V  S: L        */9 S. d5 f0 [2 K8 g

7 u" D( q# f" a$ P( J       asm(" nop");
' k' [& w$ E$ ?+ j: }# W7 q2 {
- _- ^% P* {  R: O. Q6 g       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# {; Q+ F2 I% {    }) X* c& h6 F& |

. y3 {9 h" F8 n    /*检查UPP传输的数据是否正确 (loopback modes only)*/- p: e8 m! r( H
    //UARTprintf( "i=%d\n",i);
! |: T5 I, ^) I( E    //UARTprintf( "j=%d\n",j);
* P, e8 x, W. [+ J  `( V- D8 J    UARTPuts("Data mismatch in buffers.\n",-2);# o9 {6 ?' D* e7 l; Y: b
    if (upp_interrupt_count == 2 && upp_error_count == 0)
/ j# ~2 }  `3 Y( V    {
! @  D: W$ `& v( D. Z+ ]        for (i = 0; i<upp_frame_size; i++)
8 a' E9 K; Z! b/ h: Y        {& @! x0 R, J' b( |
            if (upp_buffer_a != upp_buffer_b)
8 t4 f0 u# @9 D" |* G            {
% h! h, T, e( R  @                upp_error_count++;. `! `9 u1 z2 Z/ M: y
            }) n0 o0 z. W. A! ]5 k1 M8 v. K6 ~
        }
+ k, Q* X( W4 S: h2 p9 C( z    }
0 {) Y( A2 ^; p; \8 O6 |: K9 q* s- v2 R0 i7 {6 F8 E
    /* 报告通信结果*/' f% }2 F5 e- p9 D7 u
    if(upp_error_count != 0)
/ C+ c- {" D" B" p% r8 i) T) [        UARTprintf( "upp_error_count=%d\n",upp_error_count);
& S+ q, ~5 n# B6 k0 p4 ^* ?3 R    else, |! w5 h8 Z  z% ]/ \7 F5 f
        UARTPuts("uPP transfers complete!\n",-2);
0 Y" {  @6 ~! K* c( Y/ I  u* a
/ i* \6 T8 m. W$ P& L$ ]" H1 {    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- d) A- X$ F) c5 _1 j
    UARTGets(ch,2);
6 {  `& T- b- n: l3 d    UARTPuts("\n", -2);
" y$ r" B1 ^+ h
9 J0 E$ b* N) G) ~: E1 c    if(ch[0] == 'y')
: ~/ [5 a1 j# o! W& M    {. y7 m$ u/ E3 j
        /*打印全部读到的数据*/
" ^1 J3 {  `- J$ S3 q2 u8 L        for(i=0; i<upp_frame_size; )
& X1 p1 T% ~4 s& N% W' T        {8 t  x9 H/ ]: i$ M. l. E
            for(j=0; j<5; j++)
% b5 n% ~1 s6 |' ~$ T            {
1 I; l7 ]5 K3 V* J1 d                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
" G) b6 ]# h9 \  A2 }                i++;
/ y+ s5 l" g/ d+ e, S                //if(i >= 4096)
. d8 r# l% p% H- l( ~$ D7 J                //    break;' h' q/ s; |( I

; e) E  w7 e( ?3 _6 b5 _0 Z            }
  m; v1 c6 ]3 F1 ]" L1 n) P$ U            UARTPuts("\n",-2);
2 ?8 \8 w" L5 r9 {9 o' H  \        }
: x/ c3 {6 ~5 e5 w; P. ~; H    }
5 x( R% C/ W3 k, a# M; j3 Y& y( D" H
}

* v/ a, i0 q" Q; _, G7 {+ s

3 c1 ?) H3 f. G* C, Q3 a( t% @& ?) ~4 i: n* K

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 i) A* C6 X  J' L3 h% t
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 s& x2 p0 }4 q) `" g





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