嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- k  ~/ K! B0 \* i0 f
Void UPP_TASK(Void)9 b% N# E" ^# n  I* q; N
{( j1 b3 p% P0 d8 C6 B. t
4 A5 p  Z- y$ G( s8 m
    int i,j,k,target_int_count=2;  y/ }: ]2 l  ?9 d6 ^+ @4 G1 u7 Z
    char ch[2];; y7 r! k0 ?$ _% i# D  G$ V& o' F
8 w& w# C& b) B$ x" B
' r7 V$ w( c$ s" A8 N3 ^8 B
: g* E8 q7 |! [
    upp_interrupt_count  = 0;
  K2 e  L; n! q4 ?( ?& V" r: R    upp_error_count = 0;
: D5 g# n; o4 o- X0 {1 b& p2 J
4 c: ?; l" z+ r  m/ u) [& V, _, |    UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 G8 {& y( X7 {0 q5 ]    // Initialize data buffers' i, F, T& A( N. g* M
    for (i = 0; i < upp_frame_size; i++)3 A7 x5 n8 a- O' z( s! Q, \5 S0 |
    {
+ C) ~5 p' }  r3 R8 @0 D       upp_buffer_b =i;4 Q# z. q" c8 u  i. v
       upp_buffer_a = 0xDEAD;
$ ]9 q0 C; K. L7 E    }
$ q+ j( G4 O, o& p4 J6 W5 N8 \& w! A: O7 F& v  L
    //for(i=0;i<1024;i++)
6 b+ F: a6 h8 q: |4 k' E- n* F    //    temp=0;
. ]+ l' l3 y8 \; U3 }+ p" a; l* K' y
    //UPPReset();; X2 ?5 r6 n6 n, t0 O7 q
    /*启动UPP DMA传输*/
, O. E; x7 a& Z4 v6 N    UARTPuts("upp_prog_dma_i\n",-2);
5 _' ?: x, N, U0 e  @( g2 h    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 v9 m+ n1 R2 `. ?+ d    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, L8 L6 U# ?" K    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 S' k% ^! O& m# y3 M* y- u: X/ H; _" Z/ S/ o$ k0 E/ F& w5 b
    UARTPuts("upp_prog_dma_i\n",-2);
3 x# s" t( h, Q    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' |* R+ Q: ^& E& W    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) N9 H3 r6 a) e; W, Y6 c    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# h% A6 t7 q; ~) t0 M% w9 O8 Z0 h

! n$ p7 t; A; k$ Z1 L    /*等待UPP传输完毕*/! R6 ]0 ]" ?- U) O# b
    //i=0;
+ r& Y8 d) [+ a) e    //j=0;
* H& M1 p* {" [$ R    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" {0 n& N3 c4 `0 e9 a7 a
    {, `7 w8 R5 o( L+ v1 S+ P0 a
        /*  测试UPP传输的同时操作普通DDR数据) O: p8 V2 K! Y' m- s
        temp=i;
' `2 x. M& L- w% V* L0 D9 L        i++;
) f% }. _' ~- C  x- Y* c% W/ q        if(i==1024)
3 V) K$ v/ x' F" r7 V, F  l, a2 L$ e        {. r( m3 R! g! H% g6 u
            i=0;
3 [9 w; U0 a* N3 n7 E/ V# f. w% H            j++;
$ M& d, ~% j2 A% @3 C        }9 U" x$ e  l$ i  J
        */
5 w8 l  D, M- h" E) O" w2 k
+ y/ G( C8 _9 Q9 o! m       asm(" nop");
* U& a( ~7 B) x' f
0 K' H' l, w, o# L" I       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 s) s7 ]$ H9 ?) q
    }
$ @( O1 f7 }7 x8 a8 j
) j, \! T/ w/ s. H% i1 ?- Q( X1 ]# O    /*检查UPP传输的数据是否正确 (loopback modes only)*/% o# o4 `  z! P' t
    //UARTprintf( "i=%d\n",i);: y6 t- O! W, O3 E% \  ^
    //UARTprintf( "j=%d\n",j);
. Y+ I; q5 r# @    UARTPuts("Data mismatch in buffers.\n",-2);5 g' ~( ~6 \+ ^: G
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 y8 z/ }; S# M2 y3 E" G: q) P/ A& p    {
! O0 o7 Z4 x8 @; M/ H+ l3 G7 L        for (i = 0; i<upp_frame_size; i++)
- R) X: m! |' o$ ?        {/ Q6 M8 Y; Y+ ^) Y
            if (upp_buffer_a != upp_buffer_b)
  D$ A) u5 y- V7 q            {+ S- O9 a1 f7 t+ D% E
                upp_error_count++;" S3 K6 U# |2 W; Z" x5 {' l
            }' }" \) o; K2 m- ^  \) w5 s
        }6 w' ?- A7 g2 u$ G! Q* a
    }
% p5 m, S3 D. v) W
9 I) M+ j' Z! x  ]& O6 c    /* 报告通信结果*/
) G+ ]! ?$ O  N' ?8 @    if(upp_error_count != 0), A- @. \5 j$ z  d3 L% p
        UARTprintf( "upp_error_count=%d\n",upp_error_count);' _3 C( w, u8 [$ Y/ g3 s6 f7 m/ {8 o
    else
$ Y8 e; r. d4 T  O7 r        UARTPuts("uPP transfers complete!\n",-2);8 A( v8 h' M6 H1 D+ a( z
+ y! `3 q6 L9 k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" O" `8 t& }8 P. ^3 o5 |2 O    UARTGets(ch,2);
/ |/ A8 {1 J7 [( q# c    UARTPuts("\n", -2);+ s  z' p- B3 w( k: Y( A4 Z& `

6 ^' i0 @* c- G* X8 y+ P0 M- U& ~' }    if(ch[0] == 'y')
# }" s" V4 I% v    {2 U3 E& P3 m! L- g, J& d* o" M
        /*打印全部读到的数据*/' g! ?: {0 _4 [/ i
        for(i=0; i<upp_frame_size; )- A/ z* s- ^2 D; K  Z' T( W
        {
8 v7 E1 y2 `) U% v) k            for(j=0; j<5; j++)7 K: x2 u' A7 O* b+ y
            {
/ F7 S8 x8 y1 j/ L. g/ d, E                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);4 v6 D4 k2 Q/ i2 O) s2 [
                i++;4 o" w& R; J4 X2 _' v  v$ O
                //if(i >= 4096)& _2 W) e$ i& H2 k& Y
                //    break;
0 U9 h2 ^; l$ C1 l4 J
) ]% m+ y0 q. s  ~) j) m            }
& s; _7 l4 Q" r            UARTPuts("\n",-2);* B5 r6 k: |3 Z/ C* P
        }- ?) I! H  w* ?. p
    }
1 l4 Y. {4 H4 Z1 X
0 w" p$ z0 U# k% R}

5 v1 O1 A# p# N& e/ \. h
& {% @+ w: e6 H& J+ w4 v; E* r: A# i

0 t5 Z# O9 H' ~7 I4 \
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 J& S# ]3 g, V" X
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- X+ c+ S" Z; c3 c# j. w+ v





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