嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ v7 ]: p( o. z% U
Void UPP_TASK(Void)
6 x: W" c8 w. [/ |{% _' [  H" Z* r. ^2 o

) A; g" [2 S+ y3 z& P    int i,j,k,target_int_count=2;
8 k) i6 a- q& K+ `/ i$ {) K3 P    char ch[2];/ `1 {" i- \  g/ H

! ^9 ?3 O/ T! F5 c4 f2 g9 o% O- S" Q8 u! B" j0 {$ E$ a9 J
8 e: g( y1 p9 D5 ~) ~. F+ Q" t+ N, D
    upp_interrupt_count  = 0;
* q9 B" S% r9 P) X3 @5 G, G    upp_error_count = 0;9 d  W  ]9 K& H- n- \  ]& F9 t) E
* ^" F5 y& A  Q, s
    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ p9 I8 r1 o5 d
    // Initialize data buffers
; m: r) S) v, L# E6 q1 T    for (i = 0; i < upp_frame_size; i++)' |) a2 r8 `! L
    {
- _' x# F3 R9 b1 Y( u1 M" A* j       upp_buffer_b =i;# h3 E3 ~( r: S6 _4 v2 C" [! ]
       upp_buffer_a = 0xDEAD;
; ^% `* ~6 N5 K7 F  X    }; n' x" D9 x' e. I, q! {& B
* G6 M; L6 \0 a* \* V. H( _
    //for(i=0;i<1024;i++), Q9 k7 _3 |' J% G! N
    //    temp=0;
1 Z6 ^" V8 h& t9 d3 `7 ?, ^
0 Z8 m$ [+ h  ?! m    //UPPReset();
$ D1 B( m! J% ~$ D; P    /*启动UPP DMA传输*/
2 w0 O4 I: m3 r1 F! W, b    UARTPuts("upp_prog_dma_i\n",-2);
! {, m8 ^0 |, I- B( k    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: X; c' H) V2 ~% h3 S
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, d; V& K, e2 l
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ t) ~( L; C8 ~' [" ~8 g6 j1 G' R3 C; U- p* U  I/ V$ v' N
    UARTPuts("upp_prog_dma_i\n",-2);
$ i2 ~8 g5 n1 D. e    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ W1 q0 @/ L0 i5 ]4 ~    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. |+ ]" h/ U( I$ O2 g
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% f: l' f. S% [0 @1 s5 r9 b% ]. t& I5 v
    /*等待UPP传输完毕*/
- I* C/ s+ D0 `    //i=0;
0 L# F; P+ w: i4 M  \* K* y    //j=0;. b' P: D+ E8 \7 K% P$ [% D
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 P1 }' L$ v6 f2 n7 j; L    {: q; m2 ~4 q# q0 Z) M
        /*  测试UPP传输的同时操作普通DDR数据
# a, K; W1 s' v        temp=i;7 ], q" Q' t' `$ B# S, }1 I
        i++;
. s$ k/ {/ n9 m1 p5 [, `+ F        if(i==1024)
3 q8 N1 D9 D- K/ G% n- j: m9 W% z        {
' N2 l6 X5 S. \" Y% P1 s) d            i=0;3 j3 W0 o1 b1 x; f9 F7 |
            j++;3 Q/ Z. u7 A, e8 L- f8 F
        }
- q( H+ y7 i7 y! ~$ C        */
" s( {$ x3 |: V- r
" C1 ]& E$ y( k8 O% }       asm(" nop");, l' H* U& l  T( w5 V0 F4 e2 ^

1 ]: |5 m# W! ]( Y3 O* r       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 t, y& f9 x4 H1 E    }
8 X7 G- ^8 |$ {( x6 O% ~4 C9 s" U+ T* X
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 c) ]7 p8 ]! g- H( b    //UARTprintf( "i=%d\n",i);9 K% L9 {8 i: a% F5 g* R
    //UARTprintf( "j=%d\n",j);
/ G4 S( f7 ]9 d7 u    UARTPuts("Data mismatch in buffers.\n",-2);$ y9 a8 ?1 O- p* p+ L
    if (upp_interrupt_count == 2 && upp_error_count == 0)( I% U6 |* P8 I5 F3 D+ b
    {# v; V  b5 L: L3 m4 ]# X
        for (i = 0; i<upp_frame_size; i++)( z: j2 ]# h, w! F4 W$ A! m
        {
0 A, B5 W; g9 |: p: m            if (upp_buffer_a != upp_buffer_b)1 X. B2 N& z* @$ }- i) E
            {
- h2 `2 V; }$ }) {                upp_error_count++;( _* t3 x/ u/ I+ i% {
            }
" N2 [1 W4 q& ?' c! S        }
1 w+ v5 l* @7 l* `    }
+ f: Z3 Z: a# v6 H2 D; t
/ }& E# u; u' o: m0 [, x/ O9 @& O5 [    /* 报告通信结果*/( f; @5 A1 R8 y: x/ @# ~& p5 x
    if(upp_error_count != 0)1 @5 f; i0 I% U+ T
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ s1 e# {: O/ i6 E' N    else; E+ V# t  p$ c' N9 o2 }
        UARTPuts("uPP transfers complete!\n",-2);& ?$ F  f/ R/ L1 P; G# U$ b) E
8 t6 T& S; ?9 f( D* D# L& g
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 b2 M8 [% `5 }( v1 d4 z
    UARTGets(ch,2);) N$ k3 ?% z4 V/ {
    UARTPuts("\n", -2);; o9 l2 g+ v" h
* m2 j7 u/ |3 y+ o$ [1 J
    if(ch[0] == 'y')
. E: e6 z# @/ r1 d    {  S2 x  Z( w; ^, X% T$ ~
        /*打印全部读到的数据*/
; F& r' b* f. y7 k, p        for(i=0; i<upp_frame_size; )
. b" v" t* f2 D        {8 R: o  `4 _  }
            for(j=0; j<5; j++)' {. C1 Z: q; i/ o* u$ @
            {8 `% p0 y$ [3 W
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; q) [( n" e+ i. K# |3 Y7 K                i++;0 u9 }9 y( m) {1 k* v* n! f* n
                //if(i >= 4096): Z& |3 s$ T7 i7 W4 P, H4 O3 i
                //    break;1 R# l) i3 c6 Q
! N8 p7 g/ U! a5 m
            }0 u* n3 H- }; u& y) g9 Z3 u, A
            UARTPuts("\n",-2);
9 B4 j# R: {! ]4 O5 U0 O5 m        }
7 G# U, e/ X% i8 _, ]( T    }
$ q( Y8 c  p! H1 b3 ~
2 U" v/ f9 O1 c  k}

; [6 N2 \" D! G& r

, C- O4 H6 a% G1 H" i. `
6 _% L" x2 T5 a+ \# c) g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 H# K) ~" x" d
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& j4 p5 \0 d$ r% y0 _





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