嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; x/ K$ ?  P$ B! ]7 B
Void UPP_TASK(Void)
: X" l4 C3 ^7 A# N3 y4 n# p{2 k( t8 w' L6 y2 C# c" D5 ?( J
# W' g2 q0 l( P6 V  L
    int i,j,k,target_int_count=2;
9 Y, {: @( `  l8 o; a$ N    char ch[2];& {/ {  h" g! O. Q9 [  M8 j0 [9 C: K

( c( B5 _, o6 b! @1 p  {* z$ s+ J# b! ?: V6 H% S% I) `

, z, Q) N' m* y. z* W    upp_interrupt_count  = 0;" {6 I0 c9 y+ E4 |9 J8 N7 X3 ?
    upp_error_count = 0;
0 _8 \. ?8 |) }& E# |; x. A  x0 f3 n5 ^
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 v5 X* G, T; B6 o" r6 K5 o    // Initialize data buffers
: @$ l: g% D! W    for (i = 0; i < upp_frame_size; i++)0 k2 ]* b2 W- ~
    {
/ C- \. H  Q2 V! y* P4 ]+ Y       upp_buffer_b =i;
% V! `" W9 W) a# {       upp_buffer_a = 0xDEAD;" s* y0 l4 D% m) j
    }) O" P9 {5 i) Z" t# e6 I& n8 n$ y! m

0 }1 ]2 l9 N3 E1 F$ y    //for(i=0;i<1024;i++)
# R$ z5 M% }- v0 w    //    temp=0;
# r, Q; \. ?* h; Q( ], e  ~7 l/ j' q  x
    //UPPReset();5 M9 P9 X1 U, F' w2 B8 m
    /*启动UPP DMA传输*/& n+ h6 D+ G: f5 B: I, x" ^3 s
    UARTPuts("upp_prog_dma_i\n",-2);
4 o6 o3 }* I- x5 b! O5 X    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ u9 v3 j. O  U+ P5 |    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 x0 [: r1 N7 |8 g8 t! m8 |8 b
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% t) j" w  x% }$ K) d, q' i! |5 `
  i5 ?$ v* D  K  i# j" N/ N
    UARTPuts("upp_prog_dma_i\n",-2);0 S; O- F, V# H. b
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 ?; ~6 g% a) t# x7 |
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ c# O$ [" S+ m3 A/ b7 d. \, N    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! y7 Z0 v; c% N( w$ v

3 j! V- j% `) M% r6 O3 }2 f1 X# B    /*等待UPP传输完毕*/3 T& n9 i3 Q8 _7 @  q! v/ K1 L
    //i=0;- c+ H% p, q4 o0 A; p
    //j=0;
/ ^9 E8 A1 b% t- ^/ j6 @( V* P; _    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 H2 K9 [) R7 }3 j  N. N    {
; y+ m" a+ t, f( _8 H% T0 ^        /*  测试UPP传输的同时操作普通DDR数据9 u1 R7 J0 b3 U: `5 S
        temp=i;5 b. `+ P" B- z1 s3 w
        i++;0 @! ?! a0 S, v6 _
        if(i==1024)& g5 X7 x7 `) Q
        {
$ ]' D5 s! @% N; B            i=0;
5 E* w$ {& H) F; G  `            j++;
$ D7 j+ L$ b3 X+ K8 Z        }
& @1 {, ?/ E8 W* k% D; i& z0 z8 D, ^  L        */
/ |. D- ?. U2 B. Q7 \8 e, S  o3 |9 ]1 Y1 p
       asm(" nop");$ ^! D/ o8 w/ R) r
- u9 |7 `+ u4 }$ w; F
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ C0 {" j9 t8 e, {/ Z
    }
7 k- N& x) n, a. ^0 D
7 ]1 ]4 K" c3 ^4 T# L+ |, U: r    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* a  Z. m& m4 f  w, `; l' c    //UARTprintf( "i=%d\n",i);
2 T, Z3 s* B: g, \/ `, J, E$ f: e    //UARTprintf( "j=%d\n",j);
; }2 Z! r, T! v- l9 M7 Q    UARTPuts("Data mismatch in buffers.\n",-2);
6 m9 ?7 Q, J8 ^    if (upp_interrupt_count == 2 && upp_error_count == 0)
' u. T% s. ~/ ?- ^2 V    {
% f$ U' r$ I& p) O$ n8 H        for (i = 0; i<upp_frame_size; i++)
6 G# Q+ E( O  d! G$ C6 d0 x2 K        {
8 h9 t4 L1 ?* O4 ^' a            if (upp_buffer_a != upp_buffer_b)" X+ y! a1 r- B: o: H6 p( m; b
            {
  i( q# F5 r# M7 h' p                upp_error_count++;
: E9 Q- L( v5 i' A6 u& W            }. i; _' |: h+ X2 s7 x! U
        }! G# i1 }  o! G3 g. }
    }
) U6 y$ |# L( I% v2 [; m) t- [  {
    /* 报告通信结果*/9 x2 Q% z- t$ [: F( T1 ^
    if(upp_error_count != 0)
9 H; V' d- x- C# E" g& M5 h6 g        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; w9 `+ _# J6 R; I% P6 {3 `    else* t& ]" X4 P. l$ E
        UARTPuts("uPP transfers complete!\n",-2);
4 g! K. {. e; w" }( \- r# Q1 k; j, `$ j  O* d+ ?
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);& ~, j8 C' U+ ]* ]% _
    UARTGets(ch,2);
. b% k& e4 K" l( o& E6 A  Z    UARTPuts("\n", -2);
& N% K3 O& X0 J9 V5 y1 ]4 o- x3 R5 V6 u
    if(ch[0] == 'y')0 }, T0 S) Z2 i, |+ [) n$ j) w
    {" l  ?; B) q; E3 S8 L2 D& l
        /*打印全部读到的数据*/
1 Z, }. t3 w! Z( U        for(i=0; i<upp_frame_size; )
/ E- X; c( V& L* ^        {
- f# ^- d- _3 ]            for(j=0; j<5; j++)5 b, c) K5 g5 P  r5 B
            {4 {+ E6 V2 }1 |: x; l
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ N! c6 ~! _" \+ Q4 q
                i++;% k3 M! g0 w1 V4 `$ Z1 }% k
                //if(i >= 4096)  B) I" A: M/ F2 Y. q
                //    break;3 U' m; n# `3 ?4 z

7 o: X5 s' O. W3 j5 f: S            }4 X, S/ Y; s. [/ J: j- p8 I
            UARTPuts("\n",-2);
/ X4 q, L4 o# m- H- R2 @        }
0 l7 T1 N; K' C    }
3 n! @& d4 E+ i  v, m; u2 `. B1 j5 T" L, S$ J. H( q
}

! f: F( }" w8 _% |, l/ y* Q

$ X+ q# m# j& c; u1 U/ s' j- H9 ?0 C+ ?7 ^: v: {" n

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。; B& F4 c! o9 s% E( k* d- ~4 ~. X5 u$ m

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" K" I7 v. M0 Y9 }+ ~7 k# {* p% O) D





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