嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 P0 D; {% w  p8 ?
Void UPP_TASK(Void)
/ K8 e' W  Y5 a8 E{6 b* }6 w, X2 D. l$ U

  r' N8 ~) K1 e+ K0 L1 m    int i,j,k,target_int_count=2;' {" t, R. J$ c
    char ch[2];4 |' W4 [9 S5 R! C3 P9 m
. D/ J4 v. z* T6 Q9 w- ^

! \, |: w- K7 i9 l& t( c  X* y) J7 d, D- m) W$ J7 f
    upp_interrupt_count  = 0;
! {1 e5 \4 J& |1 Q3 N: Q/ X    upp_error_count = 0;9 e4 Q. |4 P% O; `0 B
4 w- j6 W: [. ~. o: L/ G
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 [4 n& G; r" K# V; J- c    // Initialize data buffers
# |( \% }8 O3 F7 O    for (i = 0; i < upp_frame_size; i++)( j4 |, a7 {6 z3 W7 }8 {% _% ^- ~9 W% @
    {
, I+ n3 {2 h0 h; h* X       upp_buffer_b =i;' z" [0 Q) O6 K3 y2 F; U& K5 M
       upp_buffer_a = 0xDEAD;" e8 _" i+ r+ P* p
    }5 f8 ~0 W0 t4 O' B# Z  S2 x
' A/ R  p0 G- y$ W# s
    //for(i=0;i<1024;i++)/ K4 L5 d( T/ L5 R6 P$ i. I
    //    temp=0;
% O; ]; V: ]- f! G2 `* ]0 U* G6 o% L. f6 w/ O. o( V
    //UPPReset();
  V5 t' O( l& V3 Y: m3 P    /*启动UPP DMA传输*/
5 P9 M! x  k; O# }( J* j    UARTPuts("upp_prog_dma_i\n",-2);
% r8 N8 V: q" D; b8 u7 A1 {, j4 m4 ^) G    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 b3 }+ A4 T! Z% t
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% G: x# D6 O+ o+ B7 ~9 K' U    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 W% H5 A6 V+ L
- L6 ^8 a$ C7 T) M# z    UARTPuts("upp_prog_dma_i\n",-2);2 m& n7 U" U& U8 B" n( p
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) |$ U0 C. j  k    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 d) ~% V; A; `: x    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 `+ x% T# w! m2 f; u5 @! P9 D' m3 A
2 X9 P: L, v0 y0 A$ z9 u5 C
    /*等待UPP传输完毕*/
& v- A# I& d" U    //i=0;
3 K; M! h4 S2 o4 l    //j=0;3 k/ E( e2 O$ E8 [5 B3 J
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 R5 Q8 c1 Y6 k$ ^    {) x, ~  S# w3 F9 l* b
        /*  测试UPP传输的同时操作普通DDR数据
3 b( z! u/ V  T; F( Q- R        temp=i;
  d) P7 ^  _. A# K# U        i++;
4 p4 v& _0 o- u        if(i==1024)4 o& _6 ?% x7 M' s) m
        {
! v( u8 y4 u) e( u0 |; {            i=0;
& Q& R6 J) ~9 Q' u( S            j++;: `; W+ P# T9 o( s1 y7 F
        }  S- Z5 @$ W6 X) h) }8 l6 D3 f
        */
1 t0 u8 L5 v% i- f! l( T% t8 F+ |' i; X5 r7 P+ o  w
       asm(" nop");
  K  }$ o* Z# v* d( V) R
5 W; a/ T; a9 ?. {/ O' y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" N8 {- W& a6 D. a5 B7 K
    }$ w' G- u# P. Y$ }0 O! W# p" s
: ~- _4 N0 ]; B+ D1 u" P% P0 t
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* Z9 M, D" E% j9 r; e
    //UARTprintf( "i=%d\n",i);
5 I, c6 z* n- o1 K7 x- ~9 J. {    //UARTprintf( "j=%d\n",j);
4 N1 ], N3 f3 p# c2 k; P    UARTPuts("Data mismatch in buffers.\n",-2);
8 ~6 z& P& R, }- ]/ ]9 F    if (upp_interrupt_count == 2 && upp_error_count == 0)& U% a% D+ D) e. {/ `7 ?, t
    {
% ~& ]2 c' G) x& N* i3 {& _        for (i = 0; i<upp_frame_size; i++). l! v7 z$ R5 u( \
        {
0 u' U$ ^# v3 B7 ]5 F( |            if (upp_buffer_a != upp_buffer_b)
& c5 W3 w$ B3 d; _            {6 x' W- I" h( l
                upp_error_count++;7 {  u: G8 a  F+ \, `
            }
0 i7 N* g5 |6 f2 b5 |        }  Q' n; r" i! M+ _" _
    }1 t+ A* e' ^+ h$ H9 ~+ c7 D

* t$ m2 l7 I0 ], D    /* 报告通信结果*/
; U( z" o1 Y, z7 O$ K: p$ j3 Z$ R. a5 K# g    if(upp_error_count != 0)
+ O% s' v8 R1 `9 N- @        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! B2 \# [$ ?# c$ r+ v3 G    else
( F; f6 p$ `' I9 F& x        UARTPuts("uPP transfers complete!\n",-2);
6 P# d$ [/ f$ Q- W' @% \, K( |3 k. f* P* B8 G: w" G
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) v$ d& {# C3 `4 E
    UARTGets(ch,2);
' v1 M( C1 B8 `# G" ]5 U# j, Z$ Y    UARTPuts("\n", -2);  K* g& {2 {& U) q) B+ B- q) b$ {
* O( s% d6 o, F4 x8 d
    if(ch[0] == 'y')
- u; @+ S* K, ^    {. @+ P( T7 b! e+ t- b3 U- F& G8 t3 D- t
        /*打印全部读到的数据*/% |; s9 `3 K. |! h
        for(i=0; i<upp_frame_size; )
- f0 D; y8 J7 Y" N9 ~3 {7 O, y        {
0 g& t$ U. P% C, r* A            for(j=0; j<5; j++)& R9 |& J% m% p$ s$ K% a  f
            {5 j1 r, |7 S( u$ i( X7 H
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);! b! M# X% M, G0 ^1 X2 B7 `5 m
                i++;
/ L! S! x* Q5 J; ?                //if(i >= 4096)
2 N; r: _9 E. Z( V4 f2 M$ B                //    break;+ w5 K5 Q- i4 `
6 A0 z' m; ]) C: x$ e) r( c
            }0 ^) R" x0 V3 d" I, L: S
            UARTPuts("\n",-2);/ T" d; Q: S5 t9 I6 K
        }3 C: v/ H' i; b* A# Z
    }; U" ?: e7 p3 T9 M8 R
4 [6 d! }1 S8 \5 O7 ~$ ~  M
}

+ Z. f3 F6 l8 w# S8 d/ W+ O
! c8 i/ w7 Q6 n) g5 I. N
6 D7 u/ {: t( v. E5 u* I6 P

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 q$ Q1 s7 @5 _8 [7 \, J3 X

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 s7 P- {! u8 v& \# S7 W, M: i( }





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