嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?3 Z7 }$ I7 T" t  S3 Y
Void UPP_TASK(Void)
0 R- t* E! ]/ {, e. V{5 j4 x& s7 `: U; b, I5 }5 f
  H6 ^! L/ {" j' e6 K% n5 [
    int i,j,k,target_int_count=2;* F; _4 S8 C5 v  g
    char ch[2];, |2 S4 g4 u! A1 V0 E
/ D6 ]5 s- C1 m+ D+ }& v

3 X' E1 r% b7 ~1 e( O1 K' X/ ^& J7 d
    upp_interrupt_count  = 0;
* X: J4 r0 T+ C1 m    upp_error_count = 0;! f; P( G' i8 D7 ~1 Z# P

6 X4 H+ C- k1 o% c- W    UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 {  K0 V" c8 k    // Initialize data buffers" o' v- H& F$ ~. [- x
    for (i = 0; i < upp_frame_size; i++)
5 U/ v8 t2 ^0 x7 ]' U' u: p    {- R$ D+ }  \$ Q" ~- X
       upp_buffer_b =i;$ `* P) W" q6 c: h$ F( R0 p
       upp_buffer_a = 0xDEAD;
5 D+ z$ c; \, E0 C4 n- W    }* ~' o( m( g; [& w: s, T
; f, n7 }/ _2 B7 c0 e- A: {
    //for(i=0;i<1024;i++)
# y( }- g3 f2 b4 {# d3 C# e    //    temp=0;
" k! C4 ^% c# F( n7 n5 e+ {8 |* v; Z& K' `" [; g
    //UPPReset();
4 ?* Q9 w: h8 R, e    /*启动UPP DMA传输*/
. A- l" e# Y( [2 s; B    UARTPuts("upp_prog_dma_i\n",-2);
6 K" _+ U2 D5 a& u/ @    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, |; K' ^* _' o/ B    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 O; f# ^5 f$ ~# f" {! D    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 T# A, }! A3 z/ ^7 E
' q' D! {4 [4 T7 [: W    UARTPuts("upp_prog_dma_i\n",-2);
1 h# v0 j& T" N% R# V3 I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 S$ Y+ m! R- w    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( f; W8 C/ z% u( f
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ J7 Q) F$ g* q+ H
/ \( _4 F; \+ J, g3 m. H
    /*等待UPP传输完毕*/
$ P2 V- ]: {6 }' b  q    //i=0;
- U' P0 r" m0 N3 F6 f  G. ^% m    //j=0;, ^  s( E; N8 O# ~- n
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ [  {; q; D0 U/ b! M5 V3 @& w% H
    {
  y6 e9 S, e3 X; v        /*  测试UPP传输的同时操作普通DDR数据
$ P8 n  Q9 n# F. h- z        temp=i;
9 W4 d) `; \6 o/ t  ]        i++;- T8 C& A" l* |# M7 f
        if(i==1024)
* y. o7 t* w+ M5 {4 y( \1 B        {
4 l5 E; O5 z1 \# m- Q+ D            i=0;
: c9 i, j% Q/ B2 z# s            j++;! l& W' q/ e  B& p4 B
        }
1 Z4 p' k( |+ t! ^& u& M        */8 _6 t1 x8 H2 a6 B
& N+ r$ I9 j4 j6 Y+ \1 T- r
       asm(" nop");
( }& t# t  @  b0 h' |+ `. E6 Z' R' B9 D4 s; q# ^. G
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: M) u# y/ g: }    }
7 F4 A5 x6 L, _- e' j* U2 {; W; v3 }$ L$ t4 g- T
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# x! A$ k/ J1 h8 b8 @, W% A% G# e    //UARTprintf( "i=%d\n",i);* e) E7 |5 D# S& K
    //UARTprintf( "j=%d\n",j);2 Y1 J; p" B4 G4 l# |. w
    UARTPuts("Data mismatch in buffers.\n",-2);
( m6 x' z4 x; O" w9 F    if (upp_interrupt_count == 2 && upp_error_count == 0). t4 H- P2 F5 R3 L
    {
, g9 [# o7 c9 Q, D# J1 R        for (i = 0; i<upp_frame_size; i++)5 B7 O& y7 [$ f/ _$ U/ ^
        {8 ?' H$ L7 P  M; {4 H
            if (upp_buffer_a != upp_buffer_b)
. r( o+ B; K6 a# f0 t/ r            {9 Y( c2 S8 L1 {* j& m1 k
                upp_error_count++;- a$ z; v$ q0 b1 K% M1 t, ]: p! ^
            }5 D, t. f( h8 [
        }6 b7 {3 N5 _- B- Z
    }
  s' Z7 ^% D. _8 C" c3 Y( U- e0 C4 N, {
    /* 报告通信结果*/8 p1 ~+ L# i  s8 R; ?+ c2 T; `" w, F
    if(upp_error_count != 0)
% f0 [  m3 e# B& P: }        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 Y- y1 L6 T1 h" p" i# w
    else4 e, \% f# x( l; X' b" ]
        UARTPuts("uPP transfers complete!\n",-2);
0 V9 l% h+ l3 `  E8 \# z7 l) u7 W- d
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* y6 O! r. j, u( D; d$ _! G
    UARTGets(ch,2);% D( J1 f. J$ Y5 g1 T2 C
    UARTPuts("\n", -2);% n5 t( c" N/ |: r

2 Y& H; ]( C1 _4 G3 `    if(ch[0] == 'y')* d9 y5 |; w2 u/ `; t+ N
    {6 H" @) C1 l' H3 {1 h
        /*打印全部读到的数据*/
9 a2 Z3 O: [) r% H& M        for(i=0; i<upp_frame_size; )
# {4 z9 N% |/ Z1 g! u# a        {
4 O' @, o1 y& h: ?" t) }, @            for(j=0; j<5; j++)  w7 V8 W2 X$ f# C( L
            {
/ @  ~5 `& |4 d: k$ F: }                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ A, m8 P$ d* r) X: y
                i++;1 L! @' |3 k) u/ ?0 R
                //if(i >= 4096). |6 ^4 `: `- E$ \! u
                //    break;
2 E) `, e4 A% m2 P- v* j. [) r) \$ c& b) }& f: j6 K. X
            }9 X( f" W/ ]7 k4 n
            UARTPuts("\n",-2);
, x+ k, j. j2 f; I3 X' H2 \        }
) ?; {  J, Y4 k/ ^* \8 E8 X    }
( S/ y4 y* Y6 C+ `- l& X, z2 v' P0 {, S' q: t
}

! _$ |3 c3 h* k" b( p" s3 `

% o3 y2 F8 L' W& A
% v1 A; H) w6 L# ~9 D4 n3 j
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* H9 _) ]6 ~, H2 J- V4 M  n7 }

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 K* l4 X7 ]' s6 e





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