嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 i2 y5 u: g1 R% q5 E0 F. u
Void UPP_TASK(Void)" {% W1 ]( j5 u1 m, p+ Q
{
& `$ K! d% ?2 H$ [9 s9 y0 X6 q' W6 P1 W( H, _
    int i,j,k,target_int_count=2;
( @+ p" ^, [* O( l. ~    char ch[2];' e% ~: @7 Q; ?. T7 j4 P

5 n% O! r' V' l% x. k! S7 R7 [$ p' Q4 Z6 o" a

% v2 k( i; o; {  l3 e2 `; i5 o9 ~: c    upp_interrupt_count  = 0;) H& p7 r9 u8 Q4 o5 I" {+ x
    upp_error_count = 0;- q( f# N2 z/ K. x

$ W: n# D" m5 I4 \. c    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; Y5 U! b  a. V  b    // Initialize data buffers
3 `' H$ s; k" ?. M* |9 w    for (i = 0; i < upp_frame_size; i++)
+ ]7 c- j. G# f0 t    {5 Z+ ], e! R: k' m
       upp_buffer_b =i;
& \8 z* t0 W# L, m( S- g6 w       upp_buffer_a = 0xDEAD;
  A& p( D) b) @1 d; [& W    }# c7 C2 d& ^9 l0 T8 S/ @0 {* T

6 [1 `, k, i" G# [4 {5 @: q1 p- o    //for(i=0;i<1024;i++)) A  F9 s  m4 ]) L7 H9 s/ b+ l6 Q
    //    temp=0;
8 c7 y* v8 `; _
/ ~" \2 C8 i# K: f& f! g3 E    //UPPReset();7 w: [) L# T! M$ v6 [
    /*启动UPP DMA传输*/' l: |  L0 b- J4 X' f' T
    UARTPuts("upp_prog_dma_i\n",-2);
( i5 e! t, q$ S6 S5 |/ s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" s! R- _8 I& P4 V( M( }0 Y3 [
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. D& @7 h( w+ y
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 ~! n# {0 I# c- ~
# C3 j& U1 i* Y2 o& c
    UARTPuts("upp_prog_dma_i\n",-2);1 ^8 v- y+ I! g# j& ^
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;( @6 E0 |) C+ c& x" u
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 L& G2 F7 q7 |
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" D* K- w  G9 H4 P0 o
6 \3 B6 g# I# E% a    /*等待UPP传输完毕*// v* i* |3 l; [0 u9 L" C
    //i=0;8 o( l. F+ E' ~
    //j=0;6 ~& R/ n2 P' N2 E5 H! q+ X% O
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 p; a+ M$ I( a5 a    {6 y5 u1 h0 |* |; |" h  _
        /*  测试UPP传输的同时操作普通DDR数据6 n; j6 z0 r7 D
        temp=i;
4 w5 S/ h9 v1 D4 v# B0 S4 k2 ]        i++;
  k. }5 ?; z* X! }        if(i==1024)- M; I% i1 U) R: d3 C/ H+ M$ }
        {. u# q1 ~0 ?% T9 N
            i=0;( j# g$ \# u) H) ^& z$ o, d0 a
            j++;
4 D/ @& U( n* O& H3 H        }
0 C; e! q5 p9 W* {( }: E        */1 q& {% f& M7 A& W- _+ ?$ P
& ^* S4 ?( O  t8 C
       asm(" nop");
6 r4 _7 t( J( R  `7 \- j
2 s* D* V! L6 i; \       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);( Y4 h" s- |6 ~2 H$ A% l
    }- {: a! U$ M" R- b& i2 a- u
/ c5 J4 w: k0 t% S% y
    /*检查UPP传输的数据是否正确 (loopback modes only)*/  F, E* a% v% S3 y" l2 ^( n
    //UARTprintf( "i=%d\n",i);' x$ u: }- {' G, T2 A
    //UARTprintf( "j=%d\n",j);
+ e) I; Z  t0 e  a& P# B7 t* C2 F    UARTPuts("Data mismatch in buffers.\n",-2);' M) E( ?! M3 S, I5 Y# S3 E
    if (upp_interrupt_count == 2 && upp_error_count == 0)
+ K7 p) \8 J* e7 N$ X1 Z/ |2 B    {9 x4 \2 [, w* H, U6 T7 E
        for (i = 0; i<upp_frame_size; i++)% D- Z6 i8 B+ t# S' o
        {3 I; y2 W- s& G! Z
            if (upp_buffer_a != upp_buffer_b)& n& k& F- ^: E: W6 O3 G. @" ~! a
            {
) k, U- a- [1 Y. z& Z# j9 h                upp_error_count++;
4 K# E! m0 E; h            }
  t3 |* t- h4 C3 p, U* r        }5 T( x( N; a# H
    }# X3 Y8 C* r2 }8 ]  `5 d

& m& E. _" J& F6 J    /* 报告通信结果*/5 k5 [! [  z0 n' M6 T0 a
    if(upp_error_count != 0)
- B- b  \# U8 G( T( \/ ]        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) {1 f5 F) j6 k5 @, q: l    else% D4 {' f! q& i6 m0 X- i
        UARTPuts("uPP transfers complete!\n",-2);
5 u# c- s0 ?5 @% C/ G* O3 @' T% h! {0 o7 k  @0 ^7 W
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);$ T* c9 g0 _* i0 j+ [1 J
    UARTGets(ch,2);* t/ G) t7 D6 Q) Y" [5 `. z
    UARTPuts("\n", -2);- c: h& K: a$ P
5 V* y0 s, O+ S
    if(ch[0] == 'y')
  p, H! L: j( z' X; ~1 v    {
! M. ]3 S: ?" n& P6 @        /*打印全部读到的数据*/: [+ j- H% G8 Y) W
        for(i=0; i<upp_frame_size; )/ ?, p. h0 l; S3 l  U  ]6 \
        {
  X  {* m' d% Z. O3 V' j" d            for(j=0; j<5; j++)
, W/ j6 Y6 P% e( a. i# [            {
1 x+ l2 W4 O4 G( B/ f. a1 o                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) v+ j6 R) m5 q8 W$ v
                i++;) ~% G  h( i; d- w
                //if(i >= 4096)
& s5 f' g/ ^' _# a8 \                //    break;' W( _& g0 b9 ]9 U) O2 m$ p

, |; u( \4 r0 T8 @) ~' E            }) ]0 p- h2 K. u- X8 @. H. G
            UARTPuts("\n",-2);
. i1 t8 r/ m4 G        }
) r7 T% w0 I  e% ?1 E# z8 u7 b    }
/ v' a2 A! k" ]( S$ l+ H2 g: p/ w7 N8 j: l* K4 a' ^6 \: f: n' d; b
}
; E. z6 F% G; O  T: u4 G9 R
1 f, L" j9 u7 O

0 m5 E' I& a3 K( C4 b" W$ S* s% e
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! _3 v, p6 t# ]2 `2 n
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& I" `( Z5 }, G+ F




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