嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 i% t& W5 K& g: I
Void UPP_TASK(Void)
0 p- g5 G* Q9 Z' i{
% A/ X4 t4 E% k- E! H. `* z# f
! ]' F# Y' M. G) z/ H( F5 q/ B7 K" R    int i,j,k,target_int_count=2;
0 m0 x3 O7 ~* e+ p+ K! r! u" F, o    char ch[2];
9 b2 f$ [$ |, F9 J+ [' p; q
4 x- g" w" }) ~! {1 x
2 u: m4 n+ [$ b5 N$ E5 \2 p7 r& @0 H' C8 N, K3 C
    upp_interrupt_count  = 0;
; k8 W6 N4 t1 |+ \  \    upp_error_count = 0;
7 T( u$ E5 H- A+ h  P% R( I: g/ Z, h
    UARTPuts("\tResetting uPP buffers...\r\n",-2);8 n9 ?8 ~0 [# N- E# C2 M7 G
    // Initialize data buffers  Z# H. z" _1 y3 A9 c
    for (i = 0; i < upp_frame_size; i++)
5 X) u8 [0 R$ K' s0 \5 [8 I) A    {
+ G5 j! F% [9 E$ \; X8 A6 m3 `/ o       upp_buffer_b =i;
4 k# L* ^4 P0 {. S       upp_buffer_a = 0xDEAD;+ p9 M$ {3 d* Q. a( }6 r
    }
3 e# ~) x% n! ^, J/ j1 o
& l3 ~9 U+ c  e    //for(i=0;i<1024;i++)* _, T9 K. J) Q  I
    //    temp=0;
) Z9 b( N' [9 H; |5 X; ?7 P# f
9 ?! w/ p" e  [. @    //UPPReset();6 r9 |6 f1 U7 S+ {$ S: Z
    /*启动UPP DMA传输*/
7 N3 `" v" v5 c5 o) |- W. T- A    UARTPuts("upp_prog_dma_i\n",-2);
. P  P- _+ g" Z0 e3 L# d    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 F5 l2 a2 e7 }. |- I5 o
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# S! s) u) T' y    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 q5 J+ W" m9 g  W% h  ^% c
7 U' h  U% e1 o/ O! A) f$ J    UARTPuts("upp_prog_dma_i\n",-2);
! d! R) u$ P0 V3 k# A( |8 a- g3 d    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) ]# G/ F' B7 O6 T. {    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 |' L; f" \+ y& Z    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% E8 a. V, T; L2 j9 ^

! w3 x4 j  e- ^& v. V    /*等待UPP传输完毕*/
' i4 w6 {" U. k4 B& U$ v    //i=0;6 F/ _! J3 u3 d2 K+ W0 a. J' \3 r
    //j=0;# S9 y! S* R+ k- F4 \6 A; C
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- q# z. a, h0 r$ l! n" [& K3 f/ r9 h    {
, E) g3 B# O& O6 }        /*  测试UPP传输的同时操作普通DDR数据
5 p/ N2 j' i  s  k3 v& `3 Z4 X/ |# C/ w        temp=i;. z% Z" B3 A5 q+ ?) Z. }
        i++;1 S* n1 W$ E! R/ H- ~( k
        if(i==1024)
( @9 A5 N) I+ |8 ]        {
8 J4 w( e5 t  V            i=0;9 \- ~  q4 d' g8 o, A/ O) U9 u
            j++;: E9 u' x' v8 c% b: T
        }$ i+ x; Y, Z: Y. e/ T' g& k
        */
3 I% w3 H! d- s$ E( I9 h( |$ v( h3 v2 V* ]' n# ^6 Q
       asm(" nop");
, n. L% h" x( J0 i0 L
2 h" j; y7 x% ], g       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 H* G7 V2 |5 s8 Q    }- \3 h" D- [7 @" c4 J5 ?
- |' L6 _/ {  [0 A7 W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/& b9 f$ d$ b. R4 g' F0 C
    //UARTprintf( "i=%d\n",i);
/ z/ |' Y/ _6 G* t+ a" k- j: b& }    //UARTprintf( "j=%d\n",j);& q: f* z. p! n! M! g
    UARTPuts("Data mismatch in buffers.\n",-2);
$ S2 H* [3 M! B    if (upp_interrupt_count == 2 && upp_error_count == 0)' `( G) |5 u. s9 l1 g
    {
0 d( ]+ u5 J, m6 J7 E' h3 u        for (i = 0; i<upp_frame_size; i++)
0 e2 J& Y1 X' W! H/ I        {
% H7 d1 H& o+ n* i  S            if (upp_buffer_a != upp_buffer_b)
: \% L( _0 r: O2 P8 S* t  s            {9 H" ?" A. N) \, m
                upp_error_count++;
# \3 p; h( {  m2 ^            }
6 J* C) g  `. L$ i: \& t! h5 ]        }
# Q4 }/ q! o" M; Z  ~& J    }# ~, P. a1 C/ {' k% D
; Z  T' L, Z& w1 v% l; p! ~
    /* 报告通信结果*/
, y5 @# W& m! [2 d1 Z; u    if(upp_error_count != 0)5 j5 ^3 l2 f2 m8 }+ @
        UARTprintf( "upp_error_count=%d\n",upp_error_count);' f' r8 l0 t/ _7 m- V+ K8 u
    else0 s6 e  [) X. g0 ?4 _% k
        UARTPuts("uPP transfers complete!\n",-2);
$ h# w9 R$ J5 X7 T4 S9 @6 A7 a& [! E+ a6 [1 J( d
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 D; K( d) ?4 \& G( w7 ^9 B1 _    UARTGets(ch,2);  P7 l$ A( T# `' c0 E$ d6 V* r1 U
    UARTPuts("\n", -2);
, r4 k# H" u$ W. g! c' l) g$ P% u
* J) B/ |7 O- W    if(ch[0] == 'y')- h: X4 \5 }2 J7 w: m9 ?
    {5 N( Z) d! E7 k  V$ v. R3 q* y" \
        /*打印全部读到的数据*/' E8 S" l: N, r+ O( a
        for(i=0; i<upp_frame_size; )
8 s" N" p- q9 w$ N) {6 [        {
6 w4 b$ b$ h% L5 G" C            for(j=0; j<5; j++)
" {& ^- `# O/ U            {; ^& [# n/ W3 ^
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);1 h0 _: g0 M3 K" I7 u+ e
                i++;% B% j: k7 i" y* N. P7 F+ M% a( C
                //if(i >= 4096)% d* v( E% f$ R) @! m5 S
                //    break;
' S/ N6 ~* R& A- u
4 z& g# R# q0 p            }
; l# [8 E, S. M! i) k$ J            UARTPuts("\n",-2);
. N' c, H7 ]" F" h        }7 Z# g% z3 }( g
    }4 w4 u- ^1 A) o% {$ x9 I/ V
. d* W& q! P9 Y0 y) F
}

$ j0 r% B% M' j9 C- z

+ Y+ k% R" z. O) z- M1 \* a  y' }; w. b+ I

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( A8 o( U- x1 A

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 \9 I4 {( J4 O. U





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