嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( T3 i2 w) w$ ?. q2 V
Void UPP_TASK(Void)
# {) h) R2 H8 E% R{* \1 A9 [( W' J7 K0 M

7 X) `- q6 q- c1 D: }3 B    int i,j,k,target_int_count=2;( I$ Q. B9 b$ {+ r, d: q
    char ch[2];
% t  \; N" e" w* R$ x
. B! u- [$ c! A0 a2 V$ t* o1 @5 N# O) S

2 b& i- B: c5 j6 D! |    upp_interrupt_count  = 0;
, o. k# [- J& S8 r    upp_error_count = 0;, _, ^' y4 ^" D7 }  v5 x! v
8 G0 w4 k3 a. x& |7 `
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
, ?2 }: P) l! n% e7 x. G3 {6 v    // Initialize data buffers
0 E$ s" f- Y; {" `    for (i = 0; i < upp_frame_size; i++)
9 b% X! o# e2 g8 r4 M    {
* _9 [: U3 @; C* E       upp_buffer_b =i;
3 j/ x; h3 c; a8 X$ U4 ^       upp_buffer_a = 0xDEAD;
; @7 M! e) y% K    }
& H# q& `( a' c0 j' m- }9 |. h2 a6 g% O
    //for(i=0;i<1024;i++)/ n1 M( t; ?2 ^4 \0 ?! ^
    //    temp=0;: i. Y! {4 n' F+ k/ K  x
9 h+ E- s% O% C; N1 q* O: B
    //UPPReset();/ m4 j4 Y1 p. r
    /*启动UPP DMA传输*/: r# M& R7 P% m/ G/ _/ ~7 o
    UARTPuts("upp_prog_dma_i\n",-2);
9 ^; E9 r* W  \( N7 `    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' k4 d) G7 e" }  Q    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 |4 E" d- a5 O2 T& q/ @5 F
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% i# H9 c2 D  @
8 r3 _9 b2 E" I. m0 W3 ?) ~, S
    UARTPuts("upp_prog_dma_i\n",-2);! @% T1 I. U: X$ x
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;" s) X% l& ^0 i: [
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ `" ^$ r, V% t  S/ J+ G( o    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* _0 e' g3 t  e8 H
- r0 T6 z8 X0 a( ~    /*等待UPP传输完毕*/( {; _" [  ?5 q& |5 Z! _. b8 f
    //i=0;
/ u: [1 U* D# ]    //j=0;
& h9 ~6 M+ U$ d3 P$ O    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 q: P' A  R% n. s  ?    {
) T* \* v3 W. U5 i        /*  测试UPP传输的同时操作普通DDR数据
' _+ g) \- l' e! v3 B1 _2 K        temp=i;
$ y3 E$ N9 S) q% B7 n' E- T/ F        i++;; y4 Z0 {) L6 _# J: B
        if(i==1024)$ C. {% s2 T/ \/ ^# U
        {& Y: c2 b( ~% \3 {! r4 e6 J
            i=0;
' |; P/ ^$ q1 F            j++;
7 ^' X; I' T" o/ m/ y- [, |        }
8 L; Y9 {3 G3 f        */$ U) ~4 \4 [- h% H! n- s

6 Y( i- D  _" H, w, n+ q       asm(" nop");$ k% ^! l& V" q: X. @( t8 \0 X
/ v. j7 h! Z. V8 H; n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- Y7 b8 @% ]- O  F  d. T2 ^    }. N/ Q- E1 h% _' ~3 e1 n
5 N5 f: k* N0 f0 ?: H: f9 v# B
    /*检查UPP传输的数据是否正确 (loopback modes only)*/- M( t, s# A1 j. B9 Z) v/ i
    //UARTprintf( "i=%d\n",i);
% W! Y: G$ @3 W. C    //UARTprintf( "j=%d\n",j);
6 N$ [5 n  K& z! F+ F% _$ t$ U    UARTPuts("Data mismatch in buffers.\n",-2);
! C( F% Y% G. _0 j1 e7 o2 G2 ^: ]    if (upp_interrupt_count == 2 && upp_error_count == 0)
+ X& \% A& A4 m; B    {8 W  S2 n% g2 W6 M4 w" z
        for (i = 0; i<upp_frame_size; i++)
$ }% j5 k+ d" h4 A" m, N3 [1 S/ [        {. v' ~% }* ]' D/ r/ |  J5 H/ ]2 c" x
            if (upp_buffer_a != upp_buffer_b)
) u9 y; F1 G; n2 M" h, \- G7 [* F( d/ z; I            {) R% Q/ Q4 |" g% d# |! e
                upp_error_count++;
! y/ ?, _: d, X% y; H            }
+ |7 s7 W& c+ |6 O5 y        }8 v2 S% I/ C3 |3 e$ C
    }
) x8 f2 z, N" Q8 \  o: X  B8 Y6 u% N0 @  w: n- V5 H2 j
    /* 报告通信结果*/
3 d+ O0 d6 ~: W+ X    if(upp_error_count != 0)' _7 z* N" O4 @. g
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, ]! F9 [2 z; |0 ^    else) M. r$ P. r/ P9 x1 |' J9 g
        UARTPuts("uPP transfers complete!\n",-2);
' t! ~# q# n' p. K, o; t' v1 H1 _: q. l) f3 Z7 Z; q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);( \( z) D( ~# @
    UARTGets(ch,2);4 h6 x& j( j  x
    UARTPuts("\n", -2);9 v+ U+ c: P. c( j) _! z  m+ c- L

! G% }* q! m. u9 \    if(ch[0] == 'y')
* C$ Y3 \: \& e    {4 r5 N% B, W' ]% k0 n
        /*打印全部读到的数据*/: `$ K5 m8 a8 y% O1 Y2 ?. x
        for(i=0; i<upp_frame_size; )
! A# i! @1 p8 ~$ K+ K        {
: T, Z# E# Q1 Q9 ~' O) R            for(j=0; j<5; j++)1 A5 E, G+ [- R0 i! c: X1 t! F
            {6 ^1 G# a7 l" t: v2 P9 E
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);9 ?+ _/ H+ U0 v
                i++;
" h8 Q$ I$ |; m9 l4 T+ Z/ N                //if(i >= 4096)' G( m1 N" \3 E3 ?/ m7 m
                //    break;
4 N2 O2 |" i( A* m' t) ^) ~& R6 ^0 f7 ^6 J* c+ m
            }
' u7 x- u. Q3 w4 [            UARTPuts("\n",-2);$ c: K2 A; C8 l" `
        }
1 o: d2 o( a- n( ^6 [! O    }
+ g1 O7 y. s; T" U6 Q5 I. V9 K# U# H1 V) ]% y: c4 Y
}

1 p: @9 ^' K( M5 a  b- w

2 M; a! z- B% F* f5 Q! R1 Q% d. e5 \5 Z( L6 ^

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ W5 R0 o/ G1 h, I& G

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) @/ `! \) i5 X( H





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