嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 j4 @5 B" V9 D4 |
Void UPP_TASK(Void). q4 R* ~4 A9 ]& Z7 U' U4 l0 ^% @
{4 i$ I) A, f- a* y. W
6 l) u! _+ P* }3 Z  R+ m" O
    int i,j,k,target_int_count=2;) Z( c# ?: p$ _" r8 u/ Z
    char ch[2];- z# h% f5 o( T( e9 g8 N8 @

0 n$ h+ @/ L: ?. U5 r0 N
( g$ k0 M# `0 y" n" r  x6 W7 e* v% F$ _- H7 e' Q* p9 T6 m
    upp_interrupt_count  = 0;6 F3 e/ P- A; Z% m# o' J) Z
    upp_error_count = 0;+ h* W6 u4 J( ]+ z4 V: v
6 h! Y( y1 p' g3 g1 V9 F
    UARTPuts("\tResetting uPP buffers...\r\n",-2);. J3 D0 S, o, s$ R2 u/ E
    // Initialize data buffers: H5 h- f. Y$ e# R6 B2 J
    for (i = 0; i < upp_frame_size; i++)5 _' F" V; p# S/ v1 U5 T
    {
! i! a1 X9 @7 t! f! y( J# q       upp_buffer_b =i;
  s+ ~; O  Z$ }7 V" P$ V: T       upp_buffer_a = 0xDEAD;
& ^6 _2 g4 P8 Y, B9 t+ i8 Y" i    }
+ a% B* n& }: k/ X; s: D% j! z* E7 H  e0 N* k* Y' c5 r
    //for(i=0;i<1024;i++); T! [4 M% S& K5 ]  r1 q
    //    temp=0;* t" c/ u* w% C- b) h2 `9 N, |/ h

( M" G. m. \+ L$ C2 |    //UPPReset();3 k1 I1 x. f( r9 j4 u! V& F
    /*启动UPP DMA传输*/) I7 @1 a8 z4 h1 ?& v7 A: g
    UARTPuts("upp_prog_dma_i\n",-2);! t( s& q" }6 \! x
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# U) P- R' Z+ M* }) k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) ~  |, l5 i5 `6 E/ a
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 T  X2 T4 d; y" M; d8 A: e/ w) b7 y$ |/ X4 ?; z
    UARTPuts("upp_prog_dma_i\n",-2);; e, D0 P& j1 l# m# V
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ f  \  j4 D( m. f* r    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- x. l# ?8 }7 e  C3 G8 O* d2 K8 v    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- T. |' ~: j! V* ?4 ~3 C& @6 E4 \
+ ?8 s4 ]" j  c( A5 s; _* q    /*等待UPP传输完毕*/8 S. }* K; f& J7 I
    //i=0;1 H' N  r0 k& w( Y8 F
    //j=0;
: m4 q" O$ G8 s$ a    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" d- p" W  O, B' s! I( {    {
5 u" d. w4 R! F- U' d5 J' [. b% I3 K        /*  测试UPP传输的同时操作普通DDR数据
+ T  S9 R4 N9 B. e1 [* @2 ?3 e        temp=i;1 _. Y3 i. e9 h3 l( V) b& T
        i++;% w2 x  j. o! w, d
        if(i==1024)- I; h2 K5 \: N/ N/ ~5 d; f
        {; `& U, c0 z' t! P( D3 @  p: E6 R+ k
            i=0;( _8 ^* d  k1 d4 R, I
            j++;
& T- d$ Y/ C" \9 v( y* I        }
7 t( L* C) W! u% l8 u* G% X' h        */+ y! H3 b  e% m* h8 C  V

' T9 a7 a- `- R* {1 u$ E# U  ]3 u5 Q/ ^       asm(" nop");# u7 b: X7 i% v4 m! ~( }+ v% y, A
# H$ a) d; g7 q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 r* q7 ]3 l. _
    }
) ?$ {+ a2 e1 t9 G! g* M/ @* E8 f1 t& W8 r9 o
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 `, H! x( c; E, X5 F+ H" \    //UARTprintf( "i=%d\n",i);# K; ^9 {7 Q# k3 K
    //UARTprintf( "j=%d\n",j);
' C+ v) {+ j$ _! f% V7 J( y    UARTPuts("Data mismatch in buffers.\n",-2);
- @0 r6 Z! h1 [3 k4 v! T    if (upp_interrupt_count == 2 && upp_error_count == 0)
# \1 y/ y7 p- |$ L6 O    {
% j2 X! f2 X2 u2 z        for (i = 0; i<upp_frame_size; i++)
4 D1 M# H" o$ z1 l; L        {
9 s) c% m' @6 v3 S) N. i            if (upp_buffer_a != upp_buffer_b)
9 @& R, P( t! {0 K0 Q1 S! _            {/ M' O2 b8 @" E5 i3 M4 R: A  O9 L
                upp_error_count++;) G7 f+ V* I  i& R+ f- ?9 Y
            }
+ t+ X6 W/ Q0 ?9 \5 ^        }
- o% t0 I" j. f# {8 [2 o    }8 {# [8 `, E# P/ Q

+ L% i/ f: a# y7 d; u0 f/ C, R    /* 报告通信结果*/' c9 w# |: q+ K  P" |3 s
    if(upp_error_count != 0)
# E. F4 Z+ s( n9 g" c/ q5 A        UARTprintf( "upp_error_count=%d\n",upp_error_count);) Y) U# R* r3 I/ a* y3 j5 G7 M' n
    else; u# S) R- P- v) ?6 \8 t. h
        UARTPuts("uPP transfers complete!\n",-2);
- f5 E' J2 Q. Y4 j1 @: l7 x( ?) k# F9 _. D3 `
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 V+ i! I- N/ X1 P, A8 x' b" F
    UARTGets(ch,2);
* c3 d) K2 [1 V! Z    UARTPuts("\n", -2);
8 Y7 r) L2 U: r4 ^5 j9 }
; f7 w; D6 v2 S! ?& L    if(ch[0] == 'y')3 W$ J7 [/ F. ~2 ~5 F
    {& X0 W7 H5 }$ G9 m! Q
        /*打印全部读到的数据*/
/ R$ P8 G& B! r2 o) r, Q" B        for(i=0; i<upp_frame_size; ). [2 G: f( L6 w& L7 l. K% |
        {
+ c, o$ Z4 F( d! D, p# m            for(j=0; j<5; j++)( D6 K2 z, ^5 d+ z/ S$ T- V
            {
- I" }; a7 O- H1 i                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' H9 G& |2 D% X) u, Q2 o
                i++;
% U1 L7 ]6 T3 ^                //if(i >= 4096)
% n" R/ A! M6 W7 q                //    break;1 L+ t) h- o* n0 w' a: |; \3 N

5 S% L* D0 d; t) Z; ^            }
$ S9 v* U/ H- J2 j# @# ~* e" `9 d            UARTPuts("\n",-2);9 H: {8 [6 P8 r& r# H6 E  w1 K
        }
! ~( q: @" V( ?# u5 ]5 E    }% [; a+ y: x% m  ]2 z+ t

) h+ x; l5 ^5 M! E. D9 d' C}
- L6 M/ X9 ?- Y6 h7 {  g

; B8 T8 A9 W% A! z' V& X3 _  C: r( k2 Z' w  N) l3 m+ A" I

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 E) a( H* A& z+ \/ G
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 R. t- k/ K0 e( a+ b$ b





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