嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?' c, d. e. ?. O- i. `$ K, O& I, i
Void UPP_TASK(Void)( K, J3 l% K* X* a  k" r! r
{
! A+ c: \* b1 q! }* _8 W" T( _! x$ a# N
    int i,j,k,target_int_count=2;  }' j3 z, G$ X  z1 R4 S  _8 U
    char ch[2];+ v' H! H: Y! J1 `: c; h9 V8 E

8 `$ n4 z6 \8 p  J! ^
1 j, H" I3 L7 F( f1 V  K6 N
0 x# t9 ~. h: @9 O    upp_interrupt_count  = 0;
( \, K1 @" N7 |* b4 A. `5 Q$ N+ v" G, a    upp_error_count = 0;4 D# v( T. J( f$ |9 Y  \; X0 w6 g

6 P! [% b' l3 x3 \, f    UARTPuts("\tResetting uPP buffers...\r\n",-2);
- V+ k  j2 v1 d8 E" K" `    // Initialize data buffers
& ?; A8 E6 S  l: C- D  O    for (i = 0; i < upp_frame_size; i++)
% Z0 @+ A9 V6 f& u) n1 T" B    {
$ a( m  F0 M5 Y! t3 y       upp_buffer_b =i;. c) s" M! P6 K4 n; l8 ?- U/ L7 A" Z
       upp_buffer_a = 0xDEAD;% {2 q8 B5 m0 J8 H
    }* [1 X' F& g. K2 ^# C
) B  i& c7 o* w: G
    //for(i=0;i<1024;i++)5 B! l" N1 C! s" Y8 `  s
    //    temp=0;
9 Q- d5 S8 E+ s; r, o* r1 O& i  m! {, T. N0 |+ O
    //UPPReset();( e1 B4 b2 O1 d( I
    /*启动UPP DMA传输*/
/ w2 i: y2 n; `1 S! J7 D    UARTPuts("upp_prog_dma_i\n",-2);
2 k0 n: Y' }$ @. O+ g: m    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# K# y% Y) |. w" b
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 e# r5 i2 v) q( H
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 `$ A" {3 `3 ^' e
2 q) Y: o- g" v7 D4 x2 q' F
    UARTPuts("upp_prog_dma_i\n",-2);
' x8 q8 n5 n& }' F$ H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 u5 Q" w7 |2 r0 ^' F' {' Z. u    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 M2 i$ J& p" E1 {$ h4 h- t- ^
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ C. W, T1 l6 y8 H6 e7 C1 @3 D. X" P3 e0 A0 F# T
    /*等待UPP传输完毕*/
* Q$ M5 Z/ @: c5 j& F+ S* ]2 x  S- @    //i=0;
- v7 g5 m+ l: N" ?" C* w    //j=0;& d$ |' V# |* `& M2 R
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" ~# p4 U5 L1 K8 }
    {) b) W2 }) h7 y# [+ r
        /*  测试UPP传输的同时操作普通DDR数据
  H' ~( G, L) W, i5 t+ }# \% Z        temp=i;
& Z! }) M7 c: v        i++;% ^7 c& @9 I! X+ \* ^: G, y
        if(i==1024)/ \8 k5 K7 ?7 o! f* \4 g. g3 A
        {
4 G. _& g3 _& X; _& q1 o  O3 u            i=0;
# ^" @# o2 k4 J0 K            j++;
2 p6 }. S+ j$ V. P! t        }
1 b+ m4 `2 u* S# ?        */
  j0 G% v7 A2 i0 Q2 Q( ~+ k/ T0 N" M4 T
       asm(" nop");* m1 f+ W/ o) Y
' U2 L0 ]; T! ~8 K) E6 R, e
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 ]) K; y) r% x
    }; {3 [9 v$ `. ]5 X" [1 f$ C# _) S

. d5 t( o0 r, t. l/ T! U* r) }    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 G7 n( ]# w( E  ?& S7 z    //UARTprintf( "i=%d\n",i);
2 ?3 _: P7 t" u; ?1 a3 p" }    //UARTprintf( "j=%d\n",j);3 \$ |, p4 b0 U  g+ A, w' Q( z
    UARTPuts("Data mismatch in buffers.\n",-2);
9 H$ o" N0 t( G0 p6 g    if (upp_interrupt_count == 2 && upp_error_count == 0)
& P( @+ M+ d+ o: Q: h+ w8 `    {
# r8 j& l+ i& ?3 E2 q$ |" h" x        for (i = 0; i<upp_frame_size; i++)
5 F+ y. N, }# t; F9 }* S* k        {; [& f- O3 u* Z; X" x# H5 u
            if (upp_buffer_a != upp_buffer_b)1 P1 \  y! v: V; k* j5 i
            {
: U7 y9 v8 q6 K, T                upp_error_count++;
& F5 w* A$ y8 P( v8 A5 ]            }9 M( u4 b, U7 J1 m, a6 f0 t; _& I
        }: |& {7 ]% U) V
    }
! C3 I9 y9 |. R( r# c
9 V8 [% |$ Y  j1 N( w    /* 报告通信结果*/
9 R2 y; \  p$ R+ L    if(upp_error_count != 0)7 I/ Y8 l/ M$ G; q4 X
        UARTprintf( "upp_error_count=%d\n",upp_error_count);% r$ h. ^$ Z2 v0 w4 ?+ V, K
    else: u& ~* a3 X$ a0 z# Z% H
        UARTPuts("uPP transfers complete!\n",-2);
5 G0 S; C/ ]  Q6 r6 l8 Z, F$ r, |4 A3 C
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- S7 h1 g% _" {5 u& U0 Y6 }    UARTGets(ch,2);
* K8 O: T  s% C# j6 j8 r/ o, U! l( w    UARTPuts("\n", -2);8 H6 F# Y) O- Z7 q/ }" e
2 Y3 |! f* \# w9 J4 {
    if(ch[0] == 'y')+ P4 ?, O! g& z
    {/ B6 @+ Y( b" W
        /*打印全部读到的数据*/# t+ w' Y- B9 D$ U3 u5 K: g# z
        for(i=0; i<upp_frame_size; )5 Q; K' w9 `% M% E1 y2 [
        {
8 n+ U4 Z. D1 x' i            for(j=0; j<5; j++)0 L1 ~7 N4 s# x' e- k
            {. c) U5 q" z8 @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 ~2 B/ U$ b5 x* _8 @- P! h
                i++;
& T* C$ t0 e1 ?! E6 U1 Q* o                //if(i >= 4096)
2 x1 a8 I0 J  a# O2 L+ D                //    break;
" o. n# }0 F6 k% z1 ]" @8 {
! X: A8 A( d3 w3 w+ p' ~4 g/ \8 _  f            }$ H# j, c/ W! s; Z: `% \: k
            UARTPuts("\n",-2);# |+ o/ B+ i: w& ^# N' Y* `0 j' h/ o/ p
        }/ T/ Y% F- ?4 t( a4 _) a$ @
    }; E, O& T, y7 D+ E6 Z3 N
5 t' f* b! [& f  a# A
}
- R2 M! G/ N2 a) s$ g  ?$ D
, C7 ~7 i% z& m( ~, u. Z; C
4 j! N# y/ H3 k' ~

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。: q# v6 V' H% j+ N6 _( t$ a

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。2 Y* k( ]* G; l, {' }





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