嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; ~4 z' l8 [* j. {
Void UPP_TASK(Void)* v' u+ P2 a, L& X- a$ r6 `
{% ^* u' ^) ?7 e' K$ j0 T
: E, S, \# C! P; h) o- G! }
    int i,j,k,target_int_count=2;
* h' V/ O, U: g7 Z. ]9 K    char ch[2];
7 y  t8 K3 F7 t1 ~! ]
' L; l/ Q  |7 p/ C, @! z" Y: u/ o" u

. b2 S1 ?4 p: j9 I    upp_interrupt_count  = 0;' _2 V! v3 X6 U  ^
    upp_error_count = 0;# Q3 x/ ]' }7 c' l
4 \. y! A( j# h5 P
    UARTPuts("\tResetting uPP buffers...\r\n",-2);- Q8 D1 m! K# o$ ^; b" B/ p' v
    // Initialize data buffers
) q) [" U& r/ a- @    for (i = 0; i < upp_frame_size; i++): T. a2 A6 W' D. M( M( T
    {
. T% ~7 K  y: h& M4 o       upp_buffer_b =i;: d0 }; u3 z3 p5 z3 q1 G
       upp_buffer_a = 0xDEAD;% e2 o. Y! N3 E$ w+ h* A) R/ h. E
    }8 H& ?+ a- n  [$ j) t9 E

. ^8 _2 I% \3 h6 E4 c5 t    //for(i=0;i<1024;i++)/ a( O7 i* L) [
    //    temp=0;
! ~7 U" Q8 Y4 x7 k
3 R% e% Y) r! H6 @  `    //UPPReset();
+ Z9 ^7 x2 @  I: [' }9 |3 ^- A5 b: i    /*启动UPP DMA传输*/4 l& H: u+ }; i, Y
    UARTPuts("upp_prog_dma_i\n",-2);7 m0 d8 x' T0 A* J5 @
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;$ J; E7 K" a, _; @# A6 e) |; L$ k+ k
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* R' I) j; L% \# X) q! v6 b
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 z! y. l  R8 T( v& w& A/ q0 U2 M  E* L, F
    UARTPuts("upp_prog_dma_i\n",-2);$ L; J  l+ s0 p7 t$ l$ B
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# O9 q$ {- B7 ^
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 y- t5 p* k0 Q: ?. g, M% @: A
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);- n* f+ R; [$ O  g  K
$ |' ^# c" G" n  q
    /*等待UPP传输完毕*/* ^( w4 z) r" d0 j: Y8 o& h1 M, Z
    //i=0;1 f2 i) G5 Q$ c; Z' u
    //j=0;. F4 D  a/ g$ v. d, }. h
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 \# M! G" I6 |7 P. \9 j) N    {8 e) i! n# ]9 a3 O5 b8 `2 P" N  k% Z
        /*  测试UPP传输的同时操作普通DDR数据
& k3 M; q' ~5 y& Y0 J        temp=i;
: b+ k- }5 l4 G4 R1 T        i++;
$ `9 |( q" D2 ~6 n6 C4 V' a        if(i==1024)0 ~' z& ]0 M$ ?) n, x' @
        {
- K( c! m6 ]% p( ~- o. q/ G9 j            i=0;
/ o5 z& c0 O/ R5 b* i3 T            j++;+ c3 U, H; G1 C, l
        }  j' W7 ?7 S5 W5 E; |, U# ~2 t# z9 K
        */) V1 G  h0 Z7 H0 g

0 ~- \3 w- d3 q. [$ c       asm(" nop");$ U! J+ K2 i3 d0 \6 H  Q: P

9 t: ?* s; B+ D( V9 J$ ^       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 H1 _4 p' V/ N0 g5 e. X    }3 H8 M/ P% D! t( }5 ^
( J% g2 B; b# U$ {9 u6 |: {
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
: j, o4 q, G' u. }/ _" P" i8 C    //UARTprintf( "i=%d\n",i);: I. {4 T. d: m. L) M
    //UARTprintf( "j=%d\n",j);% V; [+ T* z5 y! Z1 k  \, m  V
    UARTPuts("Data mismatch in buffers.\n",-2);) U& k. K3 k+ C/ R3 t, D, G+ u
    if (upp_interrupt_count == 2 && upp_error_count == 0)' w2 ?5 p3 h- [4 P% O
    {& P3 t; F) m9 x7 L& P
        for (i = 0; i<upp_frame_size; i++)2 b- `) w( @& J- i+ t' Z. j$ H
        {8 Z. u  V7 F& a
            if (upp_buffer_a != upp_buffer_b)' X! x" o; j' R' C7 J( j
            {4 u/ O  w0 x( s0 u& W9 _6 n% t
                upp_error_count++;  p# b! G( p/ }
            }
/ Y1 v4 S$ `: A3 r3 g+ r+ g        }  `# u3 R- O' i( m7 B- S
    }
9 a6 a8 ^7 ?) d) n/ y4 m6 B  o0 h* K  _1 \6 X# W
    /* 报告通信结果*/! Y% c# O1 C+ X. Z6 z: s6 w
    if(upp_error_count != 0)
/ }8 Z" K+ F7 L3 g# n        UARTprintf( "upp_error_count=%d\n",upp_error_count);- e  X1 t- C7 y
    else
' u  }5 V6 c  q# _1 }        UARTPuts("uPP transfers complete!\n",-2);
& |, O* K. A$ T1 s( ^8 M- X8 h0 D- w: u" `; K
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);# e' y$ S- s* l8 B; |
    UARTGets(ch,2);& v8 [& k* }$ K% }1 [: d& \0 D
    UARTPuts("\n", -2);6 p. g6 I& p* S3 j+ h5 ]
; _# [, `' A" O% I
    if(ch[0] == 'y')
/ g. Y2 ?7 p# R/ ]    {/ k& a: R4 ]7 Q; t; t% S) _* {
        /*打印全部读到的数据*/' l2 Q6 m. q: F# V+ M* }* n
        for(i=0; i<upp_frame_size; ). _' h. H8 F9 h3 ?6 ~3 U
        {4 f. X, q: X  S/ @
            for(j=0; j<5; j++)# K, S2 E$ n! d) J& j' L; \' r
            {
9 l6 G" ?7 J6 S7 ]7 n5 [/ z' M8 U                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);8 g' M- h* A1 ?/ r% T
                i++;
: Z2 J4 F8 k( C' S! j! Y3 b                //if(i >= 4096)8 |: f% e7 y1 [) H, y1 {- }  @, E
                //    break;# J8 U" ]4 w* b

7 C% t5 I# d  w            }3 i# v9 f( S8 W9 e7 z
            UARTPuts("\n",-2);
" E. b  S+ U. e; M* {# ]3 _        }$ l2 m: s; Z' M) E4 E
    }. F( r4 z, z6 o; A/ R5 h/ T) ]% {

0 s9 b7 u, ^0 ]$ h}
; m# |) r5 t' Y3 D# ^! y9 P

: t9 H' [6 C: H- k. T; _, c/ L# n: I( i+ [6 ]$ D4 p, e# R. c; `

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) L0 g6 `. t4 L: B
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 n: k1 s9 m! {/ W9 I# m( S. [7 y





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