嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' d" R3 |# f, O! g* c4 T% T- M
Void UPP_TASK(Void)# Y! h3 }" G' d! S& l
{
  i3 W& p. e- Y* H: z' M: e: N+ B; I! f& t
    int i,j,k,target_int_count=2;' e7 f2 w1 u2 o- c) q$ p
    char ch[2];  e% a5 |: x* g! k4 [8 |
1 ]: p! L- v+ s, {! h/ |

* A; N# M% v1 I
0 l- e* i: H1 O3 D    upp_interrupt_count  = 0;
" ?7 u! D. H* ^3 g% V    upp_error_count = 0;
1 X7 y9 s6 k* F6 t3 c+ F3 `0 {
- H" b! n$ ^- S  Q. j8 d8 S    UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 g! Q, t* b3 S8 P/ k$ w8 n    // Initialize data buffers
6 {5 P2 F9 Y8 Q" D* O2 K1 y) K    for (i = 0; i < upp_frame_size; i++)
/ e5 }% f6 u# Z; N    {
( C& r7 C/ f2 B2 M7 V4 p! _/ u       upp_buffer_b =i;5 D" ^; c2 v  f: o; a
       upp_buffer_a = 0xDEAD;
( E% \0 I7 F8 ^    }
9 V4 A7 ~2 X0 S/ p0 `8 I9 f# _  d" `* _* h+ D4 K! y: L
    //for(i=0;i<1024;i++)
7 ?! ^8 e8 P1 @9 B4 A    //    temp=0;' P/ L, U) Y& J7 B/ s& I: J6 T
# Q3 k, W6 r; I6 E) ?% I& O
    //UPPReset();" S, Q; O5 J( g5 o, W( U8 L
    /*启动UPP DMA传输*/4 G: o# D' Y3 [+ d
    UARTPuts("upp_prog_dma_i\n",-2);
  u; ^1 o. h8 S3 l. `4 u- f* e    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# w' X9 t% d+ \& ]" r# ?3 p5 ]- U    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 X$ E* p4 Y7 p9 `0 Y0 I; x& J3 n
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 ]1 }6 u9 I- z4 T/ y

8 ]. j4 w0 W1 v3 D2 F+ T& U    UARTPuts("upp_prog_dma_i\n",-2);
6 F! _& L. {) c8 H: P0 Y% d5 g    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% m; }- R9 Y5 d. S- Z- u
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 r. k* [- k6 a" _, v; Y    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- U9 n' n* Z5 O3 R
5 }; i7 p5 I, S" F3 E& X) A4 e    /*等待UPP传输完毕*// \6 V4 w: i5 F4 X& }. f
    //i=0;
/ I3 N) W+ i  e$ z    //j=0;* ~& P" D& v5 T$ |: w% u; l
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! h- u% e# Q' B, |- ~' ]1 w    {
9 T; |$ @4 |- }9 W) v! Y        /*  测试UPP传输的同时操作普通DDR数据
" X& w) I5 C% g5 [; g, @& e% x1 k" W        temp=i;
9 I% c# F2 |1 D. h6 p. O        i++;9 x' r, P" H$ g5 K# U" l8 k1 L" h
        if(i==1024)6 b0 K3 N( |% o
        {- C' o* z; z) i6 N7 k
            i=0;
/ q, m8 t+ L! S5 h5 H8 I. ^! F1 x            j++;
! U! p2 @# B7 a7 ?2 M/ \        }& |! v$ L/ U4 I% N1 Y
        */4 h9 a' O- @( U; q& X$ g5 c% K
7 ~% p5 K7 R, v8 t9 ~: t' A
       asm(" nop");/ w, |* {  z7 q4 l* K/ n2 z4 y) I

# k4 |- t9 J! J1 ~. e) V9 K       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 `! s3 Z( G2 E6 C7 i
    }/ f$ n$ c8 x% J+ i  ?( s
# p/ q1 n7 d3 m/ S6 {: \
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* c4 E6 @- W/ {* Z, H
    //UARTprintf( "i=%d\n",i);* p  S6 ^* W" W: O( [! f7 s  G6 A4 g: ~
    //UARTprintf( "j=%d\n",j);
6 r0 H$ E, E0 n: {. Z    UARTPuts("Data mismatch in buffers.\n",-2);
2 W% r& u, s& d3 y" r. ?" d    if (upp_interrupt_count == 2 && upp_error_count == 0)4 z2 r9 [: s* ~8 c
    {$ z1 w  N* l& N; k* r* z
        for (i = 0; i<upp_frame_size; i++)( G7 f& w0 p: D9 ~7 O5 b3 k
        {4 G% S5 ?: G5 |
            if (upp_buffer_a != upp_buffer_b)( e8 r1 z' d/ t6 o1 x) @
            {, u1 O7 y' Y6 S/ q6 H' B
                upp_error_count++;
: F) m/ b5 v3 e; Y3 U            }
& j: V3 T$ }- |1 I" i        }
7 R* T4 x. Y, n. }  ]$ K8 o. b    }8 L, C% W9 A1 t' d; X# ~

, O# ?" h+ S4 ]( M& ~( Q. E    /* 报告通信结果*/; U5 Q) |" \$ p# h/ l+ b6 p; l
    if(upp_error_count != 0)
' i( ]- u* x9 r* m$ O# `        UARTprintf( "upp_error_count=%d\n",upp_error_count);! O' o# \9 k6 n5 }& T8 R
    else
' E5 e  L4 x1 o3 c* P        UARTPuts("uPP transfers complete!\n",-2);
2 x. Q- j5 X1 h- \2 u5 S
5 a3 o  S9 \/ b# R/ T0 D5 L* W    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
1 _& L5 k0 `- M1 o0 N+ h    UARTGets(ch,2);
" g! k! o) G' v/ ?( B& w# x    UARTPuts("\n", -2);
7 {6 h" z6 q; L/ r2 ^4 a3 d! `
2 f' i: H. H& u% W; W    if(ch[0] == 'y')3 b9 }5 m4 p. H. w
    {  l5 I0 k, |" ]3 A3 p
        /*打印全部读到的数据*/+ X6 Q1 @# n0 q& @4 Z( o# ~- \
        for(i=0; i<upp_frame_size; )% ?% m  D* {" Q# Q+ G
        {4 L1 `, X- u4 x% ^, {9 y& l  j+ y
            for(j=0; j<5; j++)( q: g/ g9 e! o7 e
            {& {% b- ~) d) Y. Q( [, u& Q% w' c3 U
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. I+ i) _" K8 R1 F, ]
                i++;
0 e( `/ p0 D  {                //if(i >= 4096)
" s3 H+ {9 f! C1 o5 o% c* o- [) v                //    break;
* L! _9 J8 F' j) D" g9 @; B
5 B! Y! n- C6 s( _            }
/ ]/ @- \4 B% \# P            UARTPuts("\n",-2);
# \' n% A9 P: C        }
1 P5 f; p- Z2 T3 o5 Y: A0 \    }
" n1 C" }  s& t. k1 E# k' L
, W- v& A5 n- y: b}

( J0 v' A9 d6 v0 h
' a* V9 h0 [, ^9 Y6 x$ B

' `% c8 W& N+ i4 k6 [/ k
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. l8 ]2 a- g, \/ E

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 t0 G/ ?  o$ }





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