嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 H" t, h5 }/ R& p1 @' d1 h& k
Void UPP_TASK(Void)( q, c% c: c. {# s
{# c  @3 n  r: O/ k% v7 \  s& B

, x% ]+ a/ Q" ^- J8 b* B, T$ O    int i,j,k,target_int_count=2;
7 k* ?9 y; ?. n8 J, H    char ch[2];! [4 W1 }0 D* K, Z! M# v
; ?/ g) S- o. g( T' G5 `

$ ^/ E! v) h! P2 d& @: C/ S9 n5 O% c, n/ P
    upp_interrupt_count  = 0;
  N( g2 y0 P/ E* |  @) g  L$ ^    upp_error_count = 0;
+ g* i3 P; L, E: t/ X2 }( X) w) i7 y  v" f5 @3 q! O/ d& M% H  r
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 [- K" G$ A1 h0 B    // Initialize data buffers- n$ i# p" p. f6 x8 `; y+ o/ Z
    for (i = 0; i < upp_frame_size; i++)6 @; Q0 H2 ~  o7 H/ j+ L( C! G5 C
    {
% X1 M  G3 t. p9 H* X6 m       upp_buffer_b =i;
, B5 z: Z( H+ W4 t$ L9 v  P: F6 B2 o       upp_buffer_a = 0xDEAD;* P4 m/ c. X6 {$ V& p! T. d
    }& v3 i+ r' N  u4 x7 \
# S( D' f4 Y  O) {# b
    //for(i=0;i<1024;i++)
& ]: e; C1 O8 l, ?* I! i3 q    //    temp=0;, z6 R% t, F" A$ ~
7 ?1 O" H, T! ?
    //UPPReset();
9 D, \4 ~0 w% G' q4 R1 ~    /*启动UPP DMA传输*/
5 G$ ^8 r3 N+ e1 c. K    UARTPuts("upp_prog_dma_i\n",-2);
2 V  Z5 ?* @3 r% a0 }  H7 e% s  x3 h    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;) F+ Z2 D/ n# B; H2 r  x9 y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 q, @' [; ~: U0 n
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 B( N+ p- z# W9 h

8 z! f1 T* j  B) `2 L8 o    UARTPuts("upp_prog_dma_i\n",-2);% t1 T0 S# E: s% c* e
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, N; a/ p. h' O8 k  M; J; n
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- q& o4 Q/ D& A* P( e  c, N
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* K1 B( J  V5 j# z  L. T" a0 _, w3 C; L  ^) d: p
    /*等待UPP传输完毕*/* P+ d- X& c8 O0 M; ]* b- S
    //i=0;  L. v% w$ C- S, v0 S1 x! K# x
    //j=0;
2 h( P1 h) H9 y, V    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! d1 T: I1 V& v1 y" Z% {
    {$ Z1 P& a# I  J8 }- L
        /*  测试UPP传输的同时操作普通DDR数据  |8 V3 r: }; N
        temp=i;( C. l! x! e5 h: M
        i++;  h5 R+ W  Q( K7 o1 @9 f
        if(i==1024)6 m& K0 j: q  M
        {
4 K+ Q0 a; X; N) ^1 G3 K# |            i=0;
6 x1 w3 O1 o. [) s* w            j++;
4 f# n; G. V1 c) m. m8 r        }
. U8 ]# e  K+ n2 U& P1 p- W/ v  ~3 W        */- ?1 g6 R7 D1 G( J& ]$ A$ O
, j5 ]! A& [9 M0 j* v
       asm(" nop");
7 o& S0 T0 x- j1 _( M6 L9 {' S
: F2 L. y5 F4 ^       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 `  J$ K7 i; T2 z% u
    }
: O4 H7 D& ~$ ^! q! v3 ?1 ?2 S4 N) [3 r) z: I
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 M1 m& e5 p" S    //UARTprintf( "i=%d\n",i);- o' r4 Y1 @8 V% K! j0 o
    //UARTprintf( "j=%d\n",j);
6 W, m' k4 J+ }, |9 A( D1 P, a    UARTPuts("Data mismatch in buffers.\n",-2);( I) v/ J8 ]9 h; A
    if (upp_interrupt_count == 2 && upp_error_count == 0)
; y6 g7 U- b" d    {
- [1 }) N! f: a0 B2 V' P4 q        for (i = 0; i<upp_frame_size; i++)
. R$ u! v" V2 d, I        {
& G. G. C  w1 m8 j# ~! W7 ]            if (upp_buffer_a != upp_buffer_b)% F0 i$ i; V$ n# P8 J* J
            {  @) @' V9 ^7 Y. X# ~' }
                upp_error_count++;
+ B- J- k, s2 g            }8 R9 m" h9 |7 `% I
        }1 w# a$ z+ W2 l( s1 i  w# _
    }4 m* F; y$ h  i5 d- M& a2 b" y0 u

" \3 I, g$ j, B6 f4 Q* q- v    /* 报告通信结果*/
% [' A5 Z% z( U- `4 V    if(upp_error_count != 0)* m7 n# _0 ~- R/ ~+ N3 r! {/ E! c
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 |  I0 n/ Y' G7 v+ _, G    else' j5 N& C$ u7 F3 }$ ^, ]; X5 H
        UARTPuts("uPP transfers complete!\n",-2);
+ X# b6 x2 f5 z& z+ s3 v+ m  _
) Z; Y( Y1 [) k' ~4 f. @: Y! j    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- \: E9 R1 k( m9 f( n9 H, y
    UARTGets(ch,2);
* y- U2 b8 O: }2 b' ]  j2 N    UARTPuts("\n", -2);( @+ d' @/ b0 {6 J

3 s4 v/ g- P2 g$ k    if(ch[0] == 'y')6 m' V9 h" }# @% d
    {2 g6 ~$ ]' y! D$ U7 j. Q* u
        /*打印全部读到的数据*/! L# d1 p) r# R7 W2 o- a' W; j
        for(i=0; i<upp_frame_size; )
3 ~& q; b# j/ j: k% n) E7 u        {
6 h, t% j* T" K: d            for(j=0; j<5; j++)
! e, u) i- F* M  w/ [            {! P4 O% p* J# h' N
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) d" O. i/ B! ~3 E0 k                i++;
! C* S" k  L6 x- {, n                //if(i >= 4096)
) d% x$ ~# u* y+ _7 }                //    break;
0 b2 I: W6 J4 r* d4 j% ]+ r% f, g4 d  S8 r4 c" m' {" |
            }
9 K) w7 p" b9 b( C3 V+ A! ^            UARTPuts("\n",-2);( B5 S3 d5 }! S' s4 n
        }0 F; q1 f. m! R2 ]1 Z" J- ]* L
    }3 E" B# W. Q7 T  H

! j+ b6 Z2 o. u" W% Q8 ^}
' d5 ?2 T5 `9 ]$ r" M% P
& |0 ~- R: o( c9 f' m6 O
0 E5 f* v- f% {' }8 K

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。$ O- u# i( i$ `0 |% A

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 A: Z# N  W* k& p, K" P0 Q6 x




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