嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, U  r; T5 T6 J' n
Void UPP_TASK(Void)
2 c* G; Q# K4 L5 P{
1 D4 j- d) k% R5 ~7 I3 D9 a
( b# X* {1 \9 K  _. Z    int i,j,k,target_int_count=2;" k0 {. {. {: Q) T" G
    char ch[2];4 h: u3 N* {) H8 G: z

0 r* v6 A8 G0 J! S
# H) K" m/ E* I4 v. E' H
  {5 e% z7 N$ I& ^7 p    upp_interrupt_count  = 0;) ^3 O& v% B7 D9 k, L
    upp_error_count = 0;) B3 `0 r6 t" e* E
4 t, L4 Q( d6 T" g0 y
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
  R5 y  H2 {' A, u6 y- U* {' B& l    // Initialize data buffers# g$ G" B3 t) ?+ l: e- b  v
    for (i = 0; i < upp_frame_size; i++)
8 V+ [4 z3 D1 T0 I) T    {5 [" O+ `- n' X, r, c0 ~
       upp_buffer_b =i;
0 d* Y* I8 Q% d- |, Y- `1 \  V       upp_buffer_a = 0xDEAD;) E$ r  r8 a0 O+ ~. a; v# E
    }
) P& q7 H5 @2 g$ ^5 ]9 ^
( Y8 ~8 e  q. ~! i7 b    //for(i=0;i<1024;i++)1 ?% P7 o/ {2 c1 h" s* }4 k
    //    temp=0;- s, d% u$ {6 j, e+ w
5 s4 y3 |' x/ G
    //UPPReset();% K* [* _( ~8 @. t2 Q5 R  |" _
    /*启动UPP DMA传输*/
2 ?. V5 _( m" i) l: x6 Z    UARTPuts("upp_prog_dma_i\n",-2);: i; F" f4 g* ~, `0 }/ }5 ^# O
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 _7 |% V# B- e    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 E5 o2 n7 Z, U$ x& {6 b  Q
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 i& L/ C. w8 X3 `* J) K0 J) N# t1 y" A. m- }/ R2 F0 n
    UARTPuts("upp_prog_dma_i\n",-2);
0 Q6 \; m  k) g6 E2 {1 O$ m    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 j# X( }, F) }1 }7 O4 l6 i/ T    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, [& v( p7 I9 D3 d+ S8 o    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( s. Z" u* e& y- |2 a, j
+ H( J4 l; Z  o  m" I  H3 H+ e% O
    /*等待UPP传输完毕*/5 F% ~" Y6 A3 Z; B
    //i=0;
( l, D7 R" l( l# n: G8 B; O; y    //j=0;
( r, M9 V9 R: p# \& ^" a- F    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 @/ \0 Y" g" W+ o0 J
    {4 k/ T; D+ b2 Z) z8 w' H
        /*  测试UPP传输的同时操作普通DDR数据8 M1 ?9 l  e6 T; U$ e
        temp=i;# M! |! o9 z$ P! w
        i++;
0 k  y. z) w4 B  W- z        if(i==1024)  I9 C1 e8 V) n
        {
  y' c4 P& B- `$ l: z            i=0;
' k% P2 f1 f* i' \8 _% O! A' f            j++;4 U/ {# u: E; s. Q
        }4 x% t7 g1 N0 ]
        */( \4 e1 C) x2 s6 _3 c8 f  s6 P  X

9 |. L+ u% K" q  Q6 M$ W       asm(" nop");5 L" k- l# `! M: D, O0 g
) L" \; E: F/ J0 P
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 a. Y5 }0 N9 W) `: y5 R  a    }+ H( ?" K- e( k) f8 O; v
, c9 W+ F' c! ?" ^
    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 z% d2 @+ Z( l8 J8 Z3 r" u% O# j
    //UARTprintf( "i=%d\n",i);+ i0 g! s3 _( D! r- P$ O# l
    //UARTprintf( "j=%d\n",j);: r" S0 J4 d" e, p% n' Y8 r+ e% j
    UARTPuts("Data mismatch in buffers.\n",-2);
  M9 @0 e) k4 b8 Z- _" r# C0 S+ G    if (upp_interrupt_count == 2 && upp_error_count == 0)* |8 u! L7 W: @4 m: l' D, ^7 `
    {
4 B6 U' R& Z0 G- G$ W        for (i = 0; i<upp_frame_size; i++)
( M: E' o6 O  P7 [        {. C8 l& W- k/ O: {" ]( d
            if (upp_buffer_a != upp_buffer_b)% q& c4 Q' F8 W
            {
8 K" I, S# Z4 E                upp_error_count++;9 y% W% L9 K# q
            }; L  h: T- ~5 q; Q% _4 U) T4 U
        }* n3 b6 _) `( V+ S9 J2 ]: D, B! Q
    }) _/ A7 g1 G7 Z8 X
' l1 F" }0 X4 G, D: F- w
    /* 报告通信结果*/: E  ]) c3 v7 `. C
    if(upp_error_count != 0)) M& _+ W+ Q$ u5 O4 j5 i
        UARTprintf( "upp_error_count=%d\n",upp_error_count);- h& Z. Q9 d' O/ a
    else
! m- {7 A( ]. [* A3 \/ O* `: V        UARTPuts("uPP transfers complete!\n",-2);1 r4 f; c6 W/ v: @; x; ~: h  O
- V3 A& I' B* T
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 p/ ^4 u* _! o' ~$ D9 r
    UARTGets(ch,2);" ]% O8 C( P- e2 o3 |% r
    UARTPuts("\n", -2);
8 q/ }% U4 \. U$ Y+ P7 G. b9 A, B# \
    if(ch[0] == 'y')
- ]. o/ Y3 H5 Q) x4 u& K, a    {" ^; S5 I! g  o6 {
        /*打印全部读到的数据*/
4 t9 b2 c* ?! X5 _0 b& ^        for(i=0; i<upp_frame_size; )  _0 z4 G7 ?/ k2 a
        {; |# Q9 K$ n% j- b
            for(j=0; j<5; j++)5 i: C  ~, D! r0 ^2 E: `
            {
) J* _3 O6 @, M                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ t% d* V9 l2 s* p6 D' |; s9 }8 Q                i++;
' o; c: |/ j" N6 q* a                //if(i >= 4096)
* e! o7 s! R6 i: g: x                //    break;
( n2 y3 }6 {" e% b
7 _  T; f5 P( s: m% V/ E/ v            }. c! D+ T2 P4 n$ V6 h5 X$ O
            UARTPuts("\n",-2);: l0 S9 Q2 w  l9 K. r
        }$ p/ a/ N3 {% N- ?( n& h* H& A
    }
+ ^2 A. u" T. B' H' e- \: u" t: ^; d# Q: f7 W4 B: \6 K  y6 ]
}

$ ~) v. K/ o% h: Z

- z( Z# ]6 a% y# e' V& g+ W: l# ^
2 b0 h5 T' l- v
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! d5 F; v# v7 |/ f

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( g# `* m0 n* o7 ]





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