嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- L6 O, M& I* j9 U% c
Void UPP_TASK(Void); q4 K: a7 E9 {1 S4 V
{3 ~5 y$ G1 r% l# S  f1 u
6 `) w& @( w% s
    int i,j,k,target_int_count=2;
5 f+ l0 J8 p9 y# N- ]    char ch[2];3 N% B& i( g$ c
! ~: H; f0 t/ S6 U
2 O7 W; g. c% I  ~  v

  h- t3 ~0 _4 v5 g1 X9 ?    upp_interrupt_count  = 0;
% M1 i% P6 C) e7 m$ F- Z    upp_error_count = 0;; o+ M, N5 i3 j, ^  S3 B
. e  M. k5 W% D
    UARTPuts("\tResetting uPP buffers...\r\n",-2);- f) p3 e  P/ A9 x) j
    // Initialize data buffers
: o6 k6 C$ S2 P% K& A* o8 M5 M    for (i = 0; i < upp_frame_size; i++)0 }* }/ g6 F% t" i# z
    {
( ?8 R; @- _& t       upp_buffer_b =i;
( o5 u0 q# }: f( r* {/ R       upp_buffer_a = 0xDEAD;. G3 t3 _1 x/ i+ A- h3 c0 g  E) l
    }0 ^7 _# I$ r3 o, W3 Z8 y% c% h" F
/ I: k6 @; V8 S; F
    //for(i=0;i<1024;i++)
, k' y- d* a2 |$ {0 b- n    //    temp=0;
1 W4 d# O  Q% r+ z  T
+ _( ~0 E+ q; ]    //UPPReset();* @, |- U, R. F- y; P% b
    /*启动UPP DMA传输*/
5 ~# _- C6 }' o: ~    UARTPuts("upp_prog_dma_i\n",-2);3 q7 m4 C1 ?3 J8 D; N
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: Z. A! @6 h0 n" h
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% i9 D" x# K6 f
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);2 z% ?9 H$ _! e: k* d

6 o, X. E7 }4 y7 {- {    UARTPuts("upp_prog_dma_i\n",-2);
; c7 s3 x, ^# O; H6 D    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 ?7 P) t& I# ]# p' Z    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 T6 W* x/ k0 @- T" P! \    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* M( F/ D; m. m* s) t: D' U, F
# ]: z3 j7 b4 v+ H" p4 a5 Q    /*等待UPP传输完毕*/
2 p  d  z% |5 O  W9 B, O$ ^; l    //i=0;
9 G2 K* N+ _, @. b0 Z9 S/ ]    //j=0;
+ H. a- O# t/ ?7 E6 N( v9 G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 D) Z, @( `& q% i: h, x+ B    {
# Q2 p3 o( E" o        /*  测试UPP传输的同时操作普通DDR数据
8 y$ F7 V7 I. }        temp=i;0 Z/ h) x2 ^! u% f
        i++;/ N/ V) x  w1 C6 l( B' Z" \) t/ y
        if(i==1024)$ n! ?  m! V: h: s5 D# Y6 K
        {! V- p7 a' `% j' Y9 `: ]0 E3 ^
            i=0;
3 [9 z6 L& `: S5 T* {            j++;3 P" A# `9 G* P( A
        }
$ @9 {8 x: @8 ]8 }" W        */+ }) A4 N- E( V- w, l
. N! Z# x8 N. f2 |
       asm(" nop");
- F7 l$ F8 a( A9 ^+ o9 ~. @7 D+ {+ ]7 [8 d" ~' R
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) [4 Q4 u3 J3 n- D+ E* e
    }4 ?6 H1 |$ L' P' I1 P. |% @6 ?* v

# ^6 T# z" X; ]& u% e- Y* W+ N- Y    /*检查UPP传输的数据是否正确 (loopback modes only)*/
! |+ c$ r4 C% V  ?/ E    //UARTprintf( "i=%d\n",i);# R9 p" [7 R' h1 R9 I
    //UARTprintf( "j=%d\n",j);
  W4 p+ j6 I6 ]2 z    UARTPuts("Data mismatch in buffers.\n",-2);1 k. g; h0 |( G% M6 I1 |! J
    if (upp_interrupt_count == 2 && upp_error_count == 0)' j5 H+ e+ S' b" a8 X2 h% o
    {
- S) s% |; Q2 \# C        for (i = 0; i<upp_frame_size; i++)' v  ?7 p( H  y: a4 h) P
        {
. `: p  P$ _% l" T4 h' t7 e" l/ f' F            if (upp_buffer_a != upp_buffer_b)# R3 x( i2 d: K0 ?# @) S
            {1 b( J2 {# a* Z( c& a
                upp_error_count++;) m5 G5 b1 ]9 Z* b
            }; K& h  O0 [! w. ~
        }
$ F& O8 O# i) R7 l/ W    }& t1 r# O8 F* U. h2 ?9 l+ G: y

- A  Z; {- P* k* L6 r    /* 报告通信结果*/
/ v. L& f5 _# C. p    if(upp_error_count != 0)
- r% V  }: @5 l6 M( V        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 Z/ k7 f- U0 N' M    else7 ?+ L  b! J5 ?; W5 _6 d7 F
        UARTPuts("uPP transfers complete!\n",-2);
% J  D) i9 ]6 L8 |0 h4 W& X
6 U: f; C. B2 }8 X, [    UARTPuts("Do you want to print all the data?(y/n)   ",-2);9 Z) ]/ K9 e( M4 P9 j+ ?
    UARTGets(ch,2);
  \. B& p. \' _8 C! T    UARTPuts("\n", -2);1 J2 c% \! p+ l7 y, F" Q( n: P

& ^# d; H3 Q! V2 O) Y& p4 }    if(ch[0] == 'y'): i  o& S; e" M* x! F
    {. W/ y8 l$ F) `2 F4 |- i" y
        /*打印全部读到的数据*/, i2 f! e1 U0 }! G8 i5 e
        for(i=0; i<upp_frame_size; )
8 {- h: R1 H) I, ~        {
! t4 W% u5 c4 c- X' c            for(j=0; j<5; j++)
) W4 z& W9 \! g$ ^) W( ~; ^8 u            {* x4 A, I, P! w% C3 ^: C
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* z6 d( _; ?' R+ A" [; R                i++;5 R7 g8 Y( [4 V; H; @5 c$ u3 Y
                //if(i >= 4096)
1 P: o* Q- D# x$ b                //    break;. p" ~: A7 {" c2 c7 I

% t5 g0 f7 \# u# c            }7 ]/ P6 f, R& Z6 J. s1 @! }
            UARTPuts("\n",-2);
5 i$ O1 w" M# n5 B        }. w5 i5 N( N" I
    }
- G/ W. V- f8 {6 v) E
/ N, c5 e. q" X/ Y9 G% N. G8 C/ v}
9 E2 S' P+ `9 u# n$ P

% J! m  ~! i4 D5 t3 E$ g2 T1 A* Y4 B+ u( c4 X2 N: s1 g5 t

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ M) P' ]9 C) c& S* ?6 Y0 U
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 t5 J! c' g: ?9 O: u) r4 y; a! O




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