嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 f: b  p' y$ s* ?, A
Void UPP_TASK(Void)* h3 p# J4 c2 H- j+ B8 n- |
{3 E4 ?8 k+ n) M
7 G) o. i# k7 H' N$ j2 G1 \
    int i,j,k,target_int_count=2;
" O1 h" }) O1 ^- e) X5 o: K    char ch[2];! y+ ?  l% ]2 [4 l+ I1 z0 [% ^

' t3 m' ^& T; C* R. h
/ q# J8 q# V( a0 T. K8 u4 a) K9 ?6 W0 @1 K: B% Q' d' T) U' \0 i4 k2 b
    upp_interrupt_count  = 0;
/ k7 J3 J% {, |, a4 w* L# A    upp_error_count = 0;
2 n/ H. X6 u& ]$ w# T
2 Y" ?" C4 {7 q* r9 {3 i% T: y    UARTPuts("\tResetting uPP buffers...\r\n",-2);& U: K. H' l/ B* ~
    // Initialize data buffers
) a1 c' Z$ e- a. a, K" T; Y    for (i = 0; i < upp_frame_size; i++)
6 Y- B  X# q5 p' t: |2 K    {% f2 {' p" J1 ^) n) B; h
       upp_buffer_b =i;# e+ X8 @$ `( e
       upp_buffer_a = 0xDEAD;
# _4 h' O3 O) R+ Y" h    }
& C; H) z* ]$ I, n3 H$ @+ o0 E* f# r' ^8 z
    //for(i=0;i<1024;i++)
! i- D+ d7 p# P9 E7 R/ s    //    temp=0;
2 A$ c3 n8 n  N) P2 }& ]. i* G; Z4 T- i8 P9 t0 L& \( }, L
    //UPPReset();
% f8 B0 z2 s  H' a4 H    /*启动UPP DMA传输*/
& c+ n' k' m8 h! n9 \8 X* p    UARTPuts("upp_prog_dma_i\n",-2);
3 a/ R. u' n8 l. {) M    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ A% m& N2 T% j2 E/ W
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, g0 A  H( f9 Q! m; S- _    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% g) u+ u- \7 P; r  v" }+ K; ?+ H/ T' U

8 {1 M% d; P' A: x9 R    UARTPuts("upp_prog_dma_i\n",-2);8 C9 C: d# B. |7 c, l
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 g9 |. Z4 E# _
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! Z' g- l; ^. V    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 b. R  {2 |3 R1 U9 j* k

6 |/ l1 m& ~. z+ ~& P4 @; P    /*等待UPP传输完毕*/3 P3 U- Y+ W" H$ e- `6 J! T* K0 Y
    //i=0;
) N4 a3 Y. K" i( N9 n$ Q. t6 _! E5 u    //j=0;& _- K, l/ E( ~7 s
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ c7 y7 U( O" A' f    {* ?1 N5 |, H* i) ]
        /*  测试UPP传输的同时操作普通DDR数据$ _+ E2 [" K6 H; V7 F; e
        temp=i;
) n+ m: U  \$ o5 Q' L        i++;
" o0 q" z! |' u% u# `        if(i==1024)( k3 C- o+ x; w6 y9 r" V
        {/ B6 G0 g1 i' S9 M7 b! W. A2 o
            i=0;6 a- H: M' \7 u4 Q/ V
            j++;
( H* a+ s) J" K; r0 J        }  z: r* T4 o4 X) t* @
        */. g  l* y2 [$ o1 `2 o% F8 J+ |9 a0 U0 W4 [

3 S2 ~; N4 u) _# D" N  X3 Q5 ?       asm(" nop");
0 I# _' U2 c; F$ Y/ L9 z2 @( R, V- t4 c9 `1 H8 L
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  |! N$ m4 k. F! F. c    }
+ Q  C, B7 N9 F' K* j) W& J1 @4 b. v) ?8 i# b7 a8 P/ i6 G
    /*检查UPP传输的数据是否正确 (loopback modes only)*/; z2 b+ n3 b! T$ `
    //UARTprintf( "i=%d\n",i);* T/ {5 e# F1 I( ~. D
    //UARTprintf( "j=%d\n",j);- A" J# z, L0 m9 |3 g1 c  P
    UARTPuts("Data mismatch in buffers.\n",-2);3 I3 ^3 _8 W5 D' e5 e& m) [. {! m
    if (upp_interrupt_count == 2 && upp_error_count == 0)
+ {9 E( n  f, S3 ]- N+ n8 w9 K    {- }8 Q; l6 D7 ~& b0 E. T% p
        for (i = 0; i<upp_frame_size; i++)
3 ]' f. P( t/ q+ n% n        {
: B- z+ A; `2 P1 e            if (upp_buffer_a != upp_buffer_b)
9 k2 n9 K2 {0 z9 B/ S+ f0 \- g            {
3 F7 Y8 `/ v! z3 N2 y                upp_error_count++;1 E& U7 s0 U# B9 Z& j) l
            }0 f2 L( `, J9 c! S9 v% p' W
        }* z$ V8 I! y  l
    }
' B9 F9 X/ n" V2 e2 W8 E9 K9 O- ^+ g8 ~6 V2 o
    /* 报告通信结果*/
: b  A* B9 K8 i. m9 U' u( n    if(upp_error_count != 0)% x( F/ E$ D% m$ @
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 J/ V( W* N4 ?4 w    else
9 y9 e' V& ~7 N        UARTPuts("uPP transfers complete!\n",-2);9 V: [% q/ `: G* K* }/ W- h
  o; r4 O. I( z' P# R
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) O6 o- }! j, G    UARTGets(ch,2);1 j/ {* ?$ n( D$ `. v
    UARTPuts("\n", -2);
' Z+ d! A# Y7 [3 U) |1 n  G" P& u" v; \
    if(ch[0] == 'y')
4 m1 `2 ]2 ]2 n3 S9 w4 a    {0 d3 I0 ], w: \) [' R* H
        /*打印全部读到的数据*/2 W; e5 v1 X* o+ Q8 k1 @: S
        for(i=0; i<upp_frame_size; )
+ ?- }# t2 k/ u* Y1 Y        {4 ^  Q% t% Z: B% X% P. r
            for(j=0; j<5; j++)
, M( _$ e$ o7 X1 \8 L            {
/ ]! S$ Q3 `7 s" B- ?* n9 f                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);5 p6 w  g) ~; t
                i++;* ~6 H& f. q1 p% T* {$ {
                //if(i >= 4096)
8 k! g# B7 l5 A6 o1 d# N                //    break;& ~$ M4 j7 f' E- Q
0 H) {  M$ _4 [0 j/ m- l
            }7 a+ e! Y, h- h# B" i
            UARTPuts("\n",-2);
" }: S6 E, b0 ^        }
7 U( }* t* g, o; l+ e    }: [# k. E0 Q1 |4 C2 K2 x

! R& \$ y3 \5 P}

: m, g$ ~' s8 w2 C3 `

- e. Y: \' l( m) H; }1 n6 w9 `+ s/ J8 y9 O6 r# {" _, L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 ?  D& X( l' s) p' s8 s
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# A) Q; }" \3 @8 J2 T' R* {8 e7 Q





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