嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?3 |) P; A+ |) F2 s0 {
Void UPP_TASK(Void)
8 s% q: B& k+ i, s/ c{
4 e! @$ f. b# P# b* y5 L3 g
8 I4 U% }; C9 W2 I% @# r; t4 m    int i,j,k,target_int_count=2;
) L& p2 m4 {7 d+ h; Q) D2 S/ r    char ch[2];- ?, a6 X* x9 b4 g$ E) A8 F, K/ v
( `# ^' k  u5 C  X1 q# u
  r( O6 W& R7 f) e7 S
, l+ @7 u/ U7 w$ p! w5 \
    upp_interrupt_count  = 0;
6 ^) ^6 a( B2 _$ p$ ~$ A8 D    upp_error_count = 0;2 \7 R6 g& h) t: t/ ]% X1 \
2 H" X; P9 ?: V: ^; H# ]
    UARTPuts("\tResetting uPP buffers...\r\n",-2);& N. v$ E0 V8 T8 @9 J6 F2 m0 v
    // Initialize data buffers4 Y, k, }; F0 Y
    for (i = 0; i < upp_frame_size; i++): O; N3 A4 c! Y1 c# P; c: K" X
    {7 o* J+ t1 Y8 J! U+ n4 b9 O
       upp_buffer_b =i;* W# h9 q" j) t6 Q. D0 Y
       upp_buffer_a = 0xDEAD;. X3 y- c- w' E1 w8 j$ J# q
    }
5 O1 L2 ~; _: z( ?  [* C; ]& B8 I' N" \
    //for(i=0;i<1024;i++)
8 K" Q/ e- V) N/ d. [1 K    //    temp=0;
! r, P7 E7 N' a5 C4 P- M7 o) z( I4 ~( [0 `( g. s
    //UPPReset();$ T( G1 ]6 c2 [3 s5 g0 U
    /*启动UPP DMA传输*/
$ I1 E. a; [8 o+ c; |6 G% {    UARTPuts("upp_prog_dma_i\n",-2);
# {3 c* P" ^. d( z# ?    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- k# W! z7 z' u, r1 {
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 z- s* U: q5 u- D    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. [# x4 X4 Q* w8 x0 h/ T
7 Z3 z2 ^4 Y7 Y  a    UARTPuts("upp_prog_dma_i\n",-2);
* m. @- V8 i# ^. ~5 M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ x# X0 C4 r# Z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ ~% S+ g; S2 ?  X9 v; U
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( U/ H3 n$ c) @$ u7 o  z  D; Y# t& I/ y
    /*等待UPP传输完毕*/
( j& D$ |8 c- r2 s9 s    //i=0;
2 \" c5 S/ r5 u! N. f* J9 i    //j=0;; ]4 A/ X& N3 b3 R* J5 F
    while (upp_interrupt_count < target_int_count && upp_error_count == 0); t- d' F# L+ C0 }( X
    {( i; I2 U" u, ^7 u  O* p" p/ N
        /*  测试UPP传输的同时操作普通DDR数据; m* ^6 n) M) l- o$ P
        temp=i;) S7 o6 r% V5 N$ e( w0 J3 |
        i++;- i6 a9 @! z7 D; m: p4 {( s
        if(i==1024)
' X: v5 R3 e$ m* ~* f        {2 M/ j, U" ^8 h; o
            i=0;
6 Z8 _/ S0 U1 |) t; ]            j++;0 \* L6 W+ O0 z
        }0 T0 D8 y2 T0 W, H# u3 U9 B
        */4 _" _% e1 x& P! y4 z, q
" O4 n5 }0 V  d# a' K* c/ I
       asm(" nop");
' {) w. H$ c  a+ q% I
7 G& `. ^" J1 @/ E4 B4 d+ j       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 R. H/ F0 ?' Q3 p# k6 y; d7 E    }4 F! d1 \+ G+ g+ k, |

6 |$ j, @  ?3 P9 k; |! D3 v$ I/ r9 n/ M    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* o4 j2 W1 |1 I; b9 x8 e    //UARTprintf( "i=%d\n",i);( s2 X$ V" U6 X
    //UARTprintf( "j=%d\n",j);% C- c8 B( {$ \3 U2 A6 z4 W# m# H
    UARTPuts("Data mismatch in buffers.\n",-2);2 T) z# T( l6 P2 l
    if (upp_interrupt_count == 2 && upp_error_count == 0). `4 c# \9 p- E; b: B
    {3 G1 u  C+ z, D7 g
        for (i = 0; i<upp_frame_size; i++)
3 @: J+ r. J1 G4 T& h* t/ D        {
, n0 e. |. B9 J( _, b9 b: L: ]9 O" R            if (upp_buffer_a != upp_buffer_b). A* K# Y3 F1 Y: K$ T; l2 T" b
            {
1 ~) a( U4 R0 C7 J0 S                upp_error_count++;) S8 Z% Y5 d# x4 H
            }. s" [0 x9 I  i6 h: n7 ]) W
        }, c# W+ [/ U1 ~, Q/ m
    }
1 P+ r" Q: g, U# x: t/ Q, K. l& b/ B- ?( s/ _2 H  ]
    /* 报告通信结果*/* ?* h  y! m- u: R+ X! {$ G
    if(upp_error_count != 0)2 q9 e- x; O7 p, c$ M
        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 v, B4 g& c1 L6 k; I. v; B+ o! O
    else& r- ~5 q' N5 F6 R- [0 r. W
        UARTPuts("uPP transfers complete!\n",-2);* O' g$ e+ O! u6 V: A

6 E& C6 }  \# e- w1 _1 N& F    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 V5 M: z+ Z; T2 |6 p9 J& l    UARTGets(ch,2);
3 _# W, V5 a# y6 z* w    UARTPuts("\n", -2);; u* t% H! t" Q# g
& Y1 L* P& a4 N" a$ X2 X
    if(ch[0] == 'y')
$ x2 l5 P, v7 [' g! B* r    {2 X- l6 V( B2 N) y* m4 F  l
        /*打印全部读到的数据*/7 r5 H$ O4 ^* g) h7 |2 R
        for(i=0; i<upp_frame_size; )2 l5 U, d" D& h
        {
* P# D! i% Q5 t$ h+ t8 g+ q2 s6 G            for(j=0; j<5; j++)
1 b: O$ ]  @. s; i            {
2 Z6 p& }1 P  c8 t. f                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. J' b, V( S# {4 M1 m" ?- }8 l
                i++;% G" G! p  l+ d' z
                //if(i >= 4096)
  j' b9 {' r  x' P                //    break;
) D/ O, W( j* u7 k1 t3 t
+ ?1 _0 C8 t; K' K, z) L& E            }/ V, E7 N, p4 W7 F8 m5 x2 k
            UARTPuts("\n",-2);
; r. ^' e7 T  n        }6 b5 T" G! s- q1 {4 z  z
    }
# A2 U3 U' J9 m$ a: w
* \/ Y1 x! |" [( ]+ }0 R9 W+ T) }+ s; ?}
( E* j' G* V- P2 c( p+ _5 Q/ i4 R% G

! \6 O; G4 r: r0 D0 J$ u# T" k# p0 z' G; S. o

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。$ f" J# l/ n! {/ z

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* [; @; s$ A. l2 S7 L; q




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