嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 D! g; R$ y" h1 l) w
Void UPP_TASK(Void); m8 U# f- a4 i
{2 B" D$ X5 d2 W1 A0 Q9 \  P- G
4 O8 H- t9 C3 s% |; t; t# s& b* M  ^" k
    int i,j,k,target_int_count=2;- Q1 d- k  f2 X* b4 H: d
    char ch[2];
: z, ]' M$ e4 J- a- X
+ S. @7 {% h/ }$ g3 _6 p1 h+ v, X, B/ e1 I# ]( N3 D9 N: y
1 Y1 d& P6 D+ h  W
    upp_interrupt_count  = 0;- c5 N: [3 ?6 g9 k
    upp_error_count = 0;, s2 j# Q/ f  U2 q3 e9 \
; G- ]4 E- L5 E5 ?  K7 b: @7 j
    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ ~* S* l3 X- R
    // Initialize data buffers
0 H0 F, r& x4 Q    for (i = 0; i < upp_frame_size; i++)+ z' `$ T; v" a% f
    {
3 N: J! q% l* {. n/ u/ A( e       upp_buffer_b =i;6 y: I9 P' a! c" k. v
       upp_buffer_a = 0xDEAD;; M" H' _  W: W; Q6 s. f1 V; D
    }4 B9 v3 i6 v2 s8 x& l

% R7 r2 Z, c% h5 z( ?    //for(i=0;i<1024;i++)
6 ?$ J  w: T8 M% k    //    temp=0;' c2 T0 u! B; d" z) G5 q
' R. B% L. h7 z: Z" E9 b
    //UPPReset();
; r4 W' m( k% u- y% [9 ]    /*启动UPP DMA传输*/
; G$ K4 z, B6 _1 _0 c) Y    UARTPuts("upp_prog_dma_i\n",-2);
9 C3 |* a7 O9 w  h- [3 y: c    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 {% L1 `4 A9 e4 S    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; |/ [" y" t, Z, h! r
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: z" y* t2 I* }& I5 l& Y' d7 W
- c( ]  }* m2 O/ f% V6 n
    UARTPuts("upp_prog_dma_i\n",-2);- [; T1 |7 @6 K; u- q4 g& n0 [: s
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. W0 l8 h0 S8 Z1 U8 C* N; f9 A    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 ^3 `$ B+ `' G: s, c0 n% F
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 \. X$ @. e9 l! l$ [2 E
. f5 ~8 ~; D. b* Z0 z# Q) M    /*等待UPP传输完毕*/
9 H) r3 f1 e- g: l    //i=0;
6 R- l( y3 A4 O  x0 Q) c& e, k5 h    //j=0;/ G5 e: }$ v3 J; F0 ]( }) C8 ]8 j  M
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 f* ?: @3 `) b
    {8 i! m. _9 M* v( {( p
        /*  测试UPP传输的同时操作普通DDR数据
$ V$ o2 x) W0 U        temp=i;
8 j7 i1 K) S5 W        i++;- _0 J7 m8 Q! p& D1 Q8 d4 `
        if(i==1024)
+ H4 o5 K; n' _4 r, O* P        {
; Y% G/ J: w6 a% I3 s! w) ~            i=0;
& ^* G% `% i5 r            j++;; v& a8 _/ X2 p- M6 p
        }4 \6 }  U2 ~1 w+ Y) B4 F4 {9 P
        */! n$ p7 A: p7 _& c) u6 T& |! F( Q( C

& v+ g( v4 ^- C4 r       asm(" nop");
8 S; u. C' c  f' b4 z" ~9 h4 U& C& E; U) V6 x( w
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 {: r, R0 W. @1 b    }5 J0 r6 W+ G8 E3 Z
0 L2 Z/ S* Y  Y3 H; r
    /*检查UPP传输的数据是否正确 (loopback modes only)*/' S- w, b" u9 ]
    //UARTprintf( "i=%d\n",i);/ {0 F6 Y; k, n
    //UARTprintf( "j=%d\n",j);
  K$ Z. p' j0 }* v/ W* z    UARTPuts("Data mismatch in buffers.\n",-2);
: B2 Y2 ~. j9 x: y    if (upp_interrupt_count == 2 && upp_error_count == 0)
# k! i1 f5 [4 Y) `. z  w3 ]    {- K- r( a) t* ]: z
        for (i = 0; i<upp_frame_size; i++)
  c# _$ q( o/ C        {* z8 M! D1 [1 S
            if (upp_buffer_a != upp_buffer_b)
1 W+ E' {1 o# F7 Q& V- K2 V$ I            {
: ]: F4 D. d+ L7 B/ }+ x                upp_error_count++;) d  }. R! l7 ~  ^- p1 B6 w
            }
( x3 i! ]9 x& R8 P: L        }
0 `4 R( e5 \6 r% H, g  Z5 @* m    }
8 [5 k+ W/ k8 c% k; N; F. o: ^0 Y% c% o9 ]
    /* 报告通信结果*/" t' u- e& d- [7 A. o3 }  X1 A! d
    if(upp_error_count != 0)
( [# m5 L& ^9 P6 Y; o4 s        UARTprintf( "upp_error_count=%d\n",upp_error_count);8 ~6 x# L$ A8 `& o
    else, R5 E/ a0 [, ~  q! J1 M
        UARTPuts("uPP transfers complete!\n",-2);3 {) P, V* z' c$ A5 N4 I

* R4 J$ j0 B" |* m, C/ i0 c    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ X0 h  D3 X/ V5 N
    UARTGets(ch,2);
* ]+ G3 E3 U! K. D% J    UARTPuts("\n", -2);% a. |2 v9 |9 J; l: v

6 q1 P3 D) o8 N1 R& v    if(ch[0] == 'y')
  V& t. S# \  p- ?. J( `/ u  J    {) Z: Y. N6 J3 r7 @6 \
        /*打印全部读到的数据*/
1 E1 {5 S& A1 l- X" b* d        for(i=0; i<upp_frame_size; )
9 g- m0 I- e$ U  ]2 l        {: i+ k9 c3 R% g$ e% ~
            for(j=0; j<5; j++)
0 E6 X3 d/ }, `% L- s            {4 o. v6 X" ?  @4 o7 J
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 Z0 @' r5 \6 U6 z, W5 R                i++;2 \* W3 d  k; _) r: W8 @
                //if(i >= 4096). I& t% {9 ^0 X7 R0 i
                //    break;
' p5 M2 e- D1 K+ r% r$ s9 {2 j; C
4 `5 _- H/ x3 Y            }
' E3 x% _  m- T, N  u  T, S            UARTPuts("\n",-2);; a( X' G. t/ F
        }# K8 Q3 c! s9 E
    }* p: F3 m6 D* R; H

/ P, q* l4 i- ]+ |}
7 ^7 L* i7 f! V0 t% A# T
" P) m. o/ r& e% H% j

$ U6 o( K$ V  K6 N
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: ?: ~# v& y# k% C) {- _2 _2 y3 L
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ X# `+ N! ?  U& ?2 D




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