嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( S+ L9 L4 ~7 q
Void UPP_TASK(Void)
. C7 c4 x% e7 ~4 R1 P, q{9 O3 }* v0 J7 r+ T
' S9 i) x. v. D3 a" E
    int i,j,k,target_int_count=2;
7 H- p; H  u4 R: V7 ^3 O1 l    char ch[2];* \9 d" E3 r  N

2 y" I' K3 c) A5 i! o! W: B4 S5 J! w& W9 ^  y4 {0 B
. z+ Y9 |! N. {1 T0 j# p2 ^% t
    upp_interrupt_count  = 0;- x) B" L2 x  T. b
    upp_error_count = 0;# e4 f/ s* f8 K" i( F' ~6 s! W: E
, L' D: \) \; D( m5 e4 Q
    UARTPuts("\tResetting uPP buffers...\r\n",-2);' x. P: i8 _) U- S- W& M
    // Initialize data buffers# ?% b; B( q& K
    for (i = 0; i < upp_frame_size; i++)- {. I1 Y% w5 N: W1 {, o; u
    {% z% g5 ?# s" `: N0 ~
       upp_buffer_b =i;- q9 E& v5 y; w  V& U' R7 ]" [
       upp_buffer_a = 0xDEAD;
" _9 t' h6 R/ I+ P    }
) `: w' G' z3 Y* A3 X8 y* s9 h2 v$ _# [2 B, `* g/ S- P! O  Y! {9 P
    //for(i=0;i<1024;i++)/ ?# G4 i- [) @
    //    temp=0;
1 t) b7 H8 y0 f( A, [% }
/ u. M) J# ]" _2 L- n    //UPPReset();- ~: m7 ^3 t6 i1 T9 m
    /*启动UPP DMA传输*/
, e0 J' P* u4 e; Q, g# a" b" f    UARTPuts("upp_prog_dma_i\n",-2);
% y: d8 O; e7 s& u8 Z' `9 s    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: H. ~+ G: s  a4 o$ X! O
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 a: r5 T: f; B& Y5 m0 [7 H3 c; Q* [
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. N4 t) G/ }5 w+ U$ ]8 M) U
( ?6 f( v" K5 ^& a" |7 `
    UARTPuts("upp_prog_dma_i\n",-2);
8 V4 Z1 H7 l' p) Z: w6 M) D    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;2 a8 q; }& I8 ?% s" z/ T
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 o: F. \- ]2 s1 _
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);+ o' w- Q8 [! }1 ]

- d  h! c: o. q9 L3 r3 R. y    /*等待UPP传输完毕*/
6 S# }. e. }; {$ V  a4 d* X% A; X    //i=0;
; |% Y2 n8 u8 l; o5 j    //j=0;
* f! [: Y6 L8 w. y3 ~7 m4 M    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ [# z  R8 b7 I2 W2 u( k
    {
; L& r/ L" O* a1 C) i! v        /*  测试UPP传输的同时操作普通DDR数据
+ s9 O  A$ T5 e        temp=i;
. p2 n  N) b; F7 r        i++;
: X- C. s/ m4 S9 f4 y' B' F        if(i==1024)
$ u/ A, v: G  d) Q8 L        {
" R2 R; z/ Z; j* y0 |1 [            i=0;: b5 o. x$ H. i$ j
            j++;
7 ^1 L( u9 G5 S: ~, w/ k1 _7 a. o        }
2 K6 {. h$ n  q/ U4 G        */' q3 p5 ]* K/ C
6 Z3 T( O& ~* E7 U- R; v# e
       asm(" nop");
, V, E1 n: \# m9 g9 M& \: k$ p
: y8 H& d/ ?5 f( z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- L/ h1 z' B. r( T    }$ y* l+ n6 |! _7 k8 s: B* }
) O. I2 \9 ]* W$ G
    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 }7 d9 v( D9 u/ j
    //UARTprintf( "i=%d\n",i);
$ v  l- U* D: i" Q8 l% \    //UARTprintf( "j=%d\n",j);' P) h7 L/ l  i2 f" L4 X9 e; t9 {
    UARTPuts("Data mismatch in buffers.\n",-2);
- `! b" I0 h. f3 G/ [    if (upp_interrupt_count == 2 && upp_error_count == 0)1 G6 f$ o; k7 |, e
    {
" [' k$ L0 ^7 J        for (i = 0; i<upp_frame_size; i++)
1 l- l$ g7 m0 h- y/ E        {7 z+ v  E1 P6 G! K4 p8 p3 T" s
            if (upp_buffer_a != upp_buffer_b)2 s. e* m3 x3 A2 {7 f" f( Q% s
            {
, W0 E" P* N: p( w4 P; P                upp_error_count++;
7 i- v% H  l% n) b. w            }4 R/ M  b7 A3 Q2 r
        }
' N/ d/ J/ S' N% D    }
* p3 ~- }2 }8 B* y# ?, i  M
9 W4 x9 U2 @% n$ p( W' C! Z( o5 P% `    /* 报告通信结果*/* o" `: q$ l6 v
    if(upp_error_count != 0)
+ c# e1 M$ C# X        UARTprintf( "upp_error_count=%d\n",upp_error_count);) z) k# h$ q* E2 d# ~+ g
    else8 Q, f5 k& T2 X; ~7 h4 c
        UARTPuts("uPP transfers complete!\n",-2);4 ~7 N" U  x$ \$ }& d& c( g

: s* |1 k; h" q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( h  n/ N( ~- T/ L    UARTGets(ch,2);3 Y+ ?2 T0 e% X9 A
    UARTPuts("\n", -2);
- H& U: D+ P/ U. S  P, k3 b" |! S" Q- D/ K
    if(ch[0] == 'y')
: j5 H* F6 {! T$ M. I    {! T, x  w& i& x9 K- R: m2 [  c
        /*打印全部读到的数据*/
) C, U% X, W$ M6 J: f        for(i=0; i<upp_frame_size; )
: c2 `! `& R& F% I* k        {
( m/ `- g) q+ f4 u3 l4 v: k            for(j=0; j<5; j++)7 }) ~" f; t. R$ C
            {0 n, k! H/ u" J* Z
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 L+ h9 V2 U" J8 a* I6 y0 |% z                i++;0 M4 z! w) j" z2 a) r. I, b  n
                //if(i >= 4096)
1 e3 p: D7 c# H                //    break;' Z- i2 W, @$ a6 j# c. O% I3 S; K
* v0 W( a4 p, @8 a* G
            }* [# t; G: n( P, m& W
            UARTPuts("\n",-2);) J2 g4 V+ K+ c& l
        }( c4 Y* a- c  n( ?# f3 r2 j2 h) d
    }
1 H, |7 ]% l% K  \; w, `( S/ [* r0 s) {; n% Y
}

( A, N7 E2 A: V- P

) ~+ K: Q) B! J  T
2 n( _; U& V% k7 `& R3 G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。/ L. q. Y' q; Q% [( n

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 Z0 b# @8 g! |; j+ _




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