嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 O, r8 C, Q  }/ ~+ u- k
Void UPP_TASK(Void); r8 I' |- C9 t8 l$ s/ N
{
& b* U( w$ J' p" `2 F6 }) f" U" E7 f/ s7 ?7 D6 s/ I! ?2 X. f
    int i,j,k,target_int_count=2;  ?, }  w% e% {. I; A$ w+ H
    char ch[2];9 P! s+ |  ^( M0 U3 c
/ T$ I/ b/ |- `- s" z( M

' r8 c9 B2 o7 }7 Y4 |" {
: J6 y- l; L; a+ O8 x: W0 o  r3 t    upp_interrupt_count  = 0;
$ ?: m* B% l& x/ x9 `- Z+ B    upp_error_count = 0;
! {& @5 q/ ^( ]4 E1 g& O' Y3 x
; h. ^  ~+ y3 |# Y# m    UARTPuts("\tResetting uPP buffers...\r\n",-2);% i/ \/ ~9 T2 n$ A* x5 ?
    // Initialize data buffers
4 x$ u' J% @# e4 a- W1 y    for (i = 0; i < upp_frame_size; i++). u; d5 `( @1 d
    {
0 `" h: ?$ j, i5 r8 K; Z       upp_buffer_b =i;' N: N! ^& G% c
       upp_buffer_a = 0xDEAD;' C0 Q8 ?/ W2 j/ N! w8 q" U
    }+ p. O( W: Q5 ^5 I! B
0 k1 b( q9 O( Z* M! c0 g' {4 b8 |! _
    //for(i=0;i<1024;i++)3 u& ]0 q5 o9 X9 i7 b. R
    //    temp=0;
4 P8 r0 @1 G$ c6 l" W
8 ~8 b/ N! ]! Q  Q/ b1 O. }    //UPPReset();3 B+ G. n8 ]+ }9 Q
    /*启动UPP DMA传输*/
7 K  A8 s7 S+ i& M" Y3 D& p% l9 n    UARTPuts("upp_prog_dma_i\n",-2);" h; j; w  @6 q  x9 h
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' a3 Q) T8 e+ H1 C! h$ K    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 Z- u; F( m- f( E( x, M' I
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 J4 A( p$ l" U( T) r+ X% m% E3 i
    UARTPuts("upp_prog_dma_i\n",-2);# x( y  e# K6 P9 u- A6 f. |" A- `' Q
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;8 m! X& t; {8 V# f
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  _! I; t) ]+ _' K% S( ?
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);/ a! S, i: D. s2 R' q5 g  I& |& C
7 m8 k; @. I( y) {
    /*等待UPP传输完毕*/; I! {' p# E5 }! F# H
    //i=0;; l, s6 d, G  l
    //j=0;$ p; Q( J: U/ V; f% z! J: J
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ s( D. B+ y: e* L3 j$ m    {. X4 ^5 Z: C3 {5 L
        /*  测试UPP传输的同时操作普通DDR数据. e6 i- y: }$ L# Q1 m6 X3 R; J
        temp=i;
$ D3 j# Z% ?- Q& M7 P2 ^        i++;* b' b" F5 i1 D, i; `* t) B  E! j. U
        if(i==1024)9 e; |5 P: a" m) t: b5 n
        {) e; D2 e7 x; X) [( J
            i=0;9 z2 @8 R# I, O; h5 f4 B5 A- _6 h
            j++;, \' b# T2 F* t5 v0 Q, o
        }
% b; j7 Z% `7 {9 f% V2 g& m5 I        */
3 J- ^' W3 L, e! Y$ e: ]2 L. r: {/ X. t# Y, C
       asm(" nop");0 ]( b. f4 C$ N) f4 \
+ U8 d6 B3 s1 V) n: \
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& |' E& _8 b- ~, |5 n' z9 a( j" L    }
9 A' X* m) g# q' N1 Y- R- k% O- D
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( Q7 L- `7 _/ G+ |" s
    //UARTprintf( "i=%d\n",i);3 N9 h4 S3 ]* [; N2 k0 c
    //UARTprintf( "j=%d\n",j);* S7 v  q7 l: R2 Y9 h
    UARTPuts("Data mismatch in buffers.\n",-2);
8 x+ A) P* [( {0 i4 s5 E    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 W( G+ M: K% |( K    {
( s1 T( z; j7 c$ j/ d4 j- g' \        for (i = 0; i<upp_frame_size; i++)
$ ^+ S6 l5 F* f! @* @        {
% M, n; g. @8 [            if (upp_buffer_a != upp_buffer_b)
9 F/ O" C9 I; ~# _1 ^            {
1 m- Z% b  h: v5 i$ w& ]                upp_error_count++;
9 [% p/ N6 ?6 ~" B# g            }
9 z3 W8 Q7 ]" S& X        }
9 H2 p/ A3 P; @: D    }; j0 a+ I/ ~$ u$ |  P8 {! e- c+ W

8 O: v" }( F* l! U4 H' d7 Y/ }    /* 报告通信结果*/
: l$ }2 ^5 R% u6 x& N; L: Y' S5 n    if(upp_error_count != 0): D$ v1 b2 j3 c$ L& l
        UARTprintf( "upp_error_count=%d\n",upp_error_count);% N$ T2 W& o9 c# X, Y, Q3 E  ]1 T
    else% H/ N" i. D; H, j2 [1 N$ O: b; e
        UARTPuts("uPP transfers complete!\n",-2);
( w3 Y1 D8 z& h* i+ J# C$ q
: k2 }' d" k4 s5 @1 {1 E    UARTPuts("Do you want to print all the data?(y/n)   ",-2);( Z4 r# P8 u( q/ E+ a! g3 s( R
    UARTGets(ch,2);
- R6 M7 W( ]. U    UARTPuts("\n", -2);
# q0 ]: M+ k- {, O. l( w+ D. f" S$ O6 w
    if(ch[0] == 'y')5 y( v4 D) \, x9 d; D" B: r
    {
: n# V1 l& j9 x! n: ~6 W) O5 o        /*打印全部读到的数据*/' r2 K& T) ^( e9 B/ b; N
        for(i=0; i<upp_frame_size; )+ }3 R* N* W. A5 d
        {7 Z9 f4 \1 Q1 P6 `5 P' j4 \
            for(j=0; j<5; j++)) [  i6 \/ k5 I9 E0 ?
            {8 J4 Q3 {/ z$ ^$ T7 r% k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  m( R3 I* Y/ z5 j1 B  E  H
                i++;
" b& I4 M0 P4 [0 j                //if(i >= 4096)" i% m8 w' m3 i: w- S
                //    break;8 Z" v, {" q. D, q0 L3 s

8 \/ J. e' y" c- S            }3 }$ s* B& h( d- Q
            UARTPuts("\n",-2);
/ F3 A2 ]# a/ X: {/ K        }. Q, m' Q5 O: {$ V9 N) o2 V$ O& |, r
    }) R1 R, j9 V+ g( C
  i+ ^* d5 D6 p. Q
}

7 X) g4 f- e3 o) e* g( J1 X
5 l+ U0 r7 c7 M& m3 Z

/ G1 d7 e: A: l. n7 j- k8 R
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 a% N! s% q& E, ~5 U, n8 X- `5 U
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& o$ H, w9 {, f- d& w* G: y% [




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