嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) F, r2 l, o, B0 d9 Q+ q. ^5 ]9 F5 q
Void UPP_TASK(Void)- y5 {4 d# S. r& G$ ]
{# B, M( w0 g1 o% D/ C; r
; L$ U! z, C5 I
    int i,j,k,target_int_count=2;
/ [9 B: \, L  r+ `' k6 ?    char ch[2];
, L# g! A! E  W8 v4 H0 o% ]
( E, L, \9 n3 d7 D1 [) P! r  ^7 A

& c7 m9 w  K1 P9 _& t6 f4 e    upp_interrupt_count  = 0;
7 g1 a6 F. e+ r. s4 ~" @& x/ E    upp_error_count = 0;4 f; E: Y7 \( p& |/ A& ], ]6 r* b
: ?* o$ L4 {, o) e1 l
    UARTPuts("\tResetting uPP buffers...\r\n",-2);' B7 _$ p; m: w! v2 X
    // Initialize data buffers
' @2 c8 d( ?6 e8 A! k    for (i = 0; i < upp_frame_size; i++)
- {' h' u$ |9 P5 J0 c    {
9 y+ Q; }$ v! G5 b* ], I( ^       upp_buffer_b =i;" ]# B; {% M4 t
       upp_buffer_a = 0xDEAD;. ?. |5 ^6 L0 ~/ }: o9 m
    }
- ^: }7 l7 B: }/ s& j5 O8 a2 F$ D( ?+ p$ H  z7 d
    //for(i=0;i<1024;i++)
; J% G1 [. F/ y5 P- X7 p( I    //    temp=0;5 f( L- d/ ?& r1 h$ ?
" U; ~$ _! _) i2 m) ?; `% i
    //UPPReset();
) _9 \) L7 {+ E( Y1 z    /*启动UPP DMA传输*/
9 y8 m; ~8 z- S7 z4 A    UARTPuts("upp_prog_dma_i\n",-2);
0 ]+ a1 X5 `1 _. {: G$ c; y! R9 |    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% ^/ r" c1 d% f; J3 r  r
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* G% D5 o) K, A* S" M    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) P" J+ U3 u0 d, }! v# v, _0 z( ]4 w% X# X; e  l) H6 {
    UARTPuts("upp_prog_dma_i\n",-2);
. H$ N& h& [3 B3 M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ e1 t6 {# m7 f% r  }+ M$ h' U- U
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, I2 o: J% T* b6 Y# i$ Q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 @. [% V/ ?$ i' K' d# d3 `  O
. {' S4 C' |, w, O3 v. T1 r( s! O
    /*等待UPP传输完毕*/" |% Y% i6 V/ K5 x/ E
    //i=0;
9 t; P" s" @. e, P/ I+ u" O    //j=0;: Z4 `4 E' D+ k, N
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% e8 S$ b' ?4 w, r( K1 F1 n
    {
; J: W3 \0 C, [4 x1 i. A        /*  测试UPP传输的同时操作普通DDR数据2 A  W9 @6 D- I5 |, d5 k0 O
        temp=i;) [& w, E5 U, `' i. z6 K, M( k
        i++;
$ N! U+ [( R/ H; Q        if(i==1024)
; X" t  e6 d0 O: n. Q: N$ {6 H        {, A3 ]+ R: }# {
            i=0;
$ H2 m) k7 k0 a2 ?& p$ w            j++;; m( {! u# Z" _* P# v; Z
        }
( _" P% q" j4 f& l. E) K4 S        */
1 v4 Q9 y- _7 u/ c
5 x% Q% F6 u& ]! V( y       asm(" nop");
4 {! E% Q) b- I$ P5 s7 }
; B" G7 L- i3 U  e) `0 d  ~       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# l' `% ~7 Y# E8 H/ m% _    }
, @  G# k! }- [3 n
# L6 I' M* w# H  T7 i7 G5 c    /*检查UPP传输的数据是否正确 (loopback modes only)*/, w$ v* H7 a; l  K+ j
    //UARTprintf( "i=%d\n",i);1 j) _' ^* r) C% `$ k( S9 J6 W
    //UARTprintf( "j=%d\n",j);
4 |% D) T: J% o, f; ]/ r    UARTPuts("Data mismatch in buffers.\n",-2);3 m' x5 T5 j& k) \# d. A2 K5 z
    if (upp_interrupt_count == 2 && upp_error_count == 0)
$ X& @- ~: C- A* s    {0 j& v, `2 N. e  d# s* y' d4 U( L
        for (i = 0; i<upp_frame_size; i++)
& s& V' @$ P; [, c" A        {/ g( Y0 E9 a3 w0 E" L; Y9 z8 f/ H) H
            if (upp_buffer_a != upp_buffer_b): P; `5 ~! t4 N; ~; ~
            {0 |2 e$ Q) V+ i2 g; Z2 Q" l
                upp_error_count++;
7 K7 `- }) e7 n            }+ h) Z' b* c: P$ D
        }
& O( a2 x! \# [8 N; k% H/ b/ K    }
( r$ @5 Q7 I0 @# b3 `6 |1 D
+ O  B* ^- m1 ~( `) z" q    /* 报告通信结果*/2 h& y5 y6 r, r5 j" @3 A
    if(upp_error_count != 0); Y/ o) L+ D' S% s
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' ^; S4 O4 \1 p  i& L    else
% \) j, m( A6 Y; H* Z" h        UARTPuts("uPP transfers complete!\n",-2);
1 G9 G* r" i* y; q# l, ]8 t: C) V. k7 w: u- D/ ^* \3 d
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; u( K3 ^- J% |
    UARTGets(ch,2);, m7 f: L  P; K0 u
    UARTPuts("\n", -2);8 X: |- j! L  `% O. G/ @' J2 _
; Y' r$ y' U7 Y4 A' r$ W: F8 D: k2 q/ p
    if(ch[0] == 'y')
3 f4 D0 C( ~! \! ]! \7 l9 x    {
: o* Z+ ^! r" Z+ O        /*打印全部读到的数据*/6 z) n; J, r' d
        for(i=0; i<upp_frame_size; )
% |& `0 N4 U( k6 k        {
; h, g. H" @& y0 h, _/ O4 |7 m  ]            for(j=0; j<5; j++)
  T! O) y- R! U/ W. \; ~            {/ g. C4 I( d  J* |. q: G3 v- v1 H. n
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
2 S  f9 q5 R/ ~                i++;
9 L5 \0 f2 S* H0 @$ \9 Z5 D                //if(i >= 4096)* Z. l, D/ x. L) r- L' ?* [; e
                //    break;
  f& D% Q# ]* |
/ G- R2 Z0 A% ^; n            }. M% O5 G8 ~9 |! q
            UARTPuts("\n",-2);
. |7 S  ^0 p6 ]$ _7 b! G        }: e! O, d$ }& _  A: V5 Y
    }; x3 J" m! J. {/ P) z6 T: a; k

* |7 b# H9 W! b  p  t}
5 }  [+ @! u) {# [! H
2 L( x+ Q8 G( f/ J0 j* N/ t

5 E3 N+ o  @; V+ d1 ~' a6 K
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( ]& t, g$ Z+ ]7 R8 f6 K

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; F; _2 n! K& @9 O" Z





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