嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 B5 H3 Q2 ?  ?% @
Void UPP_TASK(Void)0 R$ H: P; [$ H- T6 B3 |
{
$ w9 x' y7 ~$ ^+ x! ?7 y/ c
  L, |6 I. u/ O4 W    int i,j,k,target_int_count=2;
0 R* ^9 P+ g1 w5 f& D0 x# d; s    char ch[2];( ]* R# S3 z2 ~3 V. i
! w  d' {: O0 {# G3 g
9 h3 }6 G/ X( H. _% y% p

* K( r8 l  y3 \4 b( `$ x    upp_interrupt_count  = 0;1 F2 R! R6 U9 @7 o  J0 ~# w
    upp_error_count = 0;1 c9 i/ s; O: l% g
5 W* l# r0 O1 ~- b8 R( i
    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 a+ x, G0 I8 ?& {
    // Initialize data buffers
6 [8 v* A, r% L% l    for (i = 0; i < upp_frame_size; i++)3 }8 y5 Y2 |( T! ?1 u
    {
; H7 \/ s" Q! K+ k4 ^) Z2 |       upp_buffer_b =i;
5 e: g1 R2 |; \- i! z       upp_buffer_a = 0xDEAD;! p" E- [# {; t& g' s
    }. w* f8 }6 ^1 s! w; X( y
! {: }3 N: o  l  ~
    //for(i=0;i<1024;i++)
# O9 L% _* E2 ]9 J$ d1 K% b    //    temp=0;( g7 w5 P2 {8 U" m

' f' S6 D) D/ L) T  k  R    //UPPReset();% P4 a: g6 Y/ Q* D$ @/ p
    /*启动UPP DMA传输*/
* P' l1 z  H* m( [4 F6 A7 d    UARTPuts("upp_prog_dma_i\n",-2);
( |- A  `- A; B- p  b, t( P# d    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 R' u6 P+ o* G- n$ N    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ I) w0 C1 w& {6 q5 L* X$ A    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 C% ?" \* l4 ~) E& B/ _% C
- b0 D) G  U" {( Q: o2 C    UARTPuts("upp_prog_dma_i\n",-2);
5 e. A1 ~( I. [9 c    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, \" I9 {. z' v# _0 {& S3 i+ o$ }
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 m" `/ W4 e0 _3 ?) f  J& H
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ B7 D# j1 y1 T+ r
* b- Z& Q/ ^( f" `    /*等待UPP传输完毕*/
# U. i9 z, @' r# \8 V" W. E9 ~: u    //i=0;
3 _) @* x0 ^2 [6 Q1 u8 Z    //j=0;% Y* E! p9 B3 T3 g. |4 M
    while (upp_interrupt_count < target_int_count && upp_error_count == 0). v! r" H* e- U4 H+ ^
    {8 |5 z' G) I( Q9 `" X! c- K
        /*  测试UPP传输的同时操作普通DDR数据
- a0 M' ?4 E& J0 w        temp=i;
$ T7 _  D. w5 D3 w/ e        i++;
0 E) E$ _# C" W+ A        if(i==1024)
! E( V' e8 l5 S  W$ ^2 ?# [        {
+ G5 m" i' x' X) {/ \3 \! l            i=0;& i: N  ]: v- d! `( F/ ?4 \7 B
            j++;
/ g6 Y5 ?& i' g# b* a        }
+ i& F% G! w7 X; b' }9 c        */
& U8 q' @1 v" P8 W  \9 d" N/ i; H
       asm(" nop");
+ p0 @; ?: C3 p: X0 Q( {' x* y5 t% d+ C
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 m; G7 l, W1 |$ Z1 F
    }
- A0 |8 a$ z+ |2 T/ l# U) d, V6 _6 \) V% K' p9 ^  F% {
    /*检查UPP传输的数据是否正确 (loopback modes only)*/# I1 d4 y& S) i( X7 G: z
    //UARTprintf( "i=%d\n",i);6 P. Q/ d% @  X- f+ H* R7 D& V
    //UARTprintf( "j=%d\n",j);
  C+ \' e4 m) H5 Z! i    UARTPuts("Data mismatch in buffers.\n",-2);9 j" r* a8 K7 |- c3 b
    if (upp_interrupt_count == 2 && upp_error_count == 0); o) w  P* ?2 X" _* W  y" Q8 M
    {
/ c' G3 @% m8 j        for (i = 0; i<upp_frame_size; i++)
& w$ Y: R! @/ G4 `* A! y9 G        {* c9 V2 U- ]) N" X; B9 L9 f8 x
            if (upp_buffer_a != upp_buffer_b)& y1 A) B9 S  L7 ~/ u; U
            {
  F2 P- w, v/ N3 F& o1 N( X" a                upp_error_count++;2 U) q7 e6 F: N# ~# {0 c. C
            }! |4 l4 o9 D3 e. e# K0 [0 I
        }
4 J0 U- n7 a, x' G2 \- L    }, r3 @/ m* O7 C
" n, E# Y7 @9 v* p2 T+ [0 a
    /* 报告通信结果*/
8 o- O5 D9 b4 [2 U) E7 C% g( {    if(upp_error_count != 0)
5 T7 A3 q$ G3 z0 ~9 |' D( a        UARTprintf( "upp_error_count=%d\n",upp_error_count);* m) K# T( v+ _" ~, b2 I
    else
2 F* m3 R- z3 F% B& V1 S5 d5 s        UARTPuts("uPP transfers complete!\n",-2);" u& o, K5 {3 w/ }

3 E0 l6 N6 b  n4 I' k5 C8 u, [    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) G( q, `5 B/ l# T0 d
    UARTGets(ch,2);
; p* w3 z/ ?2 y- e    UARTPuts("\n", -2);
. Z4 K% F, g2 g" P# M( [: I; i4 Z' X$ V, d, J, f- y) _9 P9 X
    if(ch[0] == 'y')
( |8 j; T  ~2 m* ]9 i  g8 M: U    {
1 ?2 p$ z5 I! Y/ K& s! |7 m8 `7 a        /*打印全部读到的数据*/$ \  ]! q; w  C8 U: }
        for(i=0; i<upp_frame_size; )) o4 M8 i  f1 t8 n
        {( x/ K: k; {* b' [
            for(j=0; j<5; j++)
8 W2 R" @1 A* ?, H+ C# g' [* ]            {* x% k. S8 ?, h
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; E3 S# X( p8 S1 q                i++;
( R* b+ G8 t/ s                //if(i >= 4096)
9 ^! Q9 }. X/ U; u3 {" Q7 ~                //    break;6 w$ x: b) B, n7 W& F# d0 f* _1 p
  @: k& G1 F9 T0 Z6 b; n# {
            }
- T! B6 H1 _4 M) j            UARTPuts("\n",-2);0 X: z) Q. Q+ i
        }
( B! x' P% a. p    }# {9 g% V) f& d6 ?& E- h* W

# b2 {' h: Q: W" @0 L0 e; t}

  H" j& r) s' c! W

( y7 V; g! u9 g3 }$ R+ ?  f" r" J) ?5 a. P' G, h1 B. x# u/ C

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。; I8 I1 n# T  q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 L: [  ~1 k0 p3 K2 z





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