嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 M- A4 ]. @. q5 U+ W
Void UPP_TASK(Void)
- {* J$ o( _! v6 L, x0 Z4 U. S{% D# w% o) W1 C% `$ a

  |, Y% n  D+ E4 Z% \; D    int i,j,k,target_int_count=2;% K& B6 K* `1 d. h) l$ s
    char ch[2];
6 i" F. I' Y$ i0 }! f4 N0 M. V
- G3 J, w- m( D' K2 O, ~1 \- m' t5 j- [7 H8 ?- v

4 l" D* r! r2 W9 L8 Y    upp_interrupt_count  = 0;
5 Q, [" Z; N: g, J! S0 `- o    upp_error_count = 0;0 L3 L& P' Z( S) o3 `9 i, v# \9 J* y

( x4 t% `, e$ d4 p    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 m. @6 H" a) q' r' g3 K
    // Initialize data buffers& o/ _1 G! q3 b' {
    for (i = 0; i < upp_frame_size; i++)4 H. \6 V6 L' s: t
    {
. N# ]6 D% o' ^: M4 o2 z       upp_buffer_b =i;3 F! L; |& b. u0 m
       upp_buffer_a = 0xDEAD;
; Z5 a# M5 V6 w9 r    }
, i' [+ i. \7 h2 U
6 D8 c9 c0 M# V4 O) }( Z4 H    //for(i=0;i<1024;i++)( w) [! o& I& s
    //    temp=0;$ X9 u8 ]1 j+ |3 B) d7 c

" _/ y& {3 [9 F$ y    //UPPReset();6 J: s0 Z' ^. z4 i" x
    /*启动UPP DMA传输*/4 e6 {" `( {: P' O. k' O4 R
    UARTPuts("upp_prog_dma_i\n",-2);
2 c5 Q& q1 K1 U+ d) h  b& k, o$ ^    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
  e- L- J$ Z3 p    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 T3 t3 s2 X0 J( {1 C% _) e8 u    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 i3 \4 @- g9 J* s+ l0 r! {
4 u# M$ |4 N# p# i4 Y    UARTPuts("upp_prog_dma_i\n",-2);
7 W% d& [8 Z# ]    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# V5 s) r( @) n3 Q    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 `) f  ~- @% Q) z& a; S; K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ W- l% N$ h% `" ?
% [6 E4 V$ ?3 D* f- m8 W! i& ?  c+ k    /*等待UPP传输完毕*/
0 }* A: p6 x( L    //i=0;
- c; P8 j& C8 d, O$ P6 p    //j=0;# W6 |# v) l6 O" U# ]" C
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) {* T  y2 Y+ m, ^    {4 |+ J1 V) `0 M3 D
        /*  测试UPP传输的同时操作普通DDR数据9 y" g" t' e: s) Q' \
        temp=i;
* S# J. U# q! y# j2 t        i++;$ O0 ?: [, \3 ?* T! b% t4 }& K1 \2 Z
        if(i==1024)
# R, r* q5 C5 v' [# H4 B3 l. x        {
- x5 D9 D' `" e. F            i=0;! k* e; Q  J  U# T# ^+ k8 C. |
            j++;
4 R& p/ w0 d1 j9 v        }$ d' w$ [, w+ \
        */
, i) g0 H  G5 S. I( @+ Z2 \$ b9 r# ~7 j2 w
       asm(" nop");* K& X8 u8 I% S* r# h

' b% h& K' T) U. X" Y* Y- O+ Z% U' q3 o       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);5 }! j' p( ^2 P& S
    }2 g# _$ w+ k( P, w& U

6 n# f( k/ n) M9 G    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* @4 B2 ~9 @, t$ u) {    //UARTprintf( "i=%d\n",i);7 Q7 h$ e( T+ C# ^( ^2 Q/ c- O
    //UARTprintf( "j=%d\n",j);  d9 K4 p: s. s2 s- _: p
    UARTPuts("Data mismatch in buffers.\n",-2);
5 Q. a6 w; L7 f8 N    if (upp_interrupt_count == 2 && upp_error_count == 0)
, K6 P( X/ `! Y" ?7 p    {
7 V2 E7 E+ p2 O- b- C        for (i = 0; i<upp_frame_size; i++)
) u; y/ H& A& e6 `6 Z9 W        {4 s& D. I8 g7 E
            if (upp_buffer_a != upp_buffer_b): M7 N4 q  f: n# ~7 B0 s0 X" A7 D
            {" p: r5 x9 ]7 F" r
                upp_error_count++;2 ]" J" F- z/ s' m$ B. z( d5 h! h: p
            }
) t1 r( B! o% N* v- R/ i        }/ ~" T& f* y4 ]  a1 n
    }4 I9 g5 L. e  C

5 \) ~: p4 ^1 n5 C7 q( a$ K    /* 报告通信结果*/
" l1 N: h3 \" _6 ?    if(upp_error_count != 0)* s$ Y' V5 B' n7 \  d
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ l7 F+ C$ E$ z* m
    else
: h0 c& b2 ^6 R0 B        UARTPuts("uPP transfers complete!\n",-2);
7 e0 ~/ K2 A' I3 H0 ?3 a( Z4 w7 x! `/ i
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# L' P, i/ ?# V* S    UARTGets(ch,2);* V# @4 }/ K. k/ E
    UARTPuts("\n", -2);$ H! A. a  `) F, M, e; l

3 y- X5 r4 B8 w6 @( M- k" i8 O    if(ch[0] == 'y')
/ i" R/ ^8 ?, x5 X9 ]2 y$ p( i    {
+ |) A/ ~, V7 q" F( E  I! d( C  n        /*打印全部读到的数据*/
" [$ _. }7 a; C" y1 Y9 w8 s        for(i=0; i<upp_frame_size; ), e' }4 W& e( C
        {* R: j! U; @4 y% U6 }2 f
            for(j=0; j<5; j++)
- ?( X- A- ]0 f  |/ p7 j: T0 ]" ]! I            {
/ x- F. q, y  N' F5 \' e                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 G4 ?' C& f7 ?2 Q                i++;2 q1 A' I: B& a( ~- {4 [7 z
                //if(i >= 4096)
5 v$ p( p+ V- h  i" K( ^- w4 ?                //    break;& b/ E; o) I7 w% V% E

% d: U; o5 |+ F3 f4 W            }
3 l* ~' D8 R/ D: ?4 j            UARTPuts("\n",-2);9 e4 `8 d+ v& o" O' d) _
        }1 P3 w3 Q7 l" E& s
    }8 v0 W( h2 ^+ E  M1 m$ Q; m

" `2 X6 @% ~& Y}
$ ^. w& i; |  C7 ~* H4 `: f( d

5 b5 s5 c, _- y2 S" V7 k5 k, r% I$ y$ c

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! z/ i, d6 j- m/ f  f

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, d" H% P) b# s




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