嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& U7 B4 b6 Y, x& }) F& x- T
Void UPP_TASK(Void)- I' a2 M4 \$ Z# c$ @2 J
{
& r: @) s$ s( T& P  |6 N4 x
& _# w% a  o$ |# |, R    int i,j,k,target_int_count=2;8 }4 K  c! r# ~0 J/ y2 Y0 |$ \  M$ W" k
    char ch[2];* v4 V6 j0 K' x) H! [$ |) b+ `, \

* f+ J; G3 [: ~" v5 `! X# B3 r$ E& w" g

3 V2 \, \4 P3 i    upp_interrupt_count  = 0;3 V9 u1 D4 |. M
    upp_error_count = 0;
( M0 p( o2 r0 R# @( x- q& v2 _* d1 f/ A5 e/ e0 p" E
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
& w9 b0 h. Q, z4 v5 Y    // Initialize data buffers
/ A1 p: I( g5 s0 |. C    for (i = 0; i < upp_frame_size; i++)
; M5 p( q- g! z( n' h    {7 {9 z6 \5 Z& z! s9 C3 ]" ^$ K
       upp_buffer_b =i;
4 ~0 ?& o: d' H1 ?0 }       upp_buffer_a = 0xDEAD;2 S: i% j. w2 Z( Q3 e* n
    }9 a! N( ^2 u( b9 f' Y; N1 g. i6 k8 s" _7 |6 w

+ \2 v7 N$ b+ u  f1 ^+ `9 `    //for(i=0;i<1024;i++)2 ]' ^, C9 N* \3 S
    //    temp=0;
0 j# M' k& ]4 L% c
7 k- [/ p% g* I) m    //UPPReset();& \4 S1 D  _8 `2 h$ i! ]
    /*启动UPP DMA传输*/! D2 B  I, `& G0 N% r' b+ E
    UARTPuts("upp_prog_dma_i\n",-2);
3 }. {1 J. s: ?, D* B( Q, A    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 f- G+ M) d6 x9 i9 v, |4 d' E: q    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 D* [7 C$ z  C7 E/ O
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. k8 N4 e3 G, Q' X
4 c) Z9 o( e) m8 o- m- B
    UARTPuts("upp_prog_dma_i\n",-2);
1 s8 x+ E; Q1 g! V! J  H! l    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 I* {# u1 ~, B, m# n0 B% l& V
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' A* Y- p- q+ Z- F* O
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);/ E$ M1 W# s& c/ G3 R

: u6 X! t! m0 C6 t    /*等待UPP传输完毕*/0 P- ]' }% r/ @8 B$ H
    //i=0;
* y' U0 h2 ?6 e- a+ s! f4 O    //j=0;' v- d, E7 I" [/ `6 V
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)0 u" P3 F0 l8 O9 n
    {; H& F* N6 C1 n' ]9 }3 Y( m
        /*  测试UPP传输的同时操作普通DDR数据
! u9 L, i, @9 E' j7 m        temp=i;5 W$ o0 ?  r4 _$ s6 s# z& }
        i++;8 G3 k) `! P/ M/ q* x( A, }
        if(i==1024)
$ U- Q- g2 ~* K( [/ \        {5 ~; G# N$ `5 ^. F5 h, f
            i=0;( ?! {. R6 k4 G6 r
            j++;
/ H" Z/ q( M9 _1 x2 T1 N        }3 z: p, D" w5 z( ^, u
        */% p4 D' C/ h& x, |; g- [1 E/ W

$ ]$ F! O) e9 i2 g! X       asm(" nop");5 m7 h+ k  I' k7 ~' t3 a
) F) `4 `, j% A8 j/ m
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 g+ l$ j. M) G& S- g* ~/ p( }* j    }, ]3 c7 v6 A/ z; O) d

) C$ A% O) r; u0 z' `- a& K    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- N$ P8 C2 u) G% b/ r. {) z    //UARTprintf( "i=%d\n",i);
4 |  Q- {% m1 c  `2 `    //UARTprintf( "j=%d\n",j);$ o. G! r7 S1 ~, c
    UARTPuts("Data mismatch in buffers.\n",-2);' i8 P& C1 ?; }$ e* @
    if (upp_interrupt_count == 2 && upp_error_count == 0)9 E2 G/ h" I" A$ o3 S
    {9 T* W; m3 h: }: P
        for (i = 0; i<upp_frame_size; i++)
6 A% R$ u. t% t& x' m# \        {
& W6 l  n6 p% @" N+ S8 J            if (upp_buffer_a != upp_buffer_b)9 C; V! q/ L1 F; h5 v) h  K/ z
            {
. z- r% @" c* m+ X/ N$ U                upp_error_count++;9 a7 {4 {/ Q0 @5 P9 z
            }/ B+ H. g0 |2 `5 ]5 [
        }
/ O& l0 w& {' E8 [4 B2 C0 b    }
6 v/ e8 D# ^9 H; K3 R) N# D2 {8 j3 `  W- S- R" M8 T( y% t- ?
    /* 报告通信结果*/
- h- C" o/ G4 E( H7 v    if(upp_error_count != 0)7 D1 ]  H7 @9 q
        UARTprintf( "upp_error_count=%d\n",upp_error_count);8 t) B3 U3 H- p3 M1 z- {1 f
    else- }' N% l6 j0 {! @5 o
        UARTPuts("uPP transfers complete!\n",-2);  O- K% x2 u8 f8 A( ^

9 @4 x/ {& i2 x" E* E8 \    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 s% H( ~% e( I4 x, n0 u
    UARTGets(ch,2);
) J) f4 b/ }" o9 [    UARTPuts("\n", -2);
. ^& t* }9 A7 Y0 G4 k! A; [" b3 ^' ^) Q% U/ l+ |- }
    if(ch[0] == 'y')
% L# F1 ^- p+ z9 w    {! Y0 T4 l; x/ {" X) k
        /*打印全部读到的数据*/
7 F0 A2 \, q/ b& X' C' h9 D        for(i=0; i<upp_frame_size; )
6 w# u9 D+ ?; G" [" R# t        {% P& w/ I! c3 m, D0 S( W. D
            for(j=0; j<5; j++)0 _) o" |: d7 C& D! y4 |/ u
            {  Q1 ]1 `1 y2 x) t/ E3 e
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, @6 Y+ a# B3 H: Z                i++;
4 l* v3 E! ]- F. L                //if(i >= 4096)
. R4 q5 l) d: x& _) q; s0 f; p                //    break;/ P6 O; d/ p' Q

, N9 H# o7 y% e1 l            }
8 ^. _* `  A7 V. P$ v( v- J% i            UARTPuts("\n",-2);0 K" W- V; P, [5 d1 p( r: k/ H5 T
        }0 Q6 @0 s1 s/ G
    }& m* A9 @& i, `2 P3 o" u

: t- b$ t& n9 j6 M2 u}

+ h+ L9 H+ w, ~! _' ?4 x  V
2 C! C) ?4 s& c$ }3 K

9 B3 l9 m  i' S  D' Z. k. I" \4 }
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ _/ V& j2 `! O( h; c: [
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。2 m- y# N6 t" H  C( o





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