嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- K) B4 L: H' g8 ], d" T" V' |
Void UPP_TASK(Void)  B/ n/ A: w8 ~  {; F. U
{; L; u. s2 \  _: C0 d' S

# E' D7 ]5 A* j/ d8 b/ i& Q    int i,j,k,target_int_count=2;9 E) J; |1 J1 h/ q- M& r0 L) ]
    char ch[2];
) ~; Y! Z5 S! P% d  X/ g$ L, Q1 p0 G7 n3 S* q

  Y* S0 M/ w7 b" M! s" `
% T+ o2 Z; Z0 @. u3 K! Q    upp_interrupt_count  = 0;" T. f& Y$ o7 F1 r
    upp_error_count = 0;
4 m  o8 L  p- U3 }" x' ?9 s& ?1 T
  w) D" t" A/ Z( P' z. l    UARTPuts("\tResetting uPP buffers...\r\n",-2);  o5 Z' T$ g0 W' a3 b! q
    // Initialize data buffers
/ |* h( V& Y# B  ~    for (i = 0; i < upp_frame_size; i++); F7 }! F! w+ r( i8 ]. s9 g% s
    {
9 g" N% p( M5 b1 u       upp_buffer_b =i;
& H0 f8 y& ~5 C5 T       upp_buffer_a = 0xDEAD;
( L  T# M- b5 N$ L: i    }
- m) N9 |! ?* N1 c9 ^- i2 C' ]- n& \/ |' E" q# s
    //for(i=0;i<1024;i++)
. Y" X4 {# q  `3 R    //    temp=0;7 S0 |) t- v5 N6 }  b: Y0 o

. Q( g) C6 O& R    //UPPReset();
3 x$ b; e5 F- ]    /*启动UPP DMA传输*/
4 E) ^- i3 |) ]( O& U7 ~    UARTPuts("upp_prog_dma_i\n",-2);' m, j: Q% ]3 T: f2 ~3 b& O
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 J% h, _" k1 ?( k. ]! z5 z( E. [    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 ~! ~' C! j& T% `, G3 S1 e; A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);! Y+ A: ?5 g+ g4 }" q% e  g. W5 q: H
, ?  N0 w1 z$ D5 [) a2 P
    UARTPuts("upp_prog_dma_i\n",-2);+ Z) o9 A. g, N+ S3 G( M
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 K" G; u) B: w* ]- `! Q1 r
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( q4 f8 S9 M* I3 J: J& X5 q* d+ d    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* `8 S  f. v6 e) `. @% b9 d

: i0 t' }2 H1 ^- }, Q    /*等待UPP传输完毕*/
% \* `7 S' n& {    //i=0;" M5 X3 K9 V( j6 {
    //j=0;
) d. [, {: c2 N) H. U' e! {/ r    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# z* h6 S/ c" V; h2 f
    {7 @3 K% J& D6 B8 s: J! R
        /*  测试UPP传输的同时操作普通DDR数据
+ S3 v: F2 s! h6 a4 N' Z% h6 N1 |) o        temp=i;" q0 F3 [/ d2 ?+ a) H# `
        i++;) m( a) U' P6 |9 F, H% [
        if(i==1024)
. D9 `& v7 `2 [* E8 ?" d/ l7 b        {: @' T8 d; k& H- c6 g% K3 d3 j
            i=0;" W( G" m" U* K# C' ?  Y8 x
            j++;
" q# d, {) {- q1 E        }
" |, ?2 ?0 j' {3 {& t: m        */  }# @7 f9 U: {2 t. U

% J" P# y2 y: s& J6 F       asm(" nop");0 @% H0 o; t# x
( d# }" ~" R- |. g7 l, ]- `7 ^
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* \0 r; n: k: d6 a    }7 @. ?* c2 w) w' A( O( n

* y  t7 b& w* d    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 I  Z7 @' h( O( Y% h
    //UARTprintf( "i=%d\n",i);
& e* S" x; E7 z# l( B    //UARTprintf( "j=%d\n",j);' J/ {4 b' N3 ^, _0 [
    UARTPuts("Data mismatch in buffers.\n",-2);6 l; h% ]) G9 ~- ?0 A$ l
    if (upp_interrupt_count == 2 && upp_error_count == 0)* q+ ~' j* k2 |1 w
    {
, t3 [* O7 _1 b# _" J2 f        for (i = 0; i<upp_frame_size; i++)' i, w( Z9 I  l2 }- F4 R! y9 s
        {
- D8 F" ?" |- f( N2 }6 I            if (upp_buffer_a != upp_buffer_b)/ {2 K: l3 v# j5 B) u; r2 g
            {! _3 F! G7 q. {/ m
                upp_error_count++;
: C2 d/ T7 Z0 V/ s& }% O/ e$ p9 A            }  f; q, ^& G# x6 v7 ]
        }
- p  I3 ^: w# Q! y2 s    }
6 d' G3 a5 N5 C2 O3 n9 x; l9 w% h3 P$ ]% z: `: f  _# X# w5 J
    /* 报告通信结果*/* K* O5 _% n0 d6 w0 W3 u" ^
    if(upp_error_count != 0)
& L0 c, `0 R' N$ O; [        UARTprintf( "upp_error_count=%d\n",upp_error_count);
. @  t. g. r6 b" h6 T    else3 [- W0 N* c7 z2 ?1 O0 r0 K
        UARTPuts("uPP transfers complete!\n",-2);: E2 P( ]: Q/ S* F" I
8 O+ `* }! P& W- |4 z
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 i! \  `0 _  q, J    UARTGets(ch,2);
8 c5 q0 ]$ Q; A6 B' T8 q9 t    UARTPuts("\n", -2);
2 `  X6 Y- r: w0 a( u1 a$ e. j# \
8 h! h3 |7 A+ k+ ~  w* c    if(ch[0] == 'y'); ?( H% T% m6 `) N
    {
# K8 V( x2 f( G7 A% R  V$ ^2 X        /*打印全部读到的数据*/7 n0 r. S9 V; E1 m6 D& N7 P3 C7 S4 x" q
        for(i=0; i<upp_frame_size; )5 i. }  W$ j: E$ O4 n' \& y
        {
1 s& \$ |8 _( c9 U9 A            for(j=0; j<5; j++)
5 ~& w8 _. ?0 R/ U7 H7 [: }            {
# H5 E. F8 ~% |9 Q4 ~: w" F+ ?                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);1 T5 e, ^5 n/ |3 R/ ^) _; F4 G
                i++;
$ y0 k# @3 t+ u" [2 X                //if(i >= 4096)
: _4 [; |3 T7 {! C$ D/ l; _: t                //    break;
% j/ m9 m% @8 J5 ]1 K* E2 ^9 W
  r3 e( @% K; h/ i            }8 l- L: h7 P3 @; ~% n
            UARTPuts("\n",-2);# k9 J7 J" o4 Y4 }
        }7 O" E' D1 E- P% ^
    }! M/ v( E( C* K6 c& Y

6 k; M" Q- y; w* _}

. u9 j) |$ W: c# X3 B

3 \# k9 ^! H, C! Q* M( A* j: F8 x5 N: S. U& k$ f

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。3 @+ O: c2 N5 R* N, m

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ L* U" `: Y' g# A





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