嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ y5 e2 m/ E, a
Void UPP_TASK(Void)0 d. k! g" O( t* q
{
  G, E% `* V9 q  M, W/ S, b  y1 p$ n% _/ ?! P: A' ]$ t
    int i,j,k,target_int_count=2;
# t* T6 y  Y7 j. S+ p2 P    char ch[2];. @; S9 M# b5 U8 w& B: R$ C

% V# ]  E5 r# h( R( B: n8 E, J( j
3 |0 u7 \) B6 U" S0 i- ~# O
$ H0 n3 I* t& O1 Z2 M# `2 q, W5 V    upp_interrupt_count  = 0;
. T' m; i- f0 J    upp_error_count = 0;
8 E# m- }; M" Q& y" |2 Q7 d) B$ M# ]0 n8 B' b6 ?# Z
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
' G7 l% W0 k) z    // Initialize data buffers; c% K( Y5 d+ O
    for (i = 0; i < upp_frame_size; i++): i/ v; Q& d& D! _, H: \' _
    {
0 d2 z7 C* @% [5 q/ y2 R, o       upp_buffer_b =i;8 w2 ~8 v% e4 @  O( L, j
       upp_buffer_a = 0xDEAD;
" Z( [/ V5 Z9 _! I0 F% ^4 e% Y    }5 R1 u0 U% `. c

% u' o3 e( ?' ^( s# |. _& l$ y' d- _    //for(i=0;i<1024;i++)
+ w  W1 y- [# r/ }5 b- z/ f' F    //    temp=0;
/ w8 n  e3 f: R
9 i6 G$ X3 K- ?! q3 t    //UPPReset();5 S0 ~3 T1 F+ {. d9 I6 r  @  I
    /*启动UPP DMA传输*/$ J" s2 H) }6 Q6 c
    UARTPuts("upp_prog_dma_i\n",-2);3 \  e$ e0 u) W' {) j8 r( K
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# @0 U# _8 ~8 n7 t  O
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- X; V2 D4 Z7 M& ?  d# r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% j* |/ b( j1 e  _+ r1 Q) N* |/ }3 |+ {2 M# V3 V# @
    UARTPuts("upp_prog_dma_i\n",-2);' d1 O0 d: O8 C# q' l6 X( i, l+ }
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. P) `  C3 H2 s6 F8 R( K    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 E  L0 @$ o2 V& _/ g, K
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; q/ Z1 u( y. e1 \5 y
, A, M) ?* S& l$ D8 M2 P! ?    /*等待UPP传输完毕*/3 a# C! B! ]7 [7 L
    //i=0;
0 e3 j5 M: y" }. [  k    //j=0;
, A$ j1 i; f( P$ I( P- T/ t2 B2 o    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 A" S, a8 m" ]. r, U8 Y    {
# D1 y! b9 b$ q/ v# d        /*  测试UPP传输的同时操作普通DDR数据
0 r* n+ p" \5 p$ w% j' z& e        temp=i;
$ g# \9 g0 ]9 t2 r; j        i++;
* x) a+ u- B6 m' X6 r        if(i==1024)- v( P  x/ g5 i& z6 {6 \. T
        {: C0 U0 {! a, v6 \
            i=0;* x1 ], Y% F0 w3 [8 R2 D( I9 R: Y6 d
            j++;
5 F. w! r* V' n' @0 f) s        }  ~, _, C1 X1 P% q+ y$ V; h; ^
        */
, }& b9 o. s9 e+ ^9 F/ ?4 d' k* F& u- x9 |2 S
       asm(" nop");+ \$ b& G1 L: T

  }2 P6 j, t" B' Z" \       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! v! j0 f. r& z! y/ E4 H
    }: s/ `, I% }! `$ Q

3 ?. V0 o( q) W) h* L    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 n, S$ a2 |4 f4 ?$ N% \- R
    //UARTprintf( "i=%d\n",i);
! a4 F# z) a, o- a    //UARTprintf( "j=%d\n",j);0 ]2 e5 A5 h& O- l1 a
    UARTPuts("Data mismatch in buffers.\n",-2);/ i# A; C: {% O6 @9 p' X
    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ d  @! }+ i" O0 S4 V2 q1 H, z    {2 p4 h7 V9 k. l5 W0 J6 R# e
        for (i = 0; i<upp_frame_size; i++)
$ \+ w- a2 a0 z7 o! U: L: Q4 m        {1 T( ?& K% y+ e
            if (upp_buffer_a != upp_buffer_b)
4 E  b2 B( ^: C/ u: r3 C            {. G& f- }1 |- s
                upp_error_count++;
* |$ _3 N* a" k- v7 n$ N            }
( Z  `; m: ~7 [+ D) p        }) m6 r: [1 D9 b+ w# T
    }
8 s5 k0 m& l+ U
, {' C6 B& i( b' ?/ G4 O    /* 报告通信结果*/; e. U: R5 u) Y6 S
    if(upp_error_count != 0). z5 D8 u1 ]3 n" O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! r% x. }2 \/ D. C    else
1 V4 V/ Z8 k% L8 s        UARTPuts("uPP transfers complete!\n",-2);- q, j! S2 b( k  H' w  p

( t- J1 \) ~& u* a9 L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);3 k; \0 z- b. P, _+ H9 o) G0 M
    UARTGets(ch,2);
+ h9 d  t" [* @: S    UARTPuts("\n", -2);3 M+ ^$ [0 Z- w8 H
. M5 E) W) \! e+ u! }
    if(ch[0] == 'y')$ F7 `+ M9 d* g& s' [3 T- E! z2 ~
    {' Y! \% G( ]* \5 [5 U2 @+ c3 L
        /*打印全部读到的数据*/
3 J8 \2 |1 M! U( u+ E; c5 R# Z        for(i=0; i<upp_frame_size; )
" z3 `( ?% M1 F4 h, {/ G9 d1 d        {
6 J; y, _9 h! g$ ^1 i% F1 _* W            for(j=0; j<5; j++)
: Q; f6 Y, W" k3 F% Z            {) D' F, [- k( S# f( ]( r
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; |3 U' }- q  \$ m& Z                i++;7 c2 c- {9 x: s7 ^6 `4 ]
                //if(i >= 4096)2 C6 g4 K" W% ?# ^: `" Y# f
                //    break;7 J+ x/ S3 Y5 D5 O: w  g7 b  D2 x" z- u

/ W+ u  u% |1 D3 T; c$ u            }
8 y  e7 v4 E6 i( A' I1 [' E            UARTPuts("\n",-2);; a' s: g9 O, B$ V
        }; ]5 _( e* d# u% R" n% J3 T
    }, }/ }& r' e* J# q

" |! h% ^6 g& t}
; S+ Y+ V9 Q/ s) L
: z" f) r, f' A

8 \5 @  h) t9 i* {& h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( {# x% B* O& b7 o6 y+ c

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* m4 X. Q% I; `2 H% \! L8 i





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