嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# o6 r6 C7 ]$ \3 |2 L
Void UPP_TASK(Void)
* z- Z1 \; Y5 a: c( P/ |, o{' U9 \8 h: Z7 o
- ^8 u9 B* C$ W0 W: S) b! f# g
    int i,j,k,target_int_count=2;/ x- `( g5 {% f3 Q6 U3 I7 O
    char ch[2];; X6 K% p8 m. g& a. B4 r
# G6 O! f# L" r1 c
8 G, A3 O! R5 r0 C! j

4 z# R, w; A4 Y. x    upp_interrupt_count  = 0;$ F: u6 U5 f0 m
    upp_error_count = 0;9 D+ W, y; o9 `" n" h* y
6 l& Q" b; u3 H" K) R$ m1 J7 t
    UARTPuts("\tResetting uPP buffers...\r\n",-2);. i2 x# _0 W9 q9 S, d$ W( S  v5 W
    // Initialize data buffers# c5 Q, @. h7 k$ {. V, w
    for (i = 0; i < upp_frame_size; i++), W. f) _8 C% I3 ^% z
    {$ D* O- z! y  D5 Q+ @$ w
       upp_buffer_b =i;1 u; R4 |( t$ c
       upp_buffer_a = 0xDEAD;' p4 ~+ ?) j8 t& f# s+ Q
    }$ e2 }! n. F1 \/ j1 ~# |# h& X# t
- \; V3 ~" d  o) p- h* a4 k
    //for(i=0;i<1024;i++)! ?2 C' |% U* B& x: \. k. t3 r
    //    temp=0;/ @5 {( V% K' G* U/ ?  m
/ ~# s' o6 J, i
    //UPPReset();
! L( Y  Y. [* H# R( Q- K    /*启动UPP DMA传输*/
0 l/ `8 B( x. J3 |1 z$ e$ c    UARTPuts("upp_prog_dma_i\n",-2);
- x' \! S- Q2 I1 |2 m! @/ w9 X) `6 @0 R    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, m, K  v0 T! b6 P+ P, Y    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* r  R* g& M" k
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 w0 u; z4 n5 ^1 O6 B: J4 O
4 R- k& @/ U. ^8 m1 H3 S
    UARTPuts("upp_prog_dma_i\n",-2);
" f$ K" O! g5 @. l/ `: S    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 S4 Q5 |1 A6 i; m, P7 T! M8 Q    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: R4 m. W0 ?0 s& }2 J
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; u( L8 q8 W5 u9 i$ Q& ~
5 \$ y5 t3 i8 F( Y0 U
    /*等待UPP传输完毕*/- r4 F$ {: G% h1 ~
    //i=0;
( Q- H4 h9 c% x, Z    //j=0;
" X5 C7 b5 o8 g    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 c# ~( p# U- t- T
    {4 E4 m* O8 I+ p
        /*  测试UPP传输的同时操作普通DDR数据
: M8 j4 w0 Q' p& M- s        temp=i;
. J  B& Z. E0 N" w        i++;4 l' W- P' a$ ~0 d# y9 F. ^$ h
        if(i==1024); l' Z1 o' E) e; Y5 i
        {
1 ^' l/ {" b) F' G8 O            i=0;: w4 j6 v, p1 O6 Y
            j++;
+ @8 R) j( ?; J; o        }  x7 N# V) t8 o
        */
9 q" u- m) r3 r  r* }1 m
- w" e* Y; U( N7 x+ N# b       asm(" nop");. t0 N$ E, i; _4 ]. N  J9 Y. s

7 K6 Y! ~6 N4 M3 u' f       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 Z5 V! b/ L- |  f( X; g    }
9 X$ d( M& Q$ u0 h8 A- ]! f% @7 O$ M
    /*检查UPP传输的数据是否正确 (loopback modes only)*/. P" u$ s! w; Z7 V6 j; y- t  d6 |
    //UARTprintf( "i=%d\n",i);2 q% ]! u; P2 }1 I
    //UARTprintf( "j=%d\n",j);+ W  q5 t+ D: A  j
    UARTPuts("Data mismatch in buffers.\n",-2);
1 w8 ~- o0 c. X6 O  v3 Q    if (upp_interrupt_count == 2 && upp_error_count == 0), M8 w$ g- D  f* T: M
    {7 N- _6 A* [- m5 F
        for (i = 0; i<upp_frame_size; i++)
) v  Y! v; W! x# v7 I        {
: b$ Y$ v. P4 }% x+ F# \            if (upp_buffer_a != upp_buffer_b)% I9 {8 X. J4 L8 w9 k2 ~" q
            {: s/ I% u: s  _$ m) O' B
                upp_error_count++;+ |; ~, @/ b# l+ g, j1 }8 J
            }6 K+ d1 k' c8 }
        }& |& g6 F" P9 A5 g, G3 V3 \
    }* @$ P( b$ @: G. S1 B! C
. `/ t, Z$ n7 E' D% a/ X' b* [
    /* 报告通信结果*/( E; U2 D* K) M  L8 \
    if(upp_error_count != 0)8 U: d5 B! |5 X, a! a/ t
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; j9 l: S/ \- ]. Y6 x6 |  x    else
9 _% _8 P5 n% w        UARTPuts("uPP transfers complete!\n",-2);* l8 }- z! v9 m9 y
! i, a7 Z* Q$ d2 R5 D! I
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; \# t. j$ c9 ~% a+ f; t! g, F    UARTGets(ch,2);6 o% P( `1 L5 b. V
    UARTPuts("\n", -2);7 R1 \1 u4 M  d: _
; ?$ F& A0 W+ j4 J5 p- b( i! j
    if(ch[0] == 'y')  }. Y+ n- x0 ?2 i5 d
    {8 V3 e; _& z; i5 P' j+ W! @
        /*打印全部读到的数据*/& D. z6 |* H+ w
        for(i=0; i<upp_frame_size; )
& O( m1 I5 A1 m        {
( u: C+ V+ p% P8 y            for(j=0; j<5; j++)
6 H# c$ Z. h2 T* ]( J( @0 o            {, ^  y, z1 ?* G  M1 T& Z. P- ^+ z4 h) R+ ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
6 i, M* m  Z& i2 q  b% p/ ~                i++;/ ]: I) S( ^" e
                //if(i >= 4096)
0 X) Q) l, r$ g( B                //    break;
* v9 v$ {  S% F7 B) u) P7 x7 L! a
; |& I; r: x2 X. L4 c! T            }
. K! w+ _9 G- F4 U+ Z( W- z3 c            UARTPuts("\n",-2);
; [; e  g+ w2 ]* `. O" ~; y- v% v        }: K7 }3 E, h8 [1 ^7 ]$ }
    }' f3 _# y) ?" m1 W

3 G# D' R0 o; m1 N% q6 R}
$ X/ b  n  V1 Z! T8 |3 @8 K8 u7 K

, ?( j- n' W# g1 U( R+ a5 z+ A. J: f5 p, a1 Z% m; I

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 J) }9 D5 E% _3 j7 d9 G3 K& h) v
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 }; N8 R+ P0 G0 [& Z6 {/ G: a+ q




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