嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; C, @% Z( b8 ]* W( `+ Z" {
Void UPP_TASK(Void)8 V) {( s" B% h
{
5 Q3 K  M1 C6 C2 A5 Y& w& l& z
2 ~( ?& C# y2 f3 W8 Q" R3 t5 V    int i,j,k,target_int_count=2;
7 [$ e6 z6 B# E- r    char ch[2];
3 D+ y6 _( S. c0 o7 W7 J6 v9 g" ~  v, q5 {7 X6 B! t) a! T" I

: N% P% s' Z6 N: L9 X6 t; e0 B* x0 e2 x4 l
    upp_interrupt_count  = 0;7 S0 q$ Y7 n* v# x7 c, b
    upp_error_count = 0;7 K: Y/ b) d& R$ f
& }7 W' R! L/ i$ J& O/ c
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* P4 J2 S, }  e% O7 B. r    // Initialize data buffers
" A$ e" r9 h5 v" ~8 q/ j2 d    for (i = 0; i < upp_frame_size; i++): D- E" l8 t0 {" o7 r  c$ x
    {% d$ ^0 w) j- m  [4 X3 V: ?
       upp_buffer_b =i;% u+ ]5 G4 ?) _/ l
       upp_buffer_a = 0xDEAD;
8 G' o" t  M  C7 F' p6 r    }
* A4 I  }1 c0 e  }6 G* _
: y; v5 r: u% m& ^, o( k    //for(i=0;i<1024;i++)' L- [0 E) s+ D+ ], K9 i
    //    temp=0;9 v; e) f4 ^7 x9 p' N. A; `, j: w% ?

1 Z- y9 b3 ^. z& i: l8 p2 k) G1 p! R    //UPPReset();
: Z% S( q$ D3 l% n3 L5 L( |    /*启动UPP DMA传输*/
" |/ S5 z4 a. |: ?. t    UARTPuts("upp_prog_dma_i\n",-2);
$ B" s$ |9 b3 _' u0 K    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 P) C/ X" X1 b+ z3 _% P1 M    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  R8 {: O: @/ t    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 b4 c. O8 y2 {9 X5 P4 q
7 @) n1 [) i& \4 L" g
    UARTPuts("upp_prog_dma_i\n",-2);
  I" k1 |/ [# t. r    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;6 z' q, z% @& E' Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 ~/ Z, L7 k* A: c; X. j* b
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 r8 E6 d: W5 O4 z7 S

- G( J; I2 z* H2 v    /*等待UPP传输完毕*/$ Z4 W, A9 v' m, I2 l
    //i=0;
1 D7 n# S4 e3 Q( d( t' r7 Y# R8 w    //j=0;9 Z- t  F% G: f, E$ x
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)& R" r: U. O% k! T0 a
    {
# a+ E" y0 I, C- I- I        /*  测试UPP传输的同时操作普通DDR数据% N5 e' W7 b) O4 I. M
        temp=i;: j% V! D5 c" }* [: ?. x. d4 W
        i++;
4 j5 B0 A$ u1 Y! C. U! B$ O, z        if(i==1024)$ f9 D" e- l7 N( E
        {
8 B4 l% w2 g, f            i=0;
5 F" i* j  J/ @+ x( }: b' O            j++;) Z' ?1 a5 a; A7 l3 M- i& L6 T
        }9 z# p3 e9 b" H9 l
        */# ~0 K/ E( [5 d/ X# s, F" c( @. z
4 x; a  v! \9 y3 q( U) O9 u3 v4 u
       asm(" nop");1 F1 G- |% M( j" T' d
3 W1 y( {+ J- ?; ~0 }% y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" y& ]0 {$ U0 P! K2 Z6 N, v! O
    }& v* P3 m7 b+ e" K

: L6 @4 v  s5 M0 I" M. l5 U: V    /*检查UPP传输的数据是否正确 (loopback modes only)*/; |4 X% i/ [" |; b4 q. {+ |
    //UARTprintf( "i=%d\n",i);
* p9 m% J$ }2 R$ H    //UARTprintf( "j=%d\n",j);6 e2 {' A" p, A3 o1 [
    UARTPuts("Data mismatch in buffers.\n",-2);
7 @! f% j2 V2 a7 x0 Z) y    if (upp_interrupt_count == 2 && upp_error_count == 0)7 E1 `' D, Y/ q8 a0 }
    {0 H% d% ]" Y; p) }& M
        for (i = 0; i<upp_frame_size; i++)% w9 a8 U$ \6 A: L! R/ `: m
        {+ a2 q# L. f9 C8 Y/ d5 ]. m: Y
            if (upp_buffer_a != upp_buffer_b)/ C/ ~! |( M2 K) k7 q4 ^, \- u) x
            {( j: Q; N. e) I6 R, r5 @$ y8 F
                upp_error_count++;! v, p! A% R" F( u" X/ S
            }
. F1 x5 |$ T4 E- a        }1 a" \: W9 S, D  Q9 p: p
    }0 m& o. n  ~/ T8 b2 _* S

3 @; }* A* a. {# A( h& u5 O& F    /* 报告通信结果*/% L/ A7 ^5 v# ~
    if(upp_error_count != 0)
, z* g) b3 K0 \        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 Y3 t/ B$ b+ t
    else
4 K# m4 s% ]' w; a# ?0 O        UARTPuts("uPP transfers complete!\n",-2);" ?7 q/ P& @3 p8 |$ ?# @+ b' X

; `1 w/ X$ n; I5 Q8 I0 F    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
% ?" D* u  G3 I% a" |    UARTGets(ch,2);
7 g! m3 q# g2 W' F  |1 O    UARTPuts("\n", -2);
& Q- N* Y2 P. E
8 q; l5 s0 ^/ Y    if(ch[0] == 'y')
! b2 q% H& h+ r) L; S8 j6 L& ]5 F    {
% S0 W9 n. G& q1 ~6 l        /*打印全部读到的数据*/
8 v/ C, ]. }. r0 s' Y$ L. H" Z        for(i=0; i<upp_frame_size; )
" Q8 I: q8 @2 j' U9 |        {
0 R$ v- S5 n6 D9 E; [1 E/ m            for(j=0; j<5; j++)
& O! V2 X% ?) n" |4 _& J0 L' g            {
* L% b6 L1 v: j9 D                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- o) ]: e9 G: q' M7 T) `; [
                i++;0 r8 O7 `7 p4 K
                //if(i >= 4096)
6 F0 a3 `) A9 d                //    break;. P6 z9 W, T& z$ o: y
5 t+ X- O* G' D4 @, z  m
            }
2 W8 J0 ?2 s; s& K            UARTPuts("\n",-2);% f4 k4 y  ?6 Q7 Q7 y$ [$ j
        }3 K* p, L/ r( O4 C
    }( Q2 S+ d8 s  R9 p  S. b0 E' M# t2 E7 g
5 O- w5 O# d* F$ x
}

1 w) d$ @/ S2 ]- l/ |3 F. u% v
& A/ c1 @3 V" \! L: o
) z$ `- u8 ^3 z# c

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。: R1 n& O- e, l) q2 ?; D

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 d) n' O; J" H5 j2 V  R" w





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