嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?6 X2 B. \3 \1 j% v
Void UPP_TASK(Void)
: t2 M9 a' i) z6 o9 I; U{
+ F, S; w7 A2 p1 R9 J6 x( v& w1 r2 j  x) ~6 |
    int i,j,k,target_int_count=2;
, ]3 o% G$ P% X    char ch[2];
7 X/ R. ]3 \6 _
% E& V& `' Z. g5 G4 ~8 I, A& h0 M  ]* l, d7 y# c5 c6 v

' R1 C1 T6 z+ K# m& U6 C0 A; w4 l    upp_interrupt_count  = 0;
+ E6 k9 v. p( \    upp_error_count = 0;
! [" l2 ~; h8 a
5 r& I4 m- _1 Z. S) [    UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 p/ Z$ C9 U$ k) W+ w' r    // Initialize data buffers
8 y5 L# [0 e  |( {! K1 a    for (i = 0; i < upp_frame_size; i++)
! z7 F0 c1 M- u    {
3 v  L# A; |: u$ e       upp_buffer_b =i;, R- d5 f) y! a1 [) u4 e# u6 r
       upp_buffer_a = 0xDEAD;
2 }' O" e+ @% @0 |. N& ]7 F  f! M1 T    }
- B! v* A" D, J  A9 v7 V/ r; ]" @& ^# |3 u! {0 L
    //for(i=0;i<1024;i++)
# d4 S" {: D' I4 @) @8 p! o    //    temp=0;$ [+ p5 d' c) W  f, u0 B2 j
$ z, |, N2 n" m% @; P3 M
    //UPPReset();. R; M$ x9 v* ~1 C' T6 V1 _3 o  z
    /*启动UPP DMA传输*/
9 r& [- Z7 F5 T- ^+ C- U+ Z    UARTPuts("upp_prog_dma_i\n",-2);
6 o0 D8 Q- {. l/ o% v  C    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 O0 ]/ q- l8 |$ \' X/ o* x
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) q! }  T' o1 ?4 P. b2 r    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);/ {7 ^& h/ i$ p1 N" J6 }
+ s9 M6 M; I) F' S
    UARTPuts("upp_prog_dma_i\n",-2);9 u! {* ^! m0 u; R$ l- s
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' C6 i3 `6 ]" {" b; e2 y
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ {5 r/ W6 q0 i5 v
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* ~9 f, H' X( M" n, ]* I5 |
4 T% Y, n' R, ?
    /*等待UPP传输完毕*/& B! V* ~- @8 D/ E, U( |  F8 z
    //i=0;
: t7 d& q# T2 h" e. `6 q- s    //j=0;( T/ H" [; A& p" X0 N
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. ?7 I% ]/ R- a( Y( v    {
) Q9 J3 U- s8 j9 Y) i        /*  测试UPP传输的同时操作普通DDR数据! s1 E& {, q* I2 A! I
        temp=i;" T* b7 F0 c6 Z+ Y3 u. a
        i++;
1 q$ U4 J" h$ s9 G        if(i==1024)
: G! [6 a) Z. G% u- I9 }        {7 i2 q* Q6 q+ P6 \* g3 c- u# A
            i=0;+ P% u  W+ G" _- }8 C8 l
            j++;
2 _/ c! B  C% N- n# L8 {! ^' P( i        }
5 Z  E9 v' F  P. Y        */
5 {' h: T3 ]4 s+ ^
/ M" p2 f. ^4 ^" w       asm(" nop");
6 R* ^5 e! o+ t, Q4 n+ n* v& X9 w$ w- F/ v
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ U! p$ N; u* c) B" Y" c* k" d9 S    }
9 Q' C* t4 \' Z4 G/ K' K' M0 y
0 I) V0 ]" X0 b. Y" o& j# O    /*检查UPP传输的数据是否正确 (loopback modes only)*/
8 O; t4 k' D9 L    //UARTprintf( "i=%d\n",i);
1 e  W$ ^, q, O4 F0 n    //UARTprintf( "j=%d\n",j);' k" K* D6 y. \# d5 \* y/ O% g; P
    UARTPuts("Data mismatch in buffers.\n",-2);" ]1 s7 w+ r3 G2 f2 J9 i9 i+ X1 N
    if (upp_interrupt_count == 2 && upp_error_count == 0)
* y0 H2 k- a3 i+ \    {
1 I+ Q! F+ x/ @5 c        for (i = 0; i<upp_frame_size; i++)! Y- A7 u: {3 F; [0 Q0 _7 y
        {
6 o7 u. p5 x# X1 T4 H            if (upp_buffer_a != upp_buffer_b), }  R' s0 U1 j- G9 J; ^' h, m
            {- U" C( t5 t1 N; ]: z7 m  ?
                upp_error_count++;
# @, j3 X3 J. ]            }
1 L* e( y# V/ U. R        }
2 P. S8 ~7 b5 G    }
- s3 A! \/ v; `0 M9 B/ N
- i0 `4 N1 i6 a    /* 报告通信结果*/' A: C3 O* q, X" E2 C2 h0 y. f
    if(upp_error_count != 0)
/ o1 Y5 i3 I- J9 Y% T        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 w3 U5 j9 {/ Z* U6 a( U$ V
    else- ]; Q  Z2 {% g+ p
        UARTPuts("uPP transfers complete!\n",-2);7 V- l+ f* \2 B+ B+ `  W
* X: p% D" w1 p2 Y
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; ~, v: [) f9 u9 q! \, H. }
    UARTGets(ch,2);; G5 d9 n" k. T! {  K6 v% \
    UARTPuts("\n", -2);
& d1 @1 X- J1 c! F' N* w7 ]3 s& ]  k  t. M8 S$ f
    if(ch[0] == 'y')* U- `7 j. n$ y; `5 A/ M# j) j
    {" o; f$ n! E. ]/ u6 _" ?
        /*打印全部读到的数据*/
. J, ?7 }* ?/ Y        for(i=0; i<upp_frame_size; ): @0 Z% D0 A; l; y: T' E
        {
" W5 C2 ^) t6 _) A  ]2 ], i            for(j=0; j<5; j++)
; Z; S  n% U. \) I# Y* _            {
, P. w  w4 i9 s9 O1 B4 J# i                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
: N- d" p" G; D6 F6 q; ]7 d& p) T                i++;
# J$ E5 ~( Y0 ]+ |                //if(i >= 4096)3 [; z, x  C" w# f( a2 o
                //    break;
- N; h- C' J6 K6 v1 K, C0 [3 H$ U( t2 D$ h9 o! {6 d" c
            }+ L' d4 ~$ j* U6 r! k
            UARTPuts("\n",-2);
* V& Z! q: \  {  N% t3 m        }; [- c! `1 C, |: Q% c! Y. X
    }5 \5 x/ [6 S8 @
6 O% a" ]9 ]6 G4 G# B
}

  a+ t& u+ }9 K; T

" \5 K  N/ o7 E7 F5 [* ?0 d2 K8 f$ p* j

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* P6 N5 L, U3 P9 q  g4 [, ]
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# M% L  }  V! d: ?& w( ~




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