嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 W: w3 e9 d' ^5 c: _
Void UPP_TASK(Void)3 a' j! h. A( Q* D# F# m
{- O7 L5 W, V/ x* ]* g

; I  Q! a  o# @" C% ]0 F    int i,j,k,target_int_count=2;- N, D+ p. U. R3 D2 X, }
    char ch[2];9 k/ ?/ f7 S7 }9 t% P

8 J: M4 T( I5 V* w
) e  |+ J" g0 b8 X- O! D8 j- r9 a5 ~
    upp_interrupt_count  = 0;) p- q; L$ A2 A$ k7 p
    upp_error_count = 0;0 l. u0 v  T. i% G9 Y% [  h
: O7 C6 \$ g1 E) \
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, J" d# P; ~5 T/ k: {, s5 Q
    // Initialize data buffers, T9 I( A) ^$ L! V6 q1 @
    for (i = 0; i < upp_frame_size; i++)+ q' r% E8 l' i
    {8 l1 i- }: _" L+ C0 @4 W) Y: w
       upp_buffer_b =i;
) i: n, \9 L' r* N9 H- q       upp_buffer_a = 0xDEAD;6 p  F- f* e5 g$ C7 t  q& W, [+ |
    }5 E% H( Z  Q& ]8 n" j
: y( T+ {/ q7 ^8 d
    //for(i=0;i<1024;i++)4 Z% f8 x3 C2 I( {" U5 J
    //    temp=0;( W8 \) Z3 ?! d& u, f% x

8 b! I* [5 e' Q% b# T# P    //UPPReset();
3 l9 {) ?: I1 x7 ]* @$ F. T. H6 s    /*启动UPP DMA传输*/
; ^( a- m- a! D    UARTPuts("upp_prog_dma_i\n",-2);& O% k7 u7 [, L+ D2 `
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 f) x9 d2 J  {' u! q9 s    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 U3 E: k+ H( u- n% m% r2 H    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& `6 |" X+ z) f$ {  ^0 R% I

1 }8 W+ ^0 S# t. R* {    UARTPuts("upp_prog_dma_i\n",-2);' q4 @: V+ r! Y& ]2 s
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! Z% z7 y& P! g( H1 R/ m    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( e6 ?, k8 \5 |( i    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 w! t  B9 `* z! T2 g
$ s; I- X% p4 h- f) L    /*等待UPP传输完毕*/
( H9 l+ B# A: N1 `* q, {    //i=0;2 t, }, B1 Q/ U& G$ ?) N
    //j=0;
  a; i* v% e5 t& m; ?    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: _- t$ T! C" q( y; E" m    {
8 S4 t% ~0 {1 e* |* Q2 k        /*  测试UPP传输的同时操作普通DDR数据
, e5 O5 z" X1 J5 h0 l/ F        temp=i;9 c: k5 y( d" D2 x' G$ v  F
        i++;
+ E8 O' V5 t% g- C        if(i==1024)8 F2 F( p( @5 K2 _- J6 |- w  w
        {
1 F' [: T2 Q4 K! A: }' J% f+ S            i=0;% e$ l$ d2 f2 a; M; L' ~
            j++;6 S8 Y! P4 K7 c. t% I
        }4 E0 z7 t( d. t3 t% X* ]
        */
! ]1 {( F3 n) D2 Y% M5 J8 @/ I3 V5 D: W' }5 Q8 d2 m- ^
       asm(" nop");% E7 e- |* z' u* }( q0 |2 J' @
6 F- Q3 }  d& t4 I9 l) w
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* g  a( S) v' N! d+ s  N1 Z2 D    }
  y4 f. R% ^+ d/ g4 ?+ i$ \/ D
5 K0 F! }' _0 b) c# T2 x  ?* [    /*检查UPP传输的数据是否正确 (loopback modes only)*/( z4 G- }8 R! P4 d" X: k$ A( A
    //UARTprintf( "i=%d\n",i);! @2 h' R+ C! T, I3 ]
    //UARTprintf( "j=%d\n",j);1 i( i* o. q# Q/ a- T# v
    UARTPuts("Data mismatch in buffers.\n",-2);& u/ S3 G* W2 w& V" V" C. S
    if (upp_interrupt_count == 2 && upp_error_count == 0)
& |5 A6 Q' I8 |% F" N    {& b. E$ r7 z1 W# O8 ?; ?
        for (i = 0; i<upp_frame_size; i++)
' l& c8 @+ {0 b/ N, u# }8 N        {: h3 ^# Z3 z) P1 a; g* \8 C/ Y
            if (upp_buffer_a != upp_buffer_b)
$ z' s3 V* h/ R- s% j            {
' X2 X# ^1 s  z/ B; c6 p3 D" Y                upp_error_count++;
2 n. p2 m/ E# l- X            }/ H/ i% [7 R/ t% v! G1 M) m
        }3 h' n3 [' t& }/ C  X6 j; g
    }
  i& h& b/ N& l1 Q1 L" g- J/ ^  r- M
    /* 报告通信结果*/
0 y0 p0 Y4 B2 }1 K8 U    if(upp_error_count != 0)1 ]$ F1 Z) Q. B0 \& q& e
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 D7 g& }. d1 r: y8 v    else: X4 i9 O4 J, c( s: g
        UARTPuts("uPP transfers complete!\n",-2);
  @2 B3 i& W4 L( W, \! C; u1 c5 q4 Z, f4 Q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& \6 s# U# g7 c& M% U4 B
    UARTGets(ch,2);
' J' x$ R& _1 g- o. H" q    UARTPuts("\n", -2);
1 {3 S$ A+ [# @! C0 X! Q
; Y! J0 _" T& S8 w9 [    if(ch[0] == 'y')0 ?! c% G! T$ H1 N6 {0 B1 ^
    {
6 d' I1 z& a7 K7 }) I        /*打印全部读到的数据*/9 ^/ V5 W9 X& p7 c
        for(i=0; i<upp_frame_size; )
! H; H# O, t- N, t) s8 L        {
0 o9 v. V$ l7 x" j            for(j=0; j<5; j++)/ S/ M3 b5 d" e$ h5 j, [8 V
            {
( m; Y) e; }+ f3 H8 [* X2 _7 l                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! o) q- j: g5 Y
                i++;
8 l. x# I1 I4 V7 n9 I- A                //if(i >= 4096)' E. U7 V' J6 o, Y  [6 L$ n
                //    break;
/ G) [4 n1 ^) Y( S3 W) `7 Y4 h! }
            }9 G; ]8 G$ }+ Y2 e  L3 E& ^
            UARTPuts("\n",-2);* \0 }% _# `+ h: e" v& \
        }
, h# ?! |" \- m0 s& t! O- u4 r) O    }3 E* _/ r" T- N

7 J  {9 w  _4 @! s. J) O}

* p" t! \$ W: q3 W  O9 E

5 O& b; a4 K. ]( J
) g( L: A* P" T  Y2 a4 W5 }7 ?. K
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 b- W5 F- t' x0 e" Z$ V0 }, |
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; w3 l* I8 ~0 {3 i0 G




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