嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 E: f% G! h3 y9 p, X' B9 S0 \
Void UPP_TASK(Void)8 N2 {3 `# L. P6 F8 {1 g
{& u; l9 D- D! ?2 X+ Z# v8 x8 S
- G/ g3 w, p  c6 u6 z) M
    int i,j,k,target_int_count=2;
: n, F$ d, d0 h# D    char ch[2];
0 @; H; e( j4 O6 j) J/ v! i
* P5 P8 ^( Q' U4 ]* Y
. t& q, Q3 S3 I6 O* v& x  o4 j# w" N3 ]# v+ {' u
    upp_interrupt_count  = 0;
) n; d* o" @, v( J9 d( J* Z5 ?    upp_error_count = 0;: d3 m4 S( k3 D+ u
$ f* M; e9 ]0 U4 K- ?; j4 B, r
    UARTPuts("\tResetting uPP buffers...\r\n",-2);) K+ h. o2 B2 Y: J1 y  n
    // Initialize data buffers
5 M( `' w" s& q$ w4 I/ Q    for (i = 0; i < upp_frame_size; i++)2 T: g9 w  O7 R( z
    {. {0 k/ \; _$ p( j+ k
       upp_buffer_b =i;
; j+ v% h) L  f$ v' c. @       upp_buffer_a = 0xDEAD;) N+ ^% ?; y- ^4 O* D
    }; Z3 }. [* y$ r- w
, V, z7 }: I" T2 L3 g9 x
    //for(i=0;i<1024;i++)- F+ K2 D- k" L
    //    temp=0;- V+ G" a1 J# i  O0 T, c

, r9 Y0 {5 g9 l    //UPPReset();2 J2 }+ e/ c9 R; I! U- p; y
    /*启动UPP DMA传输*/
1 P1 q) F4 Z. X    UARTPuts("upp_prog_dma_i\n",-2);6 }5 z+ L* j2 ~2 @* ]
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! g3 g; Y/ j) X6 `8 N: }) j; D2 y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" C( z- Y; M5 H& X% E& M7 z' I3 e
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 Z- a' [5 Q. C; ~) D/ i, d; B  S

, ]& J2 Y0 f8 g+ W% R    UARTPuts("upp_prog_dma_i\n",-2);. Y% u% ]4 A6 l3 T# Z; P/ u
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 T* [0 E! w) h6 a- |6 V# [
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 g; x! y: V& L6 X8 K% r7 v
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 M+ l, q; r( `  k! S( D
% o: C' a% ?9 O8 o4 v+ B4 S
    /*等待UPP传输完毕*/4 m" K: i& G$ c
    //i=0;
* T7 I. l- i: |5 m8 e9 Z$ w3 Y    //j=0;2 g: G2 n1 Q7 t7 |7 w: a) x
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, H( y0 k' Y1 Z    {
0 }# }2 O, E  q" h! c        /*  测试UPP传输的同时操作普通DDR数据& x' G, l/ o2 N' s- J3 K* j
        temp=i;; L& r/ \, w; {. p/ V  @8 r
        i++;2 u; ~/ X$ x4 E$ ?( p4 W4 F- x; M
        if(i==1024)
1 R1 _8 H! O& p6 z; t0 B        {5 [0 a/ g. ]4 w% \* c& Q# A) ^
            i=0;) v$ E0 L% u) b. n
            j++;# D$ ?- |8 O6 G- V% k5 n
        }' G$ @+ `) c0 ~% U( }2 m
        */* v( I1 N# G% H4 t
- H% ?' P0 g. U) D7 N9 j
       asm(" nop");
  _" a- r1 p. e4 B/ ?  p4 _3 b6 n3 Y% H- S3 \
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 j- ~) p4 B0 j2 j. ], J    }. G5 \2 w3 O# Q5 c  l
6 I, I7 i9 z2 C/ @5 s) A  B
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ D  I3 s2 F- t+ Y/ ?+ c# r( Y8 Y    //UARTprintf( "i=%d\n",i);# v* c2 g; F+ p$ w; }9 u
    //UARTprintf( "j=%d\n",j);
8 R2 y8 N: [6 M- G* f; N& n6 V9 R    UARTPuts("Data mismatch in buffers.\n",-2);
/ p* B: e0 v" G: T* a/ J" Q    if (upp_interrupt_count == 2 && upp_error_count == 0)1 c2 s2 L+ U: z5 f) q
    {- t6 X+ y% R( W2 `
        for (i = 0; i<upp_frame_size; i++)
) {! ^. l$ f# [8 Y! f% v        {* E9 v# }3 ]4 C
            if (upp_buffer_a != upp_buffer_b): a+ c" D5 y7 D' j0 J
            {
7 f& n9 Y' ]9 r! ^# |5 b0 t                upp_error_count++;* O- h/ a- v1 j' c
            }. u7 n* U. \4 I3 B! O7 Y. c# O" n3 i
        }
9 Q- z3 H. U$ t1 v' \    }
" O' n$ y$ A' g. W. m
& q! k3 g" u: G    /* 报告通信结果*/
8 x1 K) M9 V$ N: L  G    if(upp_error_count != 0), f5 }# X# U1 Q, {- _: d8 p/ v: M
        UARTprintf( "upp_error_count=%d\n",upp_error_count);( n# Y8 T- t7 w. V9 E5 i( K4 c
    else
5 Z. S8 h& \3 K* S        UARTPuts("uPP transfers complete!\n",-2);7 A8 m9 {, K) h
' x2 w$ a2 E# k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 v5 `: {& W- D! e) S
    UARTGets(ch,2);6 ]/ _; ?, P; k
    UARTPuts("\n", -2);
. X  r0 c  j6 k, i) S$ s9 E
1 p& K  t$ ~' V( w. q) `. u3 i    if(ch[0] == 'y')
0 b" h& `; p7 V    {( v+ }4 f4 `7 m. w) j+ a
        /*打印全部读到的数据*/
5 c- V: I' \0 ~; \3 j        for(i=0; i<upp_frame_size; )
. I/ t: \6 N8 Z3 v! s, s; d  o' B        {! R  H5 Z1 X6 S% Q" o9 {
            for(j=0; j<5; j++)
& R2 P1 ~$ k# E7 c            {& p) l( b8 O% o, U
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);/ ~& J& A8 b' @( P: A' I+ h
                i++;0 l6 u0 S) o8 b( l, S0 a, [
                //if(i >= 4096)
1 I- _4 _. v" p  v, b! {5 J! A                //    break;
* X+ w: q; ?$ D9 h
" M( O# I2 a3 o* U' I- Q            }: V/ `  Q( L5 L: w) z1 p( @2 x
            UARTPuts("\n",-2);
: |5 r% T6 V* R& O2 D/ R9 }        }) ?6 v' H5 U; W( u1 V
    }: U2 K% [7 v- j8 |) j% ]

( T3 N0 A* T3 J9 Z9 u6 w8 s}

0 l! {  a& b& g" _8 F6 w1 j" n) u; A

# m( ^$ I  ^1 m0 \- u1 T  `$ I$ e0 j. S/ s3 K

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ P5 S' A7 J$ k( G0 C3 \

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 k  r/ P" s  b' M  f; w" W





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