嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% k3 b; X6 O/ [0 s4 u; u' N: L
Void UPP_TASK(Void)6 @+ D9 ?4 G0 [% A1 v; L5 D+ B
{
2 W- _6 t4 l0 L% Q: S
- ~1 Q# I4 ?1 M- V: R0 c$ D$ P    int i,j,k,target_int_count=2;
  d: C- H' D! z% M    char ch[2];0 ^. d0 ]. U  V, \+ q, H

: ?7 `+ v6 C3 w: ]7 V, c8 ?6 l6 n. ^: q; T& d  L: u

2 d. D) B$ W/ e/ g    upp_interrupt_count  = 0;; c# Z6 o2 M) L$ T7 v% n8 L
    upp_error_count = 0;! X& N: L4 m7 k  D. H5 e" ]6 d( K' o$ b

3 j/ |- T% ~/ [9 g: e: J    UARTPuts("\tResetting uPP buffers...\r\n",-2);' [2 N9 n6 [  R& S; o& q+ e7 Q/ b
    // Initialize data buffers
. ?2 w, n; H- t8 n' D    for (i = 0; i < upp_frame_size; i++)" T2 F, J' E$ O# s8 Y3 u& b; i
    {
% @% I: [6 C- f7 `/ \       upp_buffer_b =i;8 K( k: c: C' C7 _/ g
       upp_buffer_a = 0xDEAD;) d* U, s! \2 h
    }6 X1 O) K7 x9 A
4 F9 v% D5 Q4 d
    //for(i=0;i<1024;i++)& |- a: w* M$ A
    //    temp=0;  I% |9 |# v: \
+ q2 D; i7 S% C6 K
    //UPPReset();, K/ m5 \) j% h9 ]! t1 r- P& }  P
    /*启动UPP DMA传输*/& ~) l1 {/ l% s
    UARTPuts("upp_prog_dma_i\n",-2);' @* \0 h! J1 j3 W& X
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 ]( R4 @  F, Q4 q; L) g    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ q& N$ r6 M6 Z4 s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( o! ^4 D2 u; p2 |. T
: u8 M% c4 s% H' w    UARTPuts("upp_prog_dma_i\n",-2);
; e! n( M$ k0 B$ ^% P* o9 ^    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 B5 J) Y- ]. T) P8 h    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ V. i/ c% ~9 l    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 r/ }6 z7 {1 I, `) H* Z/ u; C. z

8 O7 o" I+ i. R2 S, l8 q% d    /*等待UPP传输完毕*/
: I* z1 ]4 b' {+ [3 H8 I8 Y    //i=0;
4 k( r9 f% |* i! ~5 r6 ^2 H    //j=0;* _5 u2 e# }4 B- {  f9 U
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 P* Q& J( E: L# e+ J% i    {
  S* H; y+ L, h8 k( X9 o$ ?2 Q        /*  测试UPP传输的同时操作普通DDR数据' ]/ r2 F) ^% a' A
        temp=i;, E( O* G, s6 ]- ]) u0 @
        i++;
8 a' S* u: q" h* E% V# J        if(i==1024)
* S2 H7 C& c( C2 g  R0 V" K7 j& H+ {; z        {
7 K2 k6 g' o; B4 W. e" ]; I            i=0;
' r" a/ D# i/ |  I            j++;
5 Y- e  h  V4 f# E        }' G0 `& r( z6 F# \# R
        */* U0 }: Q2 V  g4 t
  e! G& a5 n2 ~# {( U
       asm(" nop");5 X7 P, j  x* {$ V9 I
' g$ S" {( I  u0 S  d. i2 W
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' J( K2 O/ Q* C  p# R! D: O    }
1 y! `% S) @% G" w
5 t( f  X& Z' D9 y    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ l  U$ `8 C- @
    //UARTprintf( "i=%d\n",i);' r- U  B1 {. i1 |$ y, X* P0 ]% \
    //UARTprintf( "j=%d\n",j);
  {: X6 o. n# j( a0 E    UARTPuts("Data mismatch in buffers.\n",-2);
, f6 I; H7 |+ w    if (upp_interrupt_count == 2 && upp_error_count == 0)
! y# ~% h1 a! P: b, w    {
. z( n1 d, g) C+ p        for (i = 0; i<upp_frame_size; i++)
% a$ G# Y6 }' |! k, G* D$ X        {& V9 U) g$ f+ g/ M  l! F( o
            if (upp_buffer_a != upp_buffer_b)* g0 f8 w2 ]1 ^0 [8 n7 @
            {4 L5 X7 p3 {1 h  ^* |
                upp_error_count++;
  e+ ?5 R( }! N6 A  Z# @            }3 p0 P! H+ F; W6 j1 j3 V6 Q1 T
        }5 f0 z2 G% [5 j8 [
    }. ?  I" Y% z; w2 g; \) c

% {9 l5 N8 Z/ Z% E' `1 w* b    /* 报告通信结果*/8 Z$ ?; `9 S4 Y  A. V
    if(upp_error_count != 0)
. X7 \8 |" _4 r- O        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 U2 ~, e/ b! I, S% M  H
    else" N9 H8 T7 B) X/ J" b1 N
        UARTPuts("uPP transfers complete!\n",-2);
5 y' S6 C; S) I5 j% s" _: K: r/ U+ |7 Y1 _
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& A2 Y$ P% c* {    UARTGets(ch,2);
- H/ A! x$ q6 J+ Y$ M& Y% }    UARTPuts("\n", -2);
1 ?! }5 T) s7 l# I! i, K
  R7 h% q! h$ H$ |    if(ch[0] == 'y')
6 C( y0 _7 m; W# n7 e2 y* Z$ |# w    {
0 w( v8 W1 m. e1 H) ~        /*打印全部读到的数据*/
6 E- P- h/ o8 A2 k        for(i=0; i<upp_frame_size; )
; Q, F8 b; o! S, `        {3 Y) _- C# o# V6 `" g: v/ t
            for(j=0; j<5; j++)
& l$ u0 b) @0 A0 `6 S            {
2 Q' E6 V2 Z* G5 z$ e9 s                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
! z9 D; s4 U8 T$ K* K                i++;
& y/ @+ C" r5 Q3 E                //if(i >= 4096)
8 ]2 M) R3 U1 Y1 H$ s2 F# h                //    break;3 ]; d' a4 J& ~
& \! b; {1 q: o4 E
            }8 L( Z& A6 k1 {1 A% L
            UARTPuts("\n",-2);
0 `4 t7 c" p) q* I" Y        }9 b& Y' }' m* X; S7 K( K6 S: O* T
    }
# h& Z0 X9 A9 s5 L. k4 M8 V. l0 @3 q( U5 N5 [
}

( @9 i/ C* c" r

3 m" X, z/ Z5 d3 b7 @# |6 e3 l/ r6 x* O6 A  I

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ a% \& j) K) ^& v# l- q
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 b  Z- e& X7 h0 x5 _




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