嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# C4 Q5 T  {3 X, d3 Y/ |; l0 @+ N: n
Void UPP_TASK(Void): X+ ^+ a# b2 L1 H/ F# r$ P
{& B' C1 _' _* n7 z
0 a, c6 Z5 M0 E5 Q, C# i# V
    int i,j,k,target_int_count=2;
$ z1 V( E# ~' ?& n/ x: P7 k( v    char ch[2];3 [9 r7 q. ]" w) ^" e/ A) b
7 A2 c3 r- _4 ?: a7 {
2 ~; U$ D1 @/ L+ |5 w/ t
0 c2 T! R8 P, J! K! F3 c" k, n
    upp_interrupt_count  = 0;
, V% l, |( r; O7 J- ~( I# r; Q    upp_error_count = 0;
; K. W, u! t. R/ R7 l+ u" j% w) p5 o. ]& U; ]4 Q* F% T
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" f6 y/ F$ @5 L    // Initialize data buffers
( v: }1 a  U# v* B+ r* I    for (i = 0; i < upp_frame_size; i++)5 i* O) f( M$ P- Q& |4 V  b
    {/ X% ?% f% U8 [  }$ `
       upp_buffer_b =i;
3 g; {. R9 a" F& _       upp_buffer_a = 0xDEAD;
) V% A4 F  ~5 d* x4 f    }
! o8 M; i4 l  q. x, B* q* K2 |4 p+ ?& O% T: f
    //for(i=0;i<1024;i++)
# L9 p  H4 q- v# @2 c0 F1 @    //    temp=0;& K* O2 b! r5 Y' u  V# M/ b
. q$ {: x9 g- `" c1 }% L6 u
    //UPPReset();& E, N( U6 e3 G
    /*启动UPP DMA传输*/
  u5 K% A1 p$ Q. X    UARTPuts("upp_prog_dma_i\n",-2);
+ e3 N  i6 m- T& _7 w    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ Z& u9 d# v6 A* T0 C+ ]% Z    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, i) W: h( S7 }$ Z2 s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& W8 R! t; [/ v( n* \" K! D

$ R# J) \) i% q( y    UARTPuts("upp_prog_dma_i\n",-2);
( q$ V( k' O  F2 t: l0 `8 ]    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 x! W; o* w! q- n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 c# q8 @  T7 L# l  O1 [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 ]( V0 C3 d4 H" Z# F
( O  S% r6 x( {# p1 D  j; r' }3 ~! g    /*等待UPP传输完毕*/3 Q6 ~+ m/ q9 e. d
    //i=0;
6 H6 P/ r* C9 m& o3 c    //j=0;
( N5 {: S; I* J9 C0 G: \    while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 P! T+ p1 f. w; `+ f
    {) S8 F8 F6 c6 k  ]1 K5 E
        /*  测试UPP传输的同时操作普通DDR数据3 f+ \. I- E- M1 U7 u
        temp=i;
* m: j  p7 k) R- p5 O3 k        i++;6 E" o) |2 M8 \6 U
        if(i==1024)
! S2 w8 C1 ?( k        {' @& K' t; r+ @8 o
            i=0;
8 Q% J  j( P  F, c            j++;
: `& p0 P; a2 Z        }' J7 k& B9 [9 h# s6 n4 ?/ |
        */9 K3 y$ ]; U  m6 ?1 m; }1 b, F
7 F) Q( u4 n' d* e- v2 f
       asm(" nop");, s5 ~) J5 V6 o: H& _
' B; Y7 R- ]! t4 {6 @2 u8 J
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ o2 f. d1 M, }9 _0 g    }
; V# f& v& w) a1 W% M0 b( S
' i! c/ l5 ]5 v! T: i# M! }% O    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ A) q- c/ T% f3 V
    //UARTprintf( "i=%d\n",i);
8 c: x" |  H* g* u    //UARTprintf( "j=%d\n",j);
5 o) {- e) B  E5 m# ~1 G. W$ g8 l: q    UARTPuts("Data mismatch in buffers.\n",-2);
7 L+ U; e1 O1 c! N5 n1 K( K4 |1 W7 h    if (upp_interrupt_count == 2 && upp_error_count == 0)$ Y+ H( V, Y9 `) ^7 z2 f0 }( z- o- }: K
    {
4 Y9 l1 Q& i2 S; J8 U, `% b        for (i = 0; i<upp_frame_size; i++)/ F- d8 A+ e- I' ^: Q2 A7 G0 j8 [
        {
7 S5 \& U: u+ O/ Z9 ^  P            if (upp_buffer_a != upp_buffer_b)
: ?3 j+ [+ r$ @6 k# _            {
; o  a6 _- q$ B+ s6 H9 a1 \                upp_error_count++;/ s9 B1 e% i' a) [. l5 ^6 h
            }% @) R3 \; b0 [# \2 [2 D1 X
        }6 q! P$ l- E. w+ P1 p% I8 _
    }5 ?" v' B0 S" @7 g' E# p

( W( O( L# U7 _* G4 g    /* 报告通信结果*/
, ]0 _* ?! s: y2 c( ?    if(upp_error_count != 0)
" y4 H% ^( l4 b- Q2 U9 f) W# s        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( D+ }7 Q' [. H! g    else
# B) A  N: D$ m        UARTPuts("uPP transfers complete!\n",-2);' ?% k, C7 w4 f. i% p

& [0 g( R& T4 ^( j# |* Q: M    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- U9 R. T- m5 n0 [; u+ B
    UARTGets(ch,2);
6 x# w6 P' ^; @$ w    UARTPuts("\n", -2);
( z9 t6 ~9 d7 O& M& X
6 x3 S2 F' z% r3 r. \    if(ch[0] == 'y')
# w) F5 A5 C8 a/ S1 b0 h' |    {
. p2 `7 ^' b$ O. V# t        /*打印全部读到的数据*/7 v5 ?( T2 U, u) K- y* W6 J
        for(i=0; i<upp_frame_size; )# R& a& H0 U3 u% l4 W$ M( B
        {. {0 ]: x  N' M- S# g) n& s
            for(j=0; j<5; j++)
7 j- l  b1 i* A- ~$ r% A            {+ E! r# g% J: o- y  l
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( ~0 o9 X# y+ d                i++;2 d* q  E1 ~6 g
                //if(i >= 4096)/ W' A0 }7 K+ s
                //    break;
1 u# U* x+ c9 t' |
$ @( g  O$ r- y7 y            }
6 @8 s& x0 H& k* d/ }            UARTPuts("\n",-2);
! P. b2 d0 F* \* m: N: \* |, w        }5 E+ r' B; W6 x- A
    }% ~5 E" ?  s: Q; L

. D6 T8 |" i8 M! H' M}

& e# S& J( x8 ]+ A$ k  I
* e4 _+ o, ~( I4 b* [

7 S' d( E- C8 j9 M% q6 d
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) e* e: Y0 f1 e

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。  y; D- X% [. d5 a; F) c, ^0 S! S9 _) ~





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