嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: `( C9 E$ V8 \' Z, U1 J
Void UPP_TASK(Void)' N* O6 m( I! g" ?
{
5 n# k' D  Y. F' S' q9 V/ T: X  h4 a$ m' d8 X* H. w
    int i,j,k,target_int_count=2;% c% f4 Y; t2 t4 ^' v: V
    char ch[2];
- V: e1 @" m( W4 |- \1 o/ ~9 c7 Y8 }& ^

! o; G( q' I8 l9 @( D' Z4 {
+ ]3 `- F+ l2 n# }    upp_interrupt_count  = 0;( X6 q* _- D3 t$ g! k
    upp_error_count = 0;
% p' N2 }, R0 E* N: K; b4 Y
  r* Q) q/ T# q! n7 ^3 e2 v    UARTPuts("\tResetting uPP buffers...\r\n",-2);* v5 ^" m# ~, }- J" D
    // Initialize data buffers+ k5 r6 e2 p/ X& Z' p! V
    for (i = 0; i < upp_frame_size; i++)
/ X1 C0 q  q+ a% o    {; k/ }4 `' W: u
       upp_buffer_b =i;6 R3 v, o5 k" \2 Y4 o9 A
       upp_buffer_a = 0xDEAD;" j1 X' \. ~: ~% {+ a
    }6 _* G/ h7 |4 u  |# w7 \( q

+ g% s7 E3 ]( L- U: H# z2 }3 @# q9 Z    //for(i=0;i<1024;i++)
6 e" K" h6 ~' A8 p( n    //    temp=0;! w6 E) z+ a5 k7 u# V7 i. n
+ l/ K# b) b$ O" E( f
    //UPPReset();
7 J+ g5 e0 I( R( o8 K$ u/ ?    /*启动UPP DMA传输*/
; \' f; P* _9 C+ c    UARTPuts("upp_prog_dma_i\n",-2);
% _4 \1 s( v3 M' H/ |0 u& `8 _    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ R  q7 C8 O3 S: B  f    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 {  @3 N+ |1 }+ L: |$ c6 B    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ t* ~9 h1 k1 [* O! P1 N! @9 e7 j& V
    UARTPuts("upp_prog_dma_i\n",-2);
4 P  C8 h) \, D9 C* [% Z4 b+ h    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  C/ b: @( b/ X; F$ V    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 ]4 \9 n7 e# d; Y8 `3 B- v    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) y) k1 A' J" s: _( [7 ?; n( P
    /*等待UPP传输完毕*/! E: j- H- t' p6 r# e* Q
    //i=0;
  O. [* q: k( U    //j=0;
( G# Z. c0 J. [+ x4 W# _, k- d5 c    while (upp_interrupt_count < target_int_count && upp_error_count == 0)3 D) T& x/ Y  X0 L& d& E' f* [  ^7 F+ P
    {" {% s* D( V8 }7 [
        /*  测试UPP传输的同时操作普通DDR数据0 Y( x9 |0 k1 ?8 F- H; Q
        temp=i;
" |" d7 R1 R" P2 ]4 Y, G  X1 i        i++;
/ m/ i# u7 J) p        if(i==1024)
2 f0 e" Y, ~; b1 [' R5 V' a0 T9 f        {
  ~2 @% d4 Q$ l4 k, U            i=0;
8 }% _! I  K, V& G& c. v4 s            j++;8 _2 V$ g/ p2 z: M
        }, {8 {' N1 W% O
        */
4 O, f. p. o' q* M( |4 U& r6 N3 X6 A4 \6 t, O1 b9 R2 O
       asm(" nop");. _  K5 S7 v7 I1 a6 c& `9 [

: ^& D! c& ?; ~1 R, T       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- G- z* [1 r0 w    }/ y+ c7 D5 c" k6 q

. T- c7 s" r8 g& V% C    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 H5 u) I+ a* ?: b6 ]" V    //UARTprintf( "i=%d\n",i);* N# k! i! p$ c
    //UARTprintf( "j=%d\n",j);
3 j+ `0 R' n+ V& u8 l8 @7 X    UARTPuts("Data mismatch in buffers.\n",-2);
- g) s7 e" R% L% y- @/ D) P    if (upp_interrupt_count == 2 && upp_error_count == 0), _( g! t  |  O5 {
    {
9 m. O1 {& Y: ^6 ~* k! Z9 c/ s) w        for (i = 0; i<upp_frame_size; i++)
' A6 K) U0 J& D( O$ {        {
, O- t. g* R3 f+ q8 b0 u5 `            if (upp_buffer_a != upp_buffer_b); v; s) F- h7 ~) i- d- d/ o$ B) o
            {
& o9 u& l; j! h' D0 p; p                upp_error_count++;# R2 U. `( n+ w  z
            }- x6 H5 |8 X; g  X% j+ n! M
        }; ]2 l2 N# t3 z) D
    }
* z- C/ i& c3 _0 _2 Q9 x1 W8 u& Y7 p( G5 ~
    /* 报告通信结果*/
8 z, _1 J9 ]1 O& Q, {% k3 _) w( K    if(upp_error_count != 0)
4 O3 _) Q7 L2 Z7 S. Q* X6 {+ n5 J        UARTprintf( "upp_error_count=%d\n",upp_error_count);! A2 O& Q2 F2 k& J$ R- S" U' P8 ^
    else/ I" _: ^  \1 P" q
        UARTPuts("uPP transfers complete!\n",-2);( s3 l3 D0 Q0 T! m
% m! N: D2 S0 X  F9 b
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  w; ]& o' M! f
    UARTGets(ch,2);$ g! S0 R6 D( M( p+ k4 d; J
    UARTPuts("\n", -2);; t! Z4 o8 \6 |

/ I8 e- c+ r; r8 J$ f    if(ch[0] == 'y'): P; S2 H0 k$ O3 s' Y* b
    {( E6 ~& p  a9 a+ M& {
        /*打印全部读到的数据*/
7 v( @( q- u9 z' m1 \        for(i=0; i<upp_frame_size; )2 M. K. h% B% z& \' g3 k, K2 H  G1 K) ~
        {
, t2 b+ u$ V# H- f0 D* m0 r            for(j=0; j<5; j++)
! F$ D  \# T% p" @            {
/ ~) }; ]4 r# v& D                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" e5 i6 x  `8 R) j4 J
                i++;
8 N; |: `3 u- j, W% f$ i" A, ]2 k                //if(i >= 4096)2 e7 g0 M1 }* N
                //    break;3 {1 y8 C3 r2 J3 B5 n

+ v7 k3 d" F$ e# Y            }- |, H, n- j: \
            UARTPuts("\n",-2);
) L+ U) q2 j1 Y        }
6 }# V5 n7 e, E! m  m    }; l" t" Q  N) i  d5 r. U

, N/ K+ H# k2 ?; X7 e: [}
; h  b! x7 T# l( |$ `( q

2 W1 ?, i6 w. z% m! a
+ J6 t' A. O" L3 z
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. f1 {# F+ `1 ^+ e

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ V3 u4 D) K" R7 \  u




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