嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; V& Z: c7 ~, A9 r3 X7 Y+ k
Void UPP_TASK(Void); l2 Q( K7 K' h. C' c
{, Z$ U9 f* T! d
- k& ]8 t% Q! D8 U' _1 V
    int i,j,k,target_int_count=2;
( [3 `1 A& ~7 ~5 a% o0 v    char ch[2];
$ O: I7 u" Q% z; E. h+ i6 e( `$ q' H6 q' }2 K: g

; l" g2 [! W2 B. c
$ t  v8 P& Z( b' p3 E7 J: w    upp_interrupt_count  = 0;
- J8 n0 y9 ?5 ^0 V, g1 d0 c8 L    upp_error_count = 0;2 E: W7 k) k/ Y  A

. }$ U& \7 H3 V2 d    UARTPuts("\tResetting uPP buffers...\r\n",-2);% @0 ?% u; A' n2 I; W
    // Initialize data buffers
% \# ?# X/ @- A1 g, q    for (i = 0; i < upp_frame_size; i++)
/ r1 \$ E" H$ C3 ~+ D* _) [    {
$ u5 N/ \7 r4 N       upp_buffer_b =i;# B1 k4 l& v, b" G" u
       upp_buffer_a = 0xDEAD;
' y, a  C9 _, V9 z    }
  P, |4 A6 S$ _- t4 b
, e5 N1 r5 \- p( V, Y+ Q    //for(i=0;i<1024;i++)
4 _3 t3 b, V* U+ A3 u+ W    //    temp=0;
- f# M7 _8 m9 c/ J% v( J) V' h8 h2 d2 x4 u% F/ A: u. V1 l
    //UPPReset();
( q3 Z" U/ ]+ k/ g    /*启动UPP DMA传输*/' M8 ^4 Y* c% O3 [+ s( ?1 T
    UARTPuts("upp_prog_dma_i\n",-2);
5 d* o3 x* T/ o/ ]& M' J    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% l! _3 o" ~. Q. W8 b    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, j9 S9 K3 t; s8 S6 `- m    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- K% F9 f5 x. |" H# e1 @( g0 r* H' t; `
    UARTPuts("upp_prog_dma_i\n",-2);
7 s6 ^0 c# j/ F    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. |6 X' [0 |8 M4 K! g( l! U7 A
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 j; W% D& p+ I2 |( @6 ^    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% g4 p; K+ D, t9 M5 ^3 V
) {( {$ A+ u5 Y0 ?; r2 m    /*等待UPP传输完毕*/
# K5 w1 C' W3 _4 W% R  ?5 V, H6 z2 ]    //i=0;0 {0 W# {% d7 i0 \
    //j=0;
' f' Q4 T: \: c1 I; E    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! z+ o" V/ B5 d2 b7 d
    {# {$ A0 x% u: U9 S: Q* K
        /*  测试UPP传输的同时操作普通DDR数据
0 R  I$ R" U7 u! Y        temp=i;+ Y# ]* g; P' T9 c* E0 k* ?
        i++;2 x; Q! t& A! R8 {. E
        if(i==1024): ?" G+ K, s4 m
        {, p" x% s% Y) c3 o& a4 P& X# Z
            i=0;
6 x' U) a$ O) \" H7 H            j++;
6 u/ H8 \2 R7 [( l2 s        }
( G4 a$ |( q" i- J" y! D2 a# T        */
% Q6 K" D5 ^( {5 h2 W1 }5 L' i) A& a4 C+ w( ~
       asm(" nop");
$ i$ S3 o* O! z9 a0 I0 m& N8 T; [& K/ L* a2 ?
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 W& O- Z- n! W
    }
/ ~0 Q2 u6 u; y% d% n' w0 N  C9 ~6 Q/ v9 O, e5 o
    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 m* @1 d5 Q" u
    //UARTprintf( "i=%d\n",i);5 B# I7 O; _# G. Z$ _2 B
    //UARTprintf( "j=%d\n",j);
' O* M, w1 f/ u! y( R$ m    UARTPuts("Data mismatch in buffers.\n",-2);+ `8 R: k- |, B: Y* ?8 K. {
    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 i) u2 h! h( ]+ `& W4 W/ o    {
* B, y9 a! C! |& _        for (i = 0; i<upp_frame_size; i++)+ S3 R) o  Q6 Y; g0 ~- [
        {
$ @) D( w$ e( }4 C( ^3 M8 _            if (upp_buffer_a != upp_buffer_b)
, B7 J" \& ^) {" g% r            {, U  k) O' l, C& |% i
                upp_error_count++;
# Y; a# D/ v/ T, P6 d7 c            }
1 s% t0 K  H' j& u8 Q        }: z8 H, K: w. q
    }5 R" @3 N# H) X6 W6 Y1 f
$ j6 s: h, {6 |
    /* 报告通信结果*/
- T6 A% _9 J$ E/ f  B8 [    if(upp_error_count != 0)
* h2 E% p9 u% {' d" e9 c        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# R+ _$ Q$ I9 ^8 T    else" ^/ ^; x5 V+ \0 B. t, j! ^
        UARTPuts("uPP transfers complete!\n",-2);) e4 Y+ ?3 R  m& L4 F

% |* f6 Y9 R& _, X7 m    UARTPuts("Do you want to print all the data?(y/n)   ",-2);: H- R) g* K! p4 A+ k' t7 p
    UARTGets(ch,2);% P# G) ]5 ]' b  |0 w
    UARTPuts("\n", -2);2 N0 D6 |2 {1 s( Z" _9 @3 E
6 a2 R' k6 K8 \8 i
    if(ch[0] == 'y')
& ]$ o  ?: m$ B! c& y& y    {
4 N' S+ V, H8 Z4 E        /*打印全部读到的数据*/) `- e3 `. Y( j( p2 |, J
        for(i=0; i<upp_frame_size; )9 O, z, x# r5 O
        {: V6 L+ h1 ~6 c( c
            for(j=0; j<5; j++)
& E2 ~" V' R; w1 }% b: m. h6 ?            {
2 @7 v) b' i$ f1 G                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) \: u7 n6 F1 {6 x4 q
                i++;. K1 \; s, R$ w, l/ K9 x- x! U
                //if(i >= 4096)
" E% d8 l! ?! T3 q# |- l9 [0 I                //    break;
  l0 H% ?) m9 P7 j- f6 U7 J. e( T0 l9 r4 u  x" B0 ~
            }
3 f2 p3 {: ?4 ^3 v" I            UARTPuts("\n",-2);
( y7 [( S" t: W0 K" c        }
8 j  B; v) A  Z    }
- a* ^: F! P+ j, _. F- ~3 w% U! [; J( O) b9 m/ p
}
% i/ `4 l" j- g2 A
5 l5 A& [0 A: _; l: m) }7 Y

* }1 _! x: L$ i5 ]
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- j1 o  \/ B& |6 H! ]/ ?
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 E7 L2 X9 o" u. K" s7 j2 `; d




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