嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* O2 V& y8 q/ ~5 C
Void UPP_TASK(Void)
- W3 O% \( E& S{
' U  K, [* C2 a$ b" K: p1 I
4 M0 i1 D: _( j/ _4 u    int i,j,k,target_int_count=2;4 X4 s3 Y2 U9 M7 i! {
    char ch[2];. r- s6 Q( j9 p9 N2 U' Z

* j  b1 M; u2 U( O! t# U
; \! G& g' O% q" G, x
# A" D( @5 m8 K5 m! Z7 h    upp_interrupt_count  = 0;: u7 {) K8 N! G! }8 {  L
    upp_error_count = 0;
$ ~5 U: ?7 U  o8 g5 L4 k
  R( o, T! r3 Z    UARTPuts("\tResetting uPP buffers...\r\n",-2);' ^8 ^9 x7 W" E4 U# Z% Q( t
    // Initialize data buffers
" [" u$ V) w. b: q* p8 u    for (i = 0; i < upp_frame_size; i++)
4 u7 c/ O& y5 z! z/ {8 |2 f  x2 M    {5 I) {2 _, O/ O/ B- k# j% Q0 L
       upp_buffer_b =i;
! Z4 q0 X/ F+ }" y       upp_buffer_a = 0xDEAD;% b/ j3 s' m2 A! Z/ h# e# W
    }
; ?, Z; w! L: E" L6 u: u  G( o
( `8 b5 G& X. n9 a  Z2 A( @# Y    //for(i=0;i<1024;i++)
/ u# \* w! e  Q8 G    //    temp=0;1 x3 v' @9 \2 e

5 B) U# d* {1 x4 X: O2 Q/ x    //UPPReset();: J/ W- M+ P* N5 R2 R+ b1 f
    /*启动UPP DMA传输*/0 W* |# X& ]% P2 v% M2 |
    UARTPuts("upp_prog_dma_i\n",-2);
7 L* T+ R* s: u7 |    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( {+ O9 D6 p1 H8 j8 A% z5 R" i
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 r5 k- j0 t$ Z+ q) U7 o+ K
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" u4 t3 k3 S1 Y4 J
; `  g: @4 ?8 |5 r0 g$ A    UARTPuts("upp_prog_dma_i\n",-2);' k/ N" T  t3 T5 S5 C( {/ |5 `
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% p( E5 H/ y" t9 _    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, E" H0 @8 t$ W! I7 c5 |    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' a+ |6 S- I" n  [0 ?8 V# M3 E' P7 E; J/ h: `$ I3 y2 x1 o
    /*等待UPP传输完毕*/
6 K* N, M" H6 @+ R6 V    //i=0;) e- \2 t( g' J& Z: L
    //j=0;
- |' I# y$ C7 f& {' ^    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# C( T. x/ Z+ u) e1 \5 H6 _    {
# S6 e5 m; C) w        /*  测试UPP传输的同时操作普通DDR数据
! Z! K# ~) `! O5 a# \        temp=i;% }: w! s7 R! ~
        i++;2 v+ `: D0 |) @/ N
        if(i==1024)1 F* M. G8 l) J( N5 m. i5 Z  j6 Y
        {8 G8 B' r4 `* G2 e, B' {, U
            i=0;, T+ n* A8 ?) I* q
            j++;
0 {- E$ X$ T; T# d2 @9 ^        }
4 J' t. T' a/ m6 S        */+ D6 L9 m$ g0 G- b

1 ^( F' l  J, P       asm(" nop");
) k' |3 ~/ Y0 V/ H. l8 _
1 O/ X+ s( E+ n8 z- H3 n5 a6 q       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);* R' J( x/ @+ a1 j- i: [
    }  I+ i6 Z8 f4 i9 M) t  F) s% U% ?+ V
" [9 H7 B/ l0 k) }# h
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* i9 ]0 m! T' C. @5 N" p    //UARTprintf( "i=%d\n",i);
5 K4 I$ ], I  c8 S- V' ?    //UARTprintf( "j=%d\n",j);
- c# L7 Y6 _8 m8 E) k$ l6 C% n    UARTPuts("Data mismatch in buffers.\n",-2);
7 J+ l9 x% ^% G    if (upp_interrupt_count == 2 && upp_error_count == 0)
. l3 K2 y. O6 X: K    {
9 K3 Z4 J4 o) z" E) h$ b4 j7 Y, c        for (i = 0; i<upp_frame_size; i++)3 }8 L1 Q5 G' x* l
        {
4 h. j1 L, Q$ v+ Q            if (upp_buffer_a != upp_buffer_b)
* w2 Q  K; t+ x" W1 }2 ~            {- w' b) R1 U: F$ `+ E
                upp_error_count++;
1 u7 s) G  x' l; f: a+ e            }* X* y0 x' W7 b6 N
        }, p1 x* p6 s5 n; Y' R- c4 }
    }( L3 Q; ?4 e5 C- J; m
0 C: ~' F* F! `' ?- ?
    /* 报告通信结果*/+ T% c  p% F0 |$ R7 U
    if(upp_error_count != 0)
0 e+ E) U3 T% j% _, ]; m. E        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 |1 g" O8 I: i; E& H
    else
7 b" L2 \0 w) \( C5 R+ t        UARTPuts("uPP transfers complete!\n",-2);" E& K9 k; q- w) I/ x1 e3 W
1 K9 ~, q1 K" V' @$ [# R" \
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
% y9 H, G) [8 g* w3 z2 \9 {    UARTGets(ch,2);
) b( W$ ]7 L( G4 f7 q1 z3 {$ }7 ]8 {    UARTPuts("\n", -2);
& _1 D# n8 p; ]! k
* U  u; ^# e. r% V    if(ch[0] == 'y')! k. `2 L- I9 R- L3 g1 Z; O- }
    {4 }6 J6 e' ~, O9 C* W+ G; R
        /*打印全部读到的数据*/
$ j0 s, u9 T9 D3 N: s8 t        for(i=0; i<upp_frame_size; )
' T( Q' J$ }5 x        {9 [' h1 T' K, G! P, f
            for(j=0; j<5; j++)8 o8 Y' T) G1 H! k
            {
2 G: S) r$ I$ E' K                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ X! Z/ [  d7 e, @" |                i++;
" x7 e: c# `/ A. A" @3 q( S                //if(i >= 4096)5 z: ?& n- j+ F& L. g  @  @
                //    break;$ Y1 n$ u' w3 u* O- X/ U9 f* Y; l$ A

( g" ~4 w0 g8 h            }  T6 _) j3 b0 d  P2 x
            UARTPuts("\n",-2);6 I# [* c7 K2 l3 g! F2 n# I, n
        }# a/ k0 e4 i, U3 _* J3 Z
    }
- n: Q% S: G% i2 I* H4 c& S1 o- E0 O$ y$ Z; ]; H$ q+ |* i  c
}

7 x' L& x  B% K1 c3 G' i3 P
; k1 b4 t* a! d- q% }/ B
0 H1 r9 M* O, O! `- R

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。1 T3 T# E% d# ?# j

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, d' o# `( o9 U9 C+ B$ V





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