嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% X0 q' o* |$ _$ d6 j3 K' c% }
Void UPP_TASK(Void). N( r  M, G% i: Z3 l. G$ b; ?1 B- J& u
{
( r2 b- s0 s" x6 w
9 c. j1 s! e+ [( N$ |! l! r1 m; D/ F' e    int i,j,k,target_int_count=2;
4 X- n) n2 n8 h) {. ?, d$ H7 q    char ch[2];5 G  U4 @4 L* b
6 c! i" N# D) K1 s5 x: v5 e

% @( Y  p9 @6 Z( _$ c6 Z1 u4 D8 k1 T' a
    upp_interrupt_count  = 0;
5 k# B% a; w5 z6 |" V    upp_error_count = 0;8 _& }8 p" F8 `% |; P- @: P) m

( K" M: j, i; Y. U    UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 X  i: Y4 S, }    // Initialize data buffers6 H8 e. q5 }0 O- s/ }
    for (i = 0; i < upp_frame_size; i++)+ c  E: ^7 x! W3 U9 J* p# a% u
    {
3 o/ \, R: m/ s: S& p       upp_buffer_b =i;0 r9 A3 g+ s- y# ^. \' Z- {. Z
       upp_buffer_a = 0xDEAD;
7 x! |7 f% a9 o    }, c/ v  R) I# M7 Z7 a( `/ n; n

% [( d7 X& N$ j% [    //for(i=0;i<1024;i++)
* H0 n: |; }$ e$ v, Z    //    temp=0;
. A. ?$ ?. ?# A- l0 _; ~0 g2 X6 T& K' P* ?4 `! U: i
    //UPPReset();6 l4 k7 A" g/ w$ |. S2 r$ d/ R
    /*启动UPP DMA传输*/# y1 N% a. Y/ {/ r# @
    UARTPuts("upp_prog_dma_i\n",-2);
) m, e0 K+ l- h0 `9 O    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ W) S- G4 Y0 o9 K  O
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( C9 _% d. i1 A( v+ T, p; q: X/ H+ ]    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 {, i% H' v  E8 w  k; \( ~
* P* [. r2 [! m" S0 U. y    UARTPuts("upp_prog_dma_i\n",-2);
6 c: }- H1 O; h0 I8 V    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; i3 C9 _+ s: J/ }3 U
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" c) r1 ]  h- l5 M% d* m2 B    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 K' m- a& s  |0 N3 I
( p, P: B& @$ F5 M6 d5 ~    /*等待UPP传输完毕*/  S9 b/ z0 N$ ?) |/ Y8 l
    //i=0;
2 {) O. l- n) l" X0 H1 O9 L    //j=0;4 z, r+ ^5 t' D: p3 x: f
    while (upp_interrupt_count < target_int_count && upp_error_count == 0); N1 x& {$ e$ R8 J
    {
3 p2 _, Y* f0 ?' S0 i8 O5 g% l2 a        /*  测试UPP传输的同时操作普通DDR数据& E6 b. W  A8 n
        temp=i;$ a( m/ Y. q% r1 O$ U# T( ^
        i++;
$ H/ S- R8 v( f; b+ U' a        if(i==1024)# F2 V& P5 F2 _( I! S
        {% k3 v+ m- z8 ?7 f6 g  J' I5 q$ _
            i=0;
1 p6 v( C) |% D1 a0 B: @1 y            j++;. B% K/ \$ y5 L  ]5 [
        }
; B! q7 i1 h1 [9 A) V& t% y! ~        */7 {2 ^# [3 Y9 V1 o9 ~3 R) k

, R) W. m2 J, _& ^# t       asm(" nop");
; y; P( ^% q+ P7 v7 r9 k, \6 d1 }$ I1 b- E& i3 U5 y; \5 f, g
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 n2 H; y# {: ]: t2 Z$ M% O6 ?- m    }; I' c% v: ^( k3 U% C. b

# s" I3 r4 r, Z# c    /*检查UPP传输的数据是否正确 (loopback modes only)*/" W9 R% e+ b% V& X$ U. D6 l+ l
    //UARTprintf( "i=%d\n",i);
/ P- z. g( X' s; S$ f* |* Q' Q    //UARTprintf( "j=%d\n",j);2 k4 s/ w9 W  m$ z+ o5 T; x) R
    UARTPuts("Data mismatch in buffers.\n",-2);0 n8 F1 I  d( J
    if (upp_interrupt_count == 2 && upp_error_count == 0)
- S) a8 ?/ ~6 L2 G) T# a; n& B    {, E- ?( {6 @! n
        for (i = 0; i<upp_frame_size; i++), g' Y3 K4 I7 O
        {4 {+ ]2 Y4 `* }# k+ _
            if (upp_buffer_a != upp_buffer_b)
) i* ?3 v8 n$ K8 J" D/ y5 Q            {
; u& r5 V; D4 G, _                upp_error_count++;; x0 H9 v& ~# W# _' t" a: U
            }
1 U" [6 @& i4 n9 s! i5 y: E8 ~        }
9 R9 U9 U9 k, N" n    }
  l; B& r% M& d( D3 R8 v5 G& w3 P5 L2 ]! [7 j
    /* 报告通信结果*/9 M# }# l8 j5 d% q0 X% G
    if(upp_error_count != 0)
) N0 K3 \7 W0 K- d( |        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 m  S# V& t3 j3 c
    else
# a4 z! i/ d1 y6 h0 H        UARTPuts("uPP transfers complete!\n",-2);' [& t2 M: t4 ~/ v1 B' T+ w' J
. g+ T7 I$ d& P! W" n% k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: ~" @$ _' b9 }0 k    UARTGets(ch,2);
# E/ h) i# _$ a    UARTPuts("\n", -2);; @, A4 S3 _, z( f( S9 E+ r# |

0 S1 G: l) O6 E    if(ch[0] == 'y')/ [. a% q/ j5 @9 _4 a, A
    {
4 c3 E# L" ?+ ?        /*打印全部读到的数据*/
7 d0 Y# h4 D8 P6 G9 a/ J        for(i=0; i<upp_frame_size; )5 |/ ^* P; e! b. x+ Q; Q5 _; v% ?
        {
+ o& n' e5 f) u/ b4 p            for(j=0; j<5; j++)
3 @: v& [1 A' V3 J$ O1 x            {% N# p9 \9 N9 r" m" [
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
6 s4 G5 o$ x2 B) X# O7 b                i++;/ w8 Z% l" g- Y, i4 ]7 s* R& J: O
                //if(i >= 4096)
" e/ x5 ~- `" }0 ^3 H; w                //    break;( {1 O% L. h0 N+ N
- O$ ^" M* d* J* z0 V
            }- ]! m% ?; }, x% Y3 q- ^
            UARTPuts("\n",-2);
4 S2 t9 B* H2 X1 r' j        }7 N4 V3 e4 ]( q
    }
2 w) Q- |* ~, ^) M. Q- L
- @9 T$ w8 C! b9 s3 i- J}

" L' S9 }" \8 d* C. \

; V" L1 j: l8 j; x' T( E$ P: @" S2 h+ x/ q1 T6 q, L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。& L) }9 R9 w  k, e& Q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) `- ^2 `# ~7 {! u





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