嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?+ V: x& G" T0 p: j. D$ T; v: p) K
Void UPP_TASK(Void)
- i2 B2 ^- H$ L. D$ v, N/ R{
2 c0 R$ U& @# u& f, b6 \; `8 S( V0 B; N9 r+ O( H5 C; I
    int i,j,k,target_int_count=2;2 y& t4 c+ D5 C1 d" s. @& Y; T+ m
    char ch[2];
+ }0 ~& k  g' F, c  T2 C
0 J! w% I; H$ \) m4 ?# i  u( F
& c5 W# \- b! ^: [
$ T1 y& H# U0 j) y( R, s    upp_interrupt_count  = 0;
5 n3 F' L+ V9 C& n, o    upp_error_count = 0;
, z6 e) Z4 E/ t* h! ^; T
  }1 M7 G% A7 [4 a( G3 J0 Q    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 I; i( ~+ c- m" _8 B. f* Z; g
    // Initialize data buffers
2 n' f+ m6 R5 f/ f' r7 p' V    for (i = 0; i < upp_frame_size; i++)
: A( i+ C9 d5 b, v    {, {: V# F: M/ H+ m, ~- a
       upp_buffer_b =i;
6 D0 I' ~% l* m       upp_buffer_a = 0xDEAD;
# M/ e8 s* B9 u8 m" B+ K) Q5 t. _    }
# \1 M. m. ]9 f; \. \& e- z7 N  }  w( y3 ~
    //for(i=0;i<1024;i++)# }; `' Y! z6 C- n& e- E, d
    //    temp=0;
1 Z; m0 F0 p0 N( L! M9 W. b
. }8 Q( @  u( r$ B1 S# ]8 P    //UPPReset();9 R0 T  e" ^. k/ r: y
    /*启动UPP DMA传输*// v. G  g7 |1 i$ J4 k
    UARTPuts("upp_prog_dma_i\n",-2);
" R" v+ E9 T0 u9 I: P) y    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;8 H# B4 |5 w" A# n0 c+ V- l+ _. [
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( p1 O( g3 B; C1 o
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& ^) X' Y  j, @$ Q  X  N% i3 q6 _; n+ G  k
    UARTPuts("upp_prog_dma_i\n",-2);  G' ~% k5 B8 T7 v0 p" n
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% s9 W: @& B; p& Z6 U: D, W    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) J! U7 ~) G3 R0 o7 {/ E
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 j$ n, Z; k6 y* l5 w
% \6 }$ }0 o- I' ~& w! O$ f; Q1 E7 I    /*等待UPP传输完毕*/) h( w& J5 W$ z5 w+ J5 ]
    //i=0;
" c; m  c( t: {    //j=0;
/ E. ]8 M- S! C9 V% Q$ o7 e) l    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( v! N% @% h  @! V5 G# r* C) F1 z$ c5 e1 o
    {6 r- A( n7 G6 L" N, S8 I
        /*  测试UPP传输的同时操作普通DDR数据; M2 D% {, _! d" j4 w% l3 b# x
        temp=i;
" w* z6 F' s, o4 ]4 R6 n        i++;# H; E/ i6 B( ?4 ^6 B% T/ ]
        if(i==1024)
! @6 m& v9 y  m' o# d( o        {) W7 s7 i* M8 U% x1 x
            i=0;
+ I) {" |# r: G, Y8 o            j++;' Z0 U0 i& I% _. Y1 P. u' f) H
        }
" O4 S3 A& i/ P' `        */2 v5 n3 U! _4 m0 n
' ?; Y* B2 ~9 l' f' H: I- x
       asm(" nop");3 w0 B3 ~  v3 p! F2 \- B

. x6 C" t$ F  s       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);& B2 L1 e  ^% Q, l" i" w2 Z
    }
8 t$ j3 D+ e. g  c& z9 D
1 [, Q* _/ w: t    /*检查UPP传输的数据是否正确 (loopback modes only)*/, k  G& o# O2 _0 }9 l1 |9 D) o
    //UARTprintf( "i=%d\n",i);( \0 j0 r2 i: Z& Y$ E" K" U: [
    //UARTprintf( "j=%d\n",j);
8 a& [* A4 y. j6 `- \/ p+ k    UARTPuts("Data mismatch in buffers.\n",-2);: _0 l- k* c- `6 y( z- L, n: z
    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 P& j  Q) R* J- Z    {
5 D6 R+ f$ V0 T: i& |5 [( s# @8 q        for (i = 0; i<upp_frame_size; i++)+ Q; ~) R! k$ I, X
        {
& a' Q$ E1 u" S; r: H2 ~  z* i% {: E            if (upp_buffer_a != upp_buffer_b)- P; Z6 q+ [! b. f: N& d. y  ]
            {
0 j' t3 v% N1 b5 F' u. F! d6 K                upp_error_count++;+ s# ~8 }: D" \6 i$ g, B7 D% W
            }/ w- M1 n" s& D9 z+ C
        }/ V9 S+ S7 p# A2 S. u
    }# m4 M, s6 ^+ r" {( y

0 C3 V* s7 t1 J+ W, x    /* 报告通信结果*/
6 S" x1 T+ }. `7 M    if(upp_error_count != 0). |/ @5 J! F# [3 z8 v/ ^4 I2 K: r3 l
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
- l" T' v; L( {/ ?# g" c7 R6 Y7 p    else
- u. Y: v: N  b        UARTPuts("uPP transfers complete!\n",-2);
# W1 ]8 y" s) p% G$ l! d: h
( k1 _! U4 f9 p( D5 T    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% K+ \. ?  n5 G; ^* U; R. T5 I9 W
    UARTGets(ch,2);
# Z" V/ B% R* t2 z, G    UARTPuts("\n", -2);
/ e5 _2 p8 O  A+ B+ z5 G* L* N
2 Q# u: G: [/ t    if(ch[0] == 'y')8 p2 r# C0 k* [  D7 H
    {5 ?, ^$ V) k8 Q/ M% e
        /*打印全部读到的数据*// E" m9 j  Y) i0 U& a0 O7 k
        for(i=0; i<upp_frame_size; )
3 y1 R- N3 E  a5 @/ S! k4 E, G0 I: V        {
: J/ T6 d. i4 }+ ], c            for(j=0; j<5; j++)
) q! X" W4 }' X5 r. ^# _, c            {
. O8 h3 @6 H# z7 Y, y, p                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 A' L( Z& }- h7 ]  [                i++;8 a' B9 R0 f" Z% \3 a' E
                //if(i >= 4096)0 `7 d& \% @7 m3 m
                //    break;
$ B% R/ x6 T: G$ f& k2 @5 ]
) F) i$ M, M  \            }( T6 f% j$ _: J0 D( k, }7 q+ T- n' \
            UARTPuts("\n",-2);
+ ^; \7 u1 H6 B% H1 D/ l% _        }
/ v; j; K  P5 l  ]! L    }/ S* W% S6 w% r+ \# p/ N" J
% W- G9 {. R1 v
}
; x& k$ }+ ]/ X/ A/ c  s

. A/ d+ S( ]* H& G' W5 l1 I/ V  O( q8 ?5 j

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) k  l; o1 i6 t2 z; g& I+ _
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  J" t/ R/ L: P! j2 {




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