嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% A3 _4 J. j- C. P; d4 Z5 y
Void UPP_TASK(Void)9 H9 F* ~2 Y& s& a+ W
{
4 ^2 Y  Z5 ^3 s# }8 E- R
+ E$ `2 }; Q0 E    int i,j,k,target_int_count=2;
1 D% q2 h% O  \" d: H- Z    char ch[2];3 Q( p8 W  [$ u6 D

7 w# V9 o+ K2 T; N) l& K% F2 V) d3 T- }7 v

0 Q9 \4 |, t) Y: q    upp_interrupt_count  = 0;
) w* _: j$ U3 C8 v% y2 ]    upp_error_count = 0;
. K$ K9 @3 |! k" |9 Z0 N
9 q5 T1 K3 H0 l5 ~- |4 N: U    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ I5 P& f4 z: i; N! Y( R    // Initialize data buffers
8 Z& c. ~6 O. N& t2 \( u9 Q" i    for (i = 0; i < upp_frame_size; i++)4 O# |: T5 I: h. z* z
    {
/ k5 m% k4 w& Z4 J# f( B; B$ x       upp_buffer_b =i;
- }9 N- z3 M' x' f       upp_buffer_a = 0xDEAD;3 X# ]9 I# M3 w( W' b
    }7 M  W8 O: ]! [  L7 h
9 l; ?. ~; R$ k, g: s
    //for(i=0;i<1024;i++)0 U# E$ w  n0 {/ |- Q" r  S- T
    //    temp=0;
! r. @7 V4 F; ?% o/ K% s5 y# P0 \6 W" i' g7 Q1 D
    //UPPReset();) ?4 {7 y* [( A# S  u1 x' |$ k
    /*启动UPP DMA传输*/
" I# K0 v9 _! c    UARTPuts("upp_prog_dma_i\n",-2);- x3 x3 V# K6 V9 l$ _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 J1 B! j: R- @6 d; Z& o( B  ?' j
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' C% x3 [2 n. d6 E
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);: A+ o6 [7 I0 h3 |% A2 F

$ G% d. r# X# t& k4 M) n    UARTPuts("upp_prog_dma_i\n",-2);( \6 e2 C. o/ `
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ v3 u3 ~# n7 c' c    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; N/ Z( E$ ~/ l5 D/ ?
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 M- C3 l/ R6 T
* ^8 y. u, u4 b/ X/ h0 T    /*等待UPP传输完毕*/0 J) Y5 f. W2 r) O$ k1 t, ^
    //i=0;! v5 j3 d2 N: B& ?" x
    //j=0;
2 S* A5 {0 r- }; t# r( J7 [    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 O3 Q( K% N( c% n, V- z3 m    {; i" ~2 ], u, z8 n
        /*  测试UPP传输的同时操作普通DDR数据: G5 }6 b* o3 s; O6 w$ a
        temp=i;
- a- {; z$ g! [7 Z        i++;/ I. ?& X3 G0 Q  A
        if(i==1024). S7 D: W& v3 m/ f% [
        {
" z$ n- h/ x5 E9 T1 _! M; F2 z            i=0;
, t/ }) F) }, h# d& S& p  O            j++;  D) a2 I6 `9 f! A9 I
        }$ F- U6 y0 o+ I% B$ C8 d
        */0 X- v! t# H  d0 I# U4 Q# U8 H

. K: c% h! T* o* s* j( U$ @       asm(" nop");
: Y" [$ s( ]3 \. U0 y$ `/ Z8 @5 }2 D! ]; y3 O+ Y1 Y; v
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);$ g. m6 p* D3 C* r0 n
    }
- G1 k/ u) F7 a
: W8 V! M) U4 L    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 a: R5 t2 b; D' {, x7 J    //UARTprintf( "i=%d\n",i);
' t* g2 S$ q# e9 F    //UARTprintf( "j=%d\n",j);# g1 ]( w4 R" I2 z! T7 {# J% t
    UARTPuts("Data mismatch in buffers.\n",-2);- ~4 Q/ Z+ [2 h, ^
    if (upp_interrupt_count == 2 && upp_error_count == 0)0 i6 N% y& I; n  i6 A* G& Q+ ~3 W
    {
0 H7 K& |' `. Z3 R) ~        for (i = 0; i<upp_frame_size; i++)& ]+ A) d' Q$ j1 G( m( J# D4 x
        {4 ^8 Z& d" l, U! a+ p
            if (upp_buffer_a != upp_buffer_b)
/ F! w* b2 @! r$ p1 m            {) |+ K+ J' c0 n* I& c3 @/ i+ @$ \3 H4 ~1 p
                upp_error_count++;
; f0 O+ j( B, m# c0 [( _0 k' \            }
$ }! z' Z$ R2 f; N        }
8 p% [! e5 Y2 [. D    }
2 f# O1 I. [! b2 y8 Q
! }6 j' O, [( |$ Y- V4 @7 X# Z    /* 报告通信结果*/
; a# Y5 m! k/ i5 g/ g, z5 Q    if(upp_error_count != 0)
9 S1 S3 p, ?% T6 U- M+ D, J        UARTprintf( "upp_error_count=%d\n",upp_error_count);+ S. f% z9 f6 H
    else
* ~! d# I. B; J" ?, U        UARTPuts("uPP transfers complete!\n",-2);
3 E2 k( J2 b- A1 t; O* m
" G- f) U1 O$ i: o! k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 K, |! ^8 ^# w: S  H5 g8 c
    UARTGets(ch,2);
- K( p2 ?( M1 g/ |    UARTPuts("\n", -2);
8 E! j/ Z3 A: d2 R* e, }5 q0 C- \2 r) X" a6 L
    if(ch[0] == 'y')4 r; N4 u% C% ?
    {+ K; k- p: y2 x% W6 `3 j
        /*打印全部读到的数据*/" ^# l; F- f" z, r5 c
        for(i=0; i<upp_frame_size; )
4 a5 `0 S8 C! g$ l. w# l* O. I2 h7 l        {9 c0 Z# ~9 O( w! y, E! q
            for(j=0; j<5; j++)0 c" p( W! f7 A" H
            {6 [7 t" V. \9 _0 n1 w
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);: F, f- u- _3 W& z# u: @7 o) F
                i++;# |* v' R7 p+ Q
                //if(i >= 4096)2 w9 L/ P$ c0 x" i5 P: `
                //    break;
. Q5 R8 ?6 H; O8 E! i
1 C4 {* D# y; ?8 F. D- l0 t            }
  i& k5 M4 ]0 l  v5 ]0 m            UARTPuts("\n",-2);& b$ y; j! c" u! U+ h& f
        }
4 B$ v! M3 j, p0 W! c    }
" y7 m( J, J% x. K' _
# p5 y( u  B/ c$ j6 |/ Y}

! J5 f2 v$ v. u4 ~2 e

3 Y9 k. ]& Z9 Z6 J( {' b; J5 f' }. p0 h; x8 G) w* C4 ~

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" T; e. u3 R( S1 M
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( k; U1 J7 q8 `3 s6 O5 A





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