嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& f: ^$ @+ ~7 \) X+ J( s  m
Void UPP_TASK(Void)
( f  M5 b2 S* q2 ^% O{
0 u$ L4 E/ C: w& l) \3 O( _( z7 z
3 v# Q" H6 F5 @  R# ?+ Z; [1 P( N& c    int i,j,k,target_int_count=2;, i# R0 D( k; l7 E5 d
    char ch[2];
: H* ~: g! r# \, u) {4 }4 R. I/ l; Z* j7 M$ d# N
3 C' b* h5 U* }4 ?' ?' p& G
6 I# U! Z! l" W
    upp_interrupt_count  = 0;$ \# F9 y, O) q9 J1 M
    upp_error_count = 0;8 b! q+ x4 D* e6 H0 h
3 Q) e7 V* B8 p
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 a( Q' q6 ]) [" I& y    // Initialize data buffers
1 b: t3 {+ t4 X2 ~& x$ I8 @. B    for (i = 0; i < upp_frame_size; i++)
4 z+ S5 {: `4 m. ^    {
" ]# M7 l# D( B% K& ]9 J  _6 Q! N       upp_buffer_b =i;
1 q7 P% M8 q( W# d2 [       upp_buffer_a = 0xDEAD;
1 h5 a' L- ^+ p/ N/ X2 Z, t) K; T! m/ Z    }
( }" Z' U8 B9 n
& W$ u% Q% x# d3 l! e    //for(i=0;i<1024;i++)7 b: @7 b% t; h( c2 q
    //    temp=0;
7 D/ X4 J- w9 I& Z8 T( x; P4 u) m
- g- q# _* ?. F# J    //UPPReset();
5 q, X: b0 S" F$ Z3 L$ @    /*启动UPP DMA传输*/
$ K8 r- W6 a# c2 u    UARTPuts("upp_prog_dma_i\n",-2);' v' v4 P: E' L+ a. Z
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 x4 t: F5 G3 _5 }/ c& ]/ D  u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 C& p9 n7 A+ {' E# ^    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, p7 l# z2 U5 K# S9 i6 K; S  s
. J. h8 a% P+ G+ n/ x) Y    UARTPuts("upp_prog_dma_i\n",-2);
, h0 k* r  Y. i8 E) ^0 `6 V    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;( b5 P3 e- E4 j! a/ Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 Q1 ~. w4 [& Z, r+ ]1 r$ v4 W' v+ z
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ Y6 `0 Z4 J. I8 |6 E, B& ], Y. J' U+ ~7 b3 L) `7 l
    /*等待UPP传输完毕*// {1 E6 p7 D# Y
    //i=0;. n; j. _% D$ x/ o; ~1 P
    //j=0;) j0 b3 O5 }; P/ r2 _) S. D
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! ~: ?: _4 d5 I' R3 ]
    {% r# o- K6 \: K  _
        /*  测试UPP传输的同时操作普通DDR数据
8 I/ {, ?" X* y. U        temp=i;1 S3 ^# Y& U/ N+ W* ]& @' n. b
        i++;
. H0 [; A$ k/ k& q$ P        if(i==1024)9 a3 k9 F( u; G0 p; e' g2 n
        {
, ]' F0 [# a- q& ~3 I8 f" a% x            i=0;
: Z! F( z/ Z, E6 q: y            j++;
5 ^  g; o) t: i' N0 [, {/ }& g        }5 C4 g$ ]2 O+ Q$ v
        */" r7 Y/ y6 H5 L( j6 l" T5 s
9 S8 n+ d# v! t
       asm(" nop");
6 ~' \' h/ m/ U( ^! ?8 h! G- X8 `/ ?$ Z3 h( W
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 R0 M. T/ v) R) S( M    }+ z( ]( Y1 H) f8 J0 ^2 r7 r
8 U; R, r( z, j: m* Z2 K( r' H* D$ L
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ Z' U  |7 d8 y$ u    //UARTprintf( "i=%d\n",i);
7 v! G5 u  v3 l/ Q8 ]  P6 c    //UARTprintf( "j=%d\n",j);
( i( Z6 i( n% ?# U) E' o4 d    UARTPuts("Data mismatch in buffers.\n",-2);
, L+ u5 i3 ?& `/ q) F    if (upp_interrupt_count == 2 && upp_error_count == 0)5 G  Q( N( t- S* Y
    {
' i- K+ r+ Y1 P8 F        for (i = 0; i<upp_frame_size; i++)
1 c2 H: X+ }/ L        {
$ \$ C* p" b: `: N: m            if (upp_buffer_a != upp_buffer_b)4 {- a& u# Z% A0 V( w$ M0 W
            {5 _( x& K. j, K" `
                upp_error_count++;' [0 j* l" g3 ~& @4 B7 i6 V* l
            }+ p9 \/ w" K% z8 l0 f2 I: [# ^# D  u
        }
8 k3 ?/ V; P0 W3 V! U    }% {; f0 p! m/ Z2 m( q+ q, H' q) M
% {- r, T4 ~% g
    /* 报告通信结果*/
" a- d: U$ D7 F9 J4 a8 L    if(upp_error_count != 0)
/ @( B% O- P; O- T        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( T$ E0 r3 Y$ d% O" V& E) H    else
" X) ^% q5 O2 c( c: i& @4 @        UARTPuts("uPP transfers complete!\n",-2);# u& z* S/ v0 Z8 ?; Z
9 m) w8 {' e$ e2 l
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* g" v4 E+ U) `( U/ P    UARTGets(ch,2);; ?" b/ c1 p& h6 T- p% q$ d6 s+ {
    UARTPuts("\n", -2);
: \- v' ^+ d  U- W; E$ O" x5 p4 W/ h# ^3 m* l
    if(ch[0] == 'y')
- V6 s4 H4 r! c( e  Z! x    {/ Q- j; N& O% R3 E9 J# f
        /*打印全部读到的数据*/
$ J' i+ G2 a7 s: L! r: W4 X" ^        for(i=0; i<upp_frame_size; )$ H" X& U) y$ o, ?# B
        {
$ Y( j3 O* h2 N1 r' k# J            for(j=0; j<5; j++)
5 v7 l/ h/ R, T7 Y8 d            {
7 v* [, \; R3 Q; v0 x/ K                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ W% D$ Q) C5 S                i++;
% A+ K' W7 `2 X4 ~                //if(i >= 4096)/ D0 ?- P& l3 ], e0 A6 B
                //    break;$ L: C+ ]7 O  l
! }7 W7 a* t8 A( z, X$ I6 W
            }
* C, G% P$ G* x; [7 v0 |            UARTPuts("\n",-2);& m1 G- Q2 }0 m1 B9 H! R
        }2 \' r7 H$ k- V( Z& }
    }& |& L4 }; a' W2 {

7 ~* U& H7 `# A8 z}

1 ~& U5 N! k* t% v/ G
! X5 y2 {4 ]6 ^2 `1 K
1 {5 F! j5 ~: V* `4 C

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% \* r- ^9 X& W
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, C5 }' z$ ]+ Y' E! x" `) v1 V





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