嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' d8 H; z( r4 y0 r* j, y1 y9 x
Void UPP_TASK(Void)5 Y- n% f4 d4 X
{% r5 d: V+ c9 V

' Q& {% E; D# J9 \) _, H    int i,j,k,target_int_count=2;% F3 `/ B/ A/ [
    char ch[2];+ F  [, H, o$ }
, x' l. z( o, H) y  E- V

; |+ E2 h; o) C0 }1 r: X3 i5 x5 y* a- I% q2 w  Z2 `7 Z
    upp_interrupt_count  = 0;- {; A8 H0 Z0 Y$ j8 K" I- [
    upp_error_count = 0;
9 D0 o2 t7 b! R5 \: o
5 U, a8 C: L# I5 K% M    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; p1 W. z3 B2 C7 G8 N2 g    // Initialize data buffers
& L% D/ `4 c% M) l; T    for (i = 0; i < upp_frame_size; i++)2 j# S- W' Z) Q- w; `0 V" O
    {/ b5 L  G, Z; F6 M& D; S
       upp_buffer_b =i;
% h6 {$ l% F, O5 X4 x       upp_buffer_a = 0xDEAD;
* j3 \2 N" ^; X. o9 I7 _( X- A  E    }' B  K6 u, q8 h+ ^0 s- [. r5 j( N+ ~
2 ~! h- Q8 z1 q' V
    //for(i=0;i<1024;i++)
5 V% h% i7 ?8 b    //    temp=0;
! [- j0 F% D9 V, a# x8 s9 H7 w4 T/ \0 u0 Q+ t0 S2 o: n5 F4 P
    //UPPReset();2 _3 D" u. I5 A. U8 ?* A
    /*启动UPP DMA传输*/
3 G; u" g; S7 o) j* {    UARTPuts("upp_prog_dma_i\n",-2);3 W- }+ n2 f9 ^
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ d" {- m$ @5 P% n( F+ d
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* Y" Q; e( `% U2 _' ^    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' k; H, I) t! m) W5 J' H! Z- V" y8 L/ Y; e# G
    UARTPuts("upp_prog_dma_i\n",-2);( h* Y  o! m* B1 h7 b" q$ s7 e, i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 R, _- w" ]/ N$ L1 s2 X( X
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  Q9 U; M8 X8 S  [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* |! h0 L, A" D3 E

- L+ @5 p. h" J; L) }# s    /*等待UPP传输完毕*/
3 T4 T4 t% [" [+ v( Z    //i=0;
' o4 `! O/ F% j- F3 _: u    //j=0;" D( T6 p# k1 q8 v* V( L
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! e; A' [' J- S+ p. ~    {/ v5 [" Z9 m9 s  Y, A5 y
        /*  测试UPP传输的同时操作普通DDR数据+ k5 k# n/ p  }  o
        temp=i;
' y2 C2 L+ J. V: f        i++;
! F- `) b, G5 [; b) m0 `        if(i==1024)4 N/ d/ j0 K, S; K
        {
# I8 a1 @  j" L. h: x; R            i=0;( @7 V6 K+ b. K
            j++;
! V$ u& b8 ^' e, {* S9 o        }
. M- }+ \% t. o0 n        */
% Y6 O$ d9 u' x& r) Q5 t' b, x  V, I+ {0 ]! U7 x* [; R
       asm(" nop");
* r9 T6 a. X2 Y0 t
  f; q; z' f- x% p: k       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 y2 |# C# K  q! T    }! M/ t) ~4 {/ J" ^

, u% x7 c4 K$ l    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 v+ N4 t, s% N- m3 e- D4 o' Q
    //UARTprintf( "i=%d\n",i);- y: _) V, I& d5 e
    //UARTprintf( "j=%d\n",j);
& W% S3 q8 V0 q; T; h, E    UARTPuts("Data mismatch in buffers.\n",-2);# Y* X' v8 Z/ u6 |
    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 L- R7 @+ {% g% N4 Q8 m+ \    {
7 k: w% g) U3 \, J' c0 {        for (i = 0; i<upp_frame_size; i++)0 K! e# X! T: a5 p- ~
        {
) G! t! b! Q2 w3 q            if (upp_buffer_a != upp_buffer_b)4 q3 G- t% P4 u# ?+ g+ p3 E1 L* W! ?
            {$ k7 R9 v: k7 h: L1 z4 }
                upp_error_count++;
, }/ B) V  k7 R8 N! E# _. J            }
, G, l! K. Q1 m; }$ A        }# i2 F+ Q! A& j' l
    }( R% w! J( s! P$ v; {5 ?2 [, y' a4 L

/ z6 l" C3 s, K; ?; u* v    /* 报告通信结果*/3 e& L* J# W5 @. \, [+ A3 ^
    if(upp_error_count != 0)
4 y+ m' ^. @! M        UARTprintf( "upp_error_count=%d\n",upp_error_count);9 O+ x" T) O* t& |& ]; u
    else+ [. w  Z  p/ ]3 n+ S0 z$ O
        UARTPuts("uPP transfers complete!\n",-2);; E! [; D: P" ~3 Y* ~  ]# d

4 c  V# }* H3 ~- r    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) _# I: v/ g& [0 O8 O% ?0 d# T; k: w
    UARTGets(ch,2);
+ Z6 M* ]8 l7 e7 l    UARTPuts("\n", -2);: V8 S9 W( W6 v8 j( a4 L
' y5 x: ]7 c( {3 Z  g- j" A* R6 i
    if(ch[0] == 'y')
# l, b& g( N5 t8 a. D; x    {7 ?; d$ l6 k6 P
        /*打印全部读到的数据*/2 `/ S' F8 {6 a  ?! s" `
        for(i=0; i<upp_frame_size; )  \; B: F7 G7 T% R4 [
        {
. U' {( n! i" Z& O            for(j=0; j<5; j++)
8 ]- [: {! _$ z. P  {2 T            {7 _$ Q0 C5 N) b/ D2 f
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( p* n$ _3 h  ]7 S* z5 C( ~5 {                i++;
" F( Q1 ~2 j& d8 ~3 _: D3 }                //if(i >= 4096)$ x& R+ q2 l% F# `: P8 j
                //    break;! J' \) l+ a# R) n

; w; i8 W. f: M            }8 @5 ^0 Y2 i, D
            UARTPuts("\n",-2);
9 N* }& |! M  W, y        }
: B7 e3 i7 [- f8 ]6 C& a/ l% [- b    }8 j" Q  q. y6 D, C! T1 T
+ [! y' k  C( W8 L% v3 k: j
}
6 ~1 G2 i3 O. q3 o
  B# c! f. r6 `2 p( Z/ R
- i$ G% v% B6 ~5 F( {4 _

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 n' K+ }, `6 v/ E
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 d3 J7 ?) v1 e* J/ W, R+ G





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