嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ E( T9 |4 m, c% W2 ]( o6 V
Void UPP_TASK(Void)5 V& R1 ~. r) G8 _- K9 e
{; }1 W4 `+ y8 I
( U- d3 j' O6 D  N
    int i,j,k,target_int_count=2;
3 B  u: I" U9 G) t6 j    char ch[2];
& q/ |4 Q4 G0 @- H0 T* K3 ]( `4 z% r

3 P' t% p! @$ ?' t- ]8 O: Q( r: t5 ~  x, U# z0 s
    upp_interrupt_count  = 0;! U! @# ?+ g5 k7 V( _, f! W7 @6 p' ~  H
    upp_error_count = 0;
5 H/ @' X; }3 |0 N( k) Z
! g: |3 M/ \) ~& h    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 f4 _0 E# v: ~' u
    // Initialize data buffers
! Q6 @# m( G" O    for (i = 0; i < upp_frame_size; i++)
! {5 o) W' _7 {1 p- N  l! F+ q    {' `$ Z7 w  m$ r) R
       upp_buffer_b =i;
" C( q% }1 g; p0 g/ l9 C       upp_buffer_a = 0xDEAD;
5 b4 F% C2 M' C- ?6 c    }! u4 J, ~! a6 q7 R" ]8 i
' b8 e# X3 P9 n* p$ t, G) e1 ?6 Z+ [4 c+ a
    //for(i=0;i<1024;i++)
' e" d. J+ a) {0 i    //    temp=0;/ k6 x5 m1 O, _0 S- A4 C( I* R
2 ]: J1 ?8 E& }) C/ D
    //UPPReset();
2 x9 I- T0 ^6 l* K) h* `; D3 g4 @; ~    /*启动UPP DMA传输*/
4 V8 a1 y3 w, @$ C    UARTPuts("upp_prog_dma_i\n",-2);  i0 T- u: m! L$ |
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, T; Q( f# `  J    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! n2 |3 ?$ Z% @5 q. Z% [
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 s8 x5 F- |+ x) [/ ~& }6 F

: G& S9 O, G5 J9 C& ~    UARTPuts("upp_prog_dma_i\n",-2);5 H5 k% j, G* y3 R1 n6 h
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;6 N2 ?# f0 @  ?; n' S! ^0 [  g
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 G$ T8 ?5 S) h9 W
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. i" r. ]. S, }8 t7 q$ c
( R: Q% H+ {3 F6 ]% x  h* G7 h    /*等待UPP传输完毕*/
- E+ S2 {: A9 c5 p' K    //i=0;
( _4 O, I( I1 e& W9 m    //j=0;% t: ^, M  C3 u8 L  j- [
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' A! i# ~4 @3 ^, Q( }/ ?8 @* B
    {' W, L# T+ h! p) B
        /*  测试UPP传输的同时操作普通DDR数据7 ~0 T  l  e/ K) l. h& S
        temp=i;
7 S& O* h$ P! w* X        i++;
& I2 O4 D2 m7 J  T2 X        if(i==1024)
% ?+ g2 r) Z) S, [- h3 z        {6 s6 Y" j, v$ ^- j8 g5 n5 l
            i=0;; p% `- `1 d) ~" ~8 h, {5 |( V
            j++;
; _/ A3 X; _$ Q2 t; P        }0 t# w9 M% W9 ~' w
        */) V( Z/ b/ v" _' B* x! }' A

/ K1 O% k9 P* }# h3 r; b       asm(" nop");$ _* F* F; Y- K& t  R3 i& i& v8 u

- [$ d( e) z: M  ]' Z5 f$ b+ p9 F1 _       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 u0 }. ]7 J& F% A- s
    }  C; r0 k& V/ t% I. o5 S
; O8 S: ]3 A, B
    /*检查UPP传输的数据是否正确 (loopback modes only)*/% M" G. Y: a5 Y0 g  S- T2 U3 t
    //UARTprintf( "i=%d\n",i);9 u* x, p" Y6 Y2 G5 n5 Z  b
    //UARTprintf( "j=%d\n",j);# ~5 b- v, B" e; }
    UARTPuts("Data mismatch in buffers.\n",-2);& Q8 H7 y( H- T, i! O0 q! q
    if (upp_interrupt_count == 2 && upp_error_count == 0)5 Y6 m' R1 B4 _3 L9 b
    {
7 w. X9 q  M' M! I# U9 U4 [        for (i = 0; i<upp_frame_size; i++): D) h) n) H! i% [3 G+ h
        {
6 s: M, X/ }4 |            if (upp_buffer_a != upp_buffer_b)+ }/ I; Y4 E0 \# Z
            {
% y4 o6 P) j: b                upp_error_count++;
( h* W1 {1 ]- W& L0 G" n            }' g' ^! D- S  V8 I
        }
1 U  k% j4 P" u/ T! y# B, }+ I; i    }5 K! h) J* n* M
- u) ?' P& F7 _  _' M3 a
    /* 报告通信结果*/2 T2 q: `( p: ^. p& [, \
    if(upp_error_count != 0)' P2 W( v( s5 k5 b1 c+ R
        UARTprintf( "upp_error_count=%d\n",upp_error_count);, s+ k9 A, H  k
    else8 p, i+ P  I# t# N" o
        UARTPuts("uPP transfers complete!\n",-2);
* l& w# \# |5 Z. u3 U; z, M$ l
& z0 _  A9 w, _. A# I  g    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: J, G: U. X1 V; P6 Y    UARTGets(ch,2);
5 x9 d0 ^5 ^4 j! k    UARTPuts("\n", -2);
8 H& i3 F/ m) f& l. E3 y! x' V3 t! ^3 D( W- C' ~9 \. U
    if(ch[0] == 'y')
% q# g- o% `" A  v/ `, ]2 X; ~0 D    {- }4 {- s! y7 g5 \% t* y/ v  i
        /*打印全部读到的数据*/
0 c0 ^$ u' t: I. W% X0 O6 r6 @        for(i=0; i<upp_frame_size; )
  Y- K# k* t) w, T! d        {
3 a* \9 L  Z+ C$ ~7 Q            for(j=0; j<5; j++)
7 V; C: b% D6 Z" U7 h* X* Y) G            {
1 |8 e+ U$ z# _1 x0 Q0 W                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( ^* u9 V) `3 o! @
                i++;  q7 _5 }; H2 M5 p: L6 s/ V6 }* Z
                //if(i >= 4096)) }3 u. {9 x" p8 R$ e$ {  [5 e
                //    break;
. c% k. V$ B. e0 A6 \! q/ a- ~* `  q# n7 u
            }
6 G; S* L6 u1 \2 S' u7 T/ d0 D            UARTPuts("\n",-2);
" p8 z* R5 G  u; w( J: v        }
- q6 `3 l9 b  z0 O+ s  H) o  _    }
/ F+ c  }  t9 M& H* m
# q* T+ T9 j& r7 d9 ~* u}
% R' B, @: ]  l- C5 O8 z, {& @

+ \8 A  A3 X4 p5 d& S
, }1 o/ m  d/ b
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" _, N: }$ l/ V3 L: @$ Y  u. y" ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* I; c; ^9 z" Q




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