嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% }2 W7 E$ k% N- u4 {
Void UPP_TASK(Void)$ X3 l  [) ^6 T* e* g/ M7 F' F9 [
{
7 a9 i/ c$ n4 H- m7 p! ^6 O, I' Z+ n7 A. V) @( \3 H
    int i,j,k,target_int_count=2;* U4 B1 m  B6 d9 Q
    char ch[2];
/ k4 K$ v5 }+ a& `: M5 }
% e9 l5 H' A3 P; Z5 x* f$ e
# q; C; T( v4 t: J: h' A5 o5 n2 ]: {# G0 `: O9 S6 }1 _
    upp_interrupt_count  = 0;3 I$ D2 ]4 s0 i
    upp_error_count = 0;) d2 j  ~, f. J" [' ?( t9 o+ W
9 i3 Y4 F/ L) H4 `
    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 _/ ~6 W, Z8 J) R3 q
    // Initialize data buffers: p, A9 p7 ^6 f6 x$ O: ~
    for (i = 0; i < upp_frame_size; i++)+ {  A, q; C; `8 A* s
    {" J1 }- L$ u; ]. C0 L
       upp_buffer_b =i;
  x. b1 ]' A, L8 A4 w2 o: E       upp_buffer_a = 0xDEAD;
$ m! p1 H! S. n% D" E    }/ O; h+ g+ X! O( Z/ D1 c( ~

4 [% A+ }; C" H    //for(i=0;i<1024;i++). W; r9 N3 w; s( o
    //    temp=0;
) y* X$ c: `) a- k: N
6 c1 |4 \& x9 U8 n/ x5 H    //UPPReset();
5 s  s9 m. ]  N$ J3 i* q    /*启动UPP DMA传输*/2 _& d6 I1 r9 v3 G
    UARTPuts("upp_prog_dma_i\n",-2);
3 W6 N, q9 v; D    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 o" Y8 J) U/ M% R5 }5 }6 ?, W. q: L
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ T- V; }! M8 n
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 Q/ H- R/ |% h' @
1 G8 h& j- ~% m- Y3 _0 {* C
    UARTPuts("upp_prog_dma_i\n",-2);9 n4 X$ G! Y5 i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 D) e" P7 K3 r
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- E1 X! U  b* c  F' p( M* I8 C1 {5 g    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ ?7 w5 ?+ x' Q6 L0 j0 N0 m0 q9 l
; R2 p0 U; m  c6 ~0 B+ `    /*等待UPP传输完毕*/
9 M3 a( w9 O1 Y' ^. C- y* _    //i=0;8 b* g/ B5 v" c7 b) {+ S
    //j=0;
7 H! M' q* d# Y( x, m5 B0 H2 V2 r    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# c7 x7 ^6 c; ]; V9 r1 l  c
    {6 L' l, r8 S8 _* J! `- |
        /*  测试UPP传输的同时操作普通DDR数据% I  r3 k+ N1 E; x' q3 C9 W# W
        temp=i;
$ \3 F* v7 P! `) I& A        i++;; ]7 d% c" d$ ?
        if(i==1024)! X- c9 f% ]- n
        {
* b* N# R8 I7 @6 a2 W3 H5 N            i=0;  |- n" l* l' W. C
            j++;+ ~7 n8 B. m# s8 c
        }, e3 I& V! D' h6 d/ ~* |+ E
        */" |, [' i4 |! k
% K  g: a4 u2 a5 V, h
       asm(" nop");
7 m' A& H* T( B1 a/ L: v8 {! t+ B7 @, z  X, A
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: l+ @7 E& `3 L* U    }
+ w" G4 j* |8 n' x* x
+ T5 m8 w* E# {2 Y* X    /*检查UPP传输的数据是否正确 (loopback modes only)*/
3 \4 n3 F) a" b    //UARTprintf( "i=%d\n",i);- f( ~: y1 ?. D9 h
    //UARTprintf( "j=%d\n",j);$ K8 m: Y; Z# M) ^3 v
    UARTPuts("Data mismatch in buffers.\n",-2);
2 z' k6 k. ]) B7 F# u8 N2 C. o& t5 @    if (upp_interrupt_count == 2 && upp_error_count == 0)1 G8 p6 T! Z- F, }* q
    {
4 `, }6 U* U4 K4 x        for (i = 0; i<upp_frame_size; i++)
! ?+ e. b4 S0 D- e2 L        {5 `8 Y" M5 n$ k  I% J& n: w
            if (upp_buffer_a != upp_buffer_b)3 o2 x9 \9 @" N: m
            {! |* e  U4 Y$ B" q/ Q
                upp_error_count++;! a- Z5 g6 u5 Z
            }0 H+ l  l9 [7 `6 G
        }
" l2 s5 p1 g: ^8 @    }& B& m) o0 R6 H1 p5 V" S  Y4 K
( L& i6 U7 H& i  m/ O
    /* 报告通信结果*/
: n  `/ e4 Y: o1 w    if(upp_error_count != 0)! P: k( D' v% g8 w5 f7 h! ?
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 s8 `$ b8 u5 O7 `3 K, r! H2 Z& @    else
) E+ A8 K* [. F4 u/ z5 w        UARTPuts("uPP transfers complete!\n",-2);" y! K4 V& m/ R" N5 R

, l. ~9 Z$ q  k& ?4 e4 S' I& p* J    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 M* L7 v  i/ ?! {/ O
    UARTGets(ch,2);
4 G* t0 B" O: ~9 V4 w    UARTPuts("\n", -2);$ D) ^# w/ g% G8 @9 @4 ^

0 G: y5 }( a6 i+ Z- |6 R0 q    if(ch[0] == 'y')
. |) i; U8 R2 }    {
4 H6 v; l8 j: j7 L' x        /*打印全部读到的数据*/; m. H, H& f1 z0 R2 Z
        for(i=0; i<upp_frame_size; )
- X2 f- S$ Y  u3 c* F2 ^        {& y. c8 g/ {% \. |. b
            for(j=0; j<5; j++)
5 Q6 @. W, i7 m: R4 D5 i            {
9 L7 _' l, |" p                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
  p! Z1 q% e# @: x                i++;
$ }& ^/ z* d- k  s& @0 K# x! E4 p                //if(i >= 4096)" a' |. d9 M- G2 z
                //    break;
- \5 ~% s5 `6 {
" {/ b3 i( q% |  I            }0 ]% P  \4 k) M( V( @: z5 R+ K
            UARTPuts("\n",-2);( E) A( a5 a2 [. R, k8 P# J
        }) V3 R# g0 f5 ]7 N2 [' R; B
    }
3 [/ T0 }, n/ F. f8 ], c& D% V+ ]3 K' x% O! g
}
0 y: C$ j- g$ z
) o+ X6 l5 T# |! F# ]; X

' u8 w9 z+ j8 a6 V! n
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, V8 w; M% f9 I+ t4 J* p5 B
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。. `' U' n1 _3 X( L; S





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