嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* i7 a, t+ e) M
Void UPP_TASK(Void)
# v# L: T$ k# a; t! g9 W{
5 C3 D: {( I' ?1 V7 t* v! M* [1 I+ _- f( [0 ^8 c
    int i,j,k,target_int_count=2;! y# m" p7 f( @. v
    char ch[2];
0 K4 i, o, a/ b3 c$ x! R' G: S* [6 h

* e2 V. c' L# d8 K" Z
% j, o: u! R9 P7 ^    upp_interrupt_count  = 0;
, l% v" n" M7 H. P+ K% T! [4 W    upp_error_count = 0;
  Z9 X# d) O' Y
" p* a- N; }6 D( a' Z) n    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ z1 A) O7 P; c  O2 N! j% ~& U    // Initialize data buffers( S* q3 g3 r  j0 R5 _8 g$ R, y
    for (i = 0; i < upp_frame_size; i++)
0 y$ g2 B. `$ j    {
; X3 n. E4 ?7 p+ k  A  B       upp_buffer_b =i;
9 _( _7 }( B; X% T% ?) i/ T! |       upp_buffer_a = 0xDEAD;
; ], R7 S( _4 C6 n    }
# l9 r: Z2 ~- e6 h) l+ K
4 G0 h, e. D. K# k* s! \* N    //for(i=0;i<1024;i++)% V- b6 y" x  F7 L; X3 o6 r- h
    //    temp=0;8 O: ]3 C0 Q" _

; N. a( P) n9 Z: @* Y! n    //UPPReset();4 E( a1 D. _$ s9 M# r- p. O
    /*启动UPP DMA传输*/
4 L2 Z* g  ?7 V) |# Z* b7 }; m7 t. o    UARTPuts("upp_prog_dma_i\n",-2);; D" }4 M  ?. E2 w/ K8 _7 [
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& V3 Z& a/ z' O9 A" e: _3 D
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) B) W% d( W2 n6 p    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& s% B6 r, o& h4 A) [" o) T' B8 u+ L. m! A) x# \1 n
    UARTPuts("upp_prog_dma_i\n",-2);
* R# [* A6 c- p    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; W/ f# h: `* Y$ c    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ n4 a7 q! f$ `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 u1 F+ {: b% f0 M0 v
9 M6 y, k* q" a" {/ H  o    /*等待UPP传输完毕*/
1 T# ^2 V4 i  O3 r& {    //i=0;4 T7 m9 I/ ~& h3 ]2 Z9 T
    //j=0;* s) \3 p8 W# f3 H7 @$ X
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  x; [3 z) ^# k% Q2 R8 Z
    {: E& B$ H# {' v4 R5 M
        /*  测试UPP传输的同时操作普通DDR数据$ ~, Z1 w6 J6 [+ ~4 o
        temp=i;
# M0 T2 k$ l9 K9 X$ A& G/ y- E        i++;
$ p- v: S  Q, |% M0 U        if(i==1024)* Q8 S1 q/ \) e9 Q" g4 ?! ~
        {
7 E0 N8 i3 ^' O" B: \# V, y; Y( o            i=0;0 _/ ~" D+ O9 O5 ]+ G$ n1 V
            j++;' |- n: V% k: K
        }$ r/ m- g( Q9 K
        */* W. z8 G2 ]1 [) l

# T1 O1 T, ^( x0 p) I% h5 o       asm(" nop");) X7 G+ H8 ?" @% Z) Q$ n/ x
! A. l" [: h/ _/ A( A$ H
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 {' x& k) b0 c, l# J. z
    }( \& L$ L3 e1 y. g
& g- S4 ]5 h& @8 p" ?# c
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
" N$ X/ K6 ~8 \! Z& T+ d1 m! D% }  x    //UARTprintf( "i=%d\n",i);
- B0 B  G0 K' u6 p5 T    //UARTprintf( "j=%d\n",j);
, u. L1 F; |* s/ O. \    UARTPuts("Data mismatch in buffers.\n",-2);4 a& k- Q/ K* n. q- l( u# e, T
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 \% j# y4 @: \9 n8 d    {
2 Q6 k; R7 B$ k8 f& p) Q        for (i = 0; i<upp_frame_size; i++)
/ v- ]8 y1 {) R# v! s; e        {
6 J$ U1 N1 r; ]0 Q" A+ C8 `            if (upp_buffer_a != upp_buffer_b)4 ^1 C( D( g) Y, N' u
            {4 X: J. p) E  V& p6 a% P. o. J
                upp_error_count++;
2 o8 }! c  L- K            }8 P8 V3 Y2 W' T1 p5 ~4 M
        }
: n- M2 P- W  b5 J/ G6 e    }+ l0 C6 t- @/ d) `/ d, d

. _* P  f1 Y$ `# P  m8 M& Q    /* 报告通信结果*/% |5 l, x- r: w9 Q0 d! S. m
    if(upp_error_count != 0)
" w# |! t' w) e$ e8 J0 v7 X7 g        UARTprintf( "upp_error_count=%d\n",upp_error_count);# K! ^  v: X. Z) u+ `1 X1 C# S
    else
1 @$ s0 u$ I  I$ ?3 R' P        UARTPuts("uPP transfers complete!\n",-2);
' S" e  w8 `4 O3 B/ f1 d0 w$ r6 Y9 g  k2 U4 w* ]
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 T, g) J: t4 V' ]    UARTGets(ch,2);, ]) k; T: u  V9 v7 A
    UARTPuts("\n", -2);$ E: j. e" t( h3 c; s

- t$ B  m6 F" l5 x    if(ch[0] == 'y')( r  g9 E  z! {2 h8 o7 d0 R& i( `  M7 h
    {3 P/ u! P. c* l; E$ |" I( F* b- [
        /*打印全部读到的数据*/
& x! l: d8 c! g- e. i2 y# `        for(i=0; i<upp_frame_size; )1 L: O& I$ u. F
        {( F4 e, E2 e* B8 O, s; z3 N
            for(j=0; j<5; j++)" y  Y/ j; P! P1 h5 u% }5 i
            {% i* ]6 p. v3 z( Y
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) }1 V3 l/ O# R* R9 j                i++;4 A/ m5 k6 p" Q4 t5 C& R0 [
                //if(i >= 4096)6 S8 {  `/ y) L3 f2 R. B7 d
                //    break;
4 _$ v) x. s" \4 Z2 X& @4 |  Y4 l( |- T* {" ]/ o
            }5 G2 K. B( I' }7 o" m0 J6 U) N2 [, s* Q
            UARTPuts("\n",-2);
+ ~! E# o9 r/ L2 b/ k6 ^* b2 J6 H        }6 G* M) d2 E: t  x
    }7 v8 \- w1 a2 }( T1 B# D8 ^7 J
) ?3 o" I4 r6 B9 L- k
}

# [! h, ~% S% y8 P6 @8 Z

* R; Y, Y# j3 F) L' k$ n" z% N
) c( u7 g- T& I
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。7 Y4 M/ u. M. l

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) M/ w. G! X6 v% F9 k4 ~




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