嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% x; ?/ L. s" p( Z5 d
Void UPP_TASK(Void)
9 Z1 h0 G7 g! ^, W8 t{8 T! @! W9 \1 r: D( `
# ]2 f! K) u7 f+ D0 E1 Z' O
    int i,j,k,target_int_count=2;
2 w) F9 I& o2 r$ J& y    char ch[2];, g3 v. |* q% l: g/ q* B$ s! P

- I0 c0 N' \8 c+ `1 H! x3 {  l' Y1 g' a; e

8 h1 }$ S2 t( t& l    upp_interrupt_count  = 0;
" H; E8 F$ R! s% y. \% ~2 a) C0 d% @    upp_error_count = 0;  Y& p. h) y( G) i6 F" u; b

2 C: K7 r* \% |( i1 F5 j7 N    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) c- [( L8 ^7 y# S, G3 R    // Initialize data buffers
4 U- I6 y4 Y+ E8 h; a" l    for (i = 0; i < upp_frame_size; i++)" B* W: s7 n9 W/ F, `- T8 b0 ~2 v/ Y
    {
% n4 T3 l! d: x& q       upp_buffer_b =i;4 e! c; E, \% _  F; a$ ~
       upp_buffer_a = 0xDEAD;) z- `& M3 a0 Y/ Y! ]
    }
0 T& R) p8 }; ~8 y1 z. x5 j% s- y& X' t4 E; E& m
    //for(i=0;i<1024;i++)
5 v- L8 ~1 A3 A5 N" J# P    //    temp=0;
: @6 i" E3 i5 V; l% ]# k
8 I+ G' M: B( j/ p4 n) @! [    //UPPReset();
% ]" y, j6 E6 `$ s/ M    /*启动UPP DMA传输*/
/ o- d! s6 ?  {0 \+ \' j    UARTPuts("upp_prog_dma_i\n",-2);
8 A% D" W2 y% ]( s! R    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, V5 g' a5 ^0 [& \
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! ~, j0 r& c7 J8 P& e    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! l" R, I- V" f9 W) H+ h$ J6 O) o1 c2 X9 }
    UARTPuts("upp_prog_dma_i\n",-2);
! T+ O$ M% j6 B5 T6 S: r6 H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 s2 w+ Q+ E1 `! X    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: w3 Q* A6 @' H. k    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);/ ~; n# i/ l8 A4 R
& j  |0 u+ V; j4 _
    /*等待UPP传输完毕*/
7 ^  G# r2 ~- e& T3 N; Y    //i=0;# }9 ^) r: ^3 a" ]- r9 ^9 O
    //j=0;
* w6 L% V' j9 b8 L3 p  `    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ f- S5 k$ Z: I    {
' d7 e4 S; K) w- ?3 E! {- p5 c% B        /*  测试UPP传输的同时操作普通DDR数据
) }1 e6 M  n* t" N, d  e$ V        temp=i;
! w/ Q7 ~$ h) t: _        i++;
: q% p2 i& r3 q. C9 M        if(i==1024)
0 f/ @, z' o2 U; m5 `. N        {
9 x( k7 W" W; E" A2 ~            i=0;
& y8 a' m: ?: F5 l4 ~            j++;! ]& J. I0 w4 _3 H; g
        }
, f2 L' u4 i- \7 o        */
# i0 q7 N2 A/ e; _+ G% u" P  S; \1 |  t8 z2 d2 r
       asm(" nop");
$ N$ Y; u. N+ ^8 s' b! Z. V+ G% o% x; @7 O! m3 [& \
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 p% ~1 n. C- `& U, r% h
    }
6 t6 }, d; i3 x0 g6 J+ J3 L/ j3 @5 S  {) A* y* ]$ A5 ?; U2 V. P
    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 }0 k: y5 w' o1 Q5 Q3 Q* w- v
    //UARTprintf( "i=%d\n",i);4 d+ s  ^4 U7 X! j' t+ r
    //UARTprintf( "j=%d\n",j);
3 F# d1 r; x$ |& ~5 Z9 O    UARTPuts("Data mismatch in buffers.\n",-2);/ i% \5 j, A8 E3 b3 {# X3 \- V
    if (upp_interrupt_count == 2 && upp_error_count == 0)
( O( B7 W2 ~1 x    {1 f. r0 k- {: b# U" x
        for (i = 0; i<upp_frame_size; i++)
" h, v+ ~. @( A" V        {
& X. M' K! \, E  R5 C            if (upp_buffer_a != upp_buffer_b)
; v( B  G6 S$ K" W1 A, ^+ X2 }            {. K7 _5 U" T' k" G; P! k' C$ ?( J! a
                upp_error_count++;
7 R6 @/ ~$ c  y% A6 m8 u            }
9 `& E' \2 p/ J) M/ `% \8 L4 f        }
8 `# w# |0 a1 o- }9 M7 x& d- n    }3 |6 _# |# k" {/ {! S  p
! j. b1 X* c" P
    /* 报告通信结果*/
0 \# Q, ^1 F2 }& ]    if(upp_error_count != 0)! D  L' f0 _) x
        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 t: X/ G" Y% C9 d
    else
' ~, T6 O% l& b        UARTPuts("uPP transfers complete!\n",-2);4 @! X7 {, I# E% h  Q
) E* B0 V& K, m3 ]
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& A: t8 W4 U  a. Q9 w; u8 ?    UARTGets(ch,2);
9 ?: d4 f; p% V6 R) H8 ]5 K    UARTPuts("\n", -2);/ Q) O* L& X! h$ V5 _; n) H

; i) g- K; c% C    if(ch[0] == 'y')- d. I6 I0 ]$ O9 ]; l
    {
* m  l1 v) j$ x2 p' g# w        /*打印全部读到的数据*/: R9 ~% y! u7 }8 X4 Q
        for(i=0; i<upp_frame_size; )
* R5 P$ f; ]2 m7 R1 _        {4 t; ]- f5 P/ J8 r9 T6 [5 B0 ?
            for(j=0; j<5; j++)- o  [0 d5 d$ G; I( G" ?5 D' d
            {
1 T8 x2 y4 y' C& w2 p                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 G+ @, n" u# v3 P( X9 b' Q* t
                i++;6 _' k) S, z& h  X" H3 F9 {2 r
                //if(i >= 4096)
+ i' o. k; Q* e6 K                //    break;
  P8 _' f$ L8 @" F* @7 Q  G
; n5 S5 A' R5 w, w  o' o+ u3 G4 @            }
# z: U) w! `7 J9 s" A, B            UARTPuts("\n",-2);
. Q) R# N( i- P4 I0 m/ i        }0 D# z) A. }$ U/ f
    }
3 O% R! y: F" V: [/ t% g8 P
- W0 W7 h2 O# o2 x- Q}
5 j6 J1 Y/ A6 ^- n1 @4 e
$ ?3 L7 G  S8 q) t8 a
8 n% G1 m) q% {* A7 m

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% E- Z( @& L. j1 K$ l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; Q- V, z9 i' o5 K7 Z+ M2 D% z





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