嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 b, Z' K5 a% [+ A3 Z8 B' Y; W, {3 y
Void UPP_TASK(Void)( L6 j: K6 H. x) f
{' f3 R* P1 e: i* ]

8 j" }( c+ u0 ]2 L7 l    int i,j,k,target_int_count=2;
" J6 k- \+ y- Z' ^    char ch[2];
9 {  G- e0 S$ |! Z9 F9 n
/ t, Z3 r* {1 b- X" ]4 R7 K
' V: `6 q) v& K! H+ @
9 E9 N: K3 Q: s( M2 t    upp_interrupt_count  = 0;5 ^# z0 y7 z' F0 J
    upp_error_count = 0;- n) M3 _7 W4 @( t6 k7 J

% ]3 s7 \( E) l3 @' b' ?& ?    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" b. s, }- i: P" Y    // Initialize data buffers
0 G: f& X! b7 S5 M" N4 n    for (i = 0; i < upp_frame_size; i++)' V: m5 r; c) T/ M) H% j; M3 @! F4 `
    {
3 ]) }4 ]8 c2 |- j" _       upp_buffer_b =i;
9 y& G' {; P* F/ F" ]1 V       upp_buffer_a = 0xDEAD;
4 V8 g) z$ P& W! I. I* h3 C    }
9 k% P" _9 [' Z- A& D! ]: b' B# Q% G6 Y3 ~
    //for(i=0;i<1024;i++)
) v6 j0 V$ f+ g; v2 G( P# R    //    temp=0;0 b+ c* ]. I  L
2 i, K' M  e- A% ~! T. @$ ^
    //UPPReset();
* |( Z$ p! i) i0 R6 M" F    /*启动UPP DMA传输*/5 s" D% v. Q2 a# A) a
    UARTPuts("upp_prog_dma_i\n",-2);
6 r& H) V8 I! p7 |6 {: W. t    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' k0 l- u1 \- ]6 I6 {0 J  }    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 y: R( Q& j5 w* t7 z& h
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% Q  d& B' \5 M8 L! H8 p3 E
" j7 I" k4 n# q3 S" u
    UARTPuts("upp_prog_dma_i\n",-2);  H1 {2 _, A" ]: S7 c+ O  A/ J
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ J  A! u# }6 P& k3 h2 e
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! O9 H! y0 }  o( e( v
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: _$ }! G4 Z7 d* }- Y

4 i, d. Q( {0 p# C2 O    /*等待UPP传输完毕*/
$ Z- a4 f& |0 k) ]" }    //i=0;3 f& _/ ^7 P1 z" [
    //j=0;+ n. ^0 m- [  `: N
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( \/ ?& w' F, c    {
4 \! T' E/ F( x0 O4 |" ^        /*  测试UPP传输的同时操作普通DDR数据7 Q- i+ [/ _) M3 s" Q0 ]" L6 J
        temp=i;
1 i3 U' ?$ s* C- ?" ]; {+ N; o& n        i++;% A: I! ?" `" W
        if(i==1024)
" ]9 I5 L! T+ @, m6 H        {) u/ _0 h1 k$ N. E+ M# m
            i=0;
) [% ?+ E. K& [( a/ d            j++;0 k) a  e" W: G
        }9 r  |# A4 ?0 v# \( V, y+ W8 n
        */
0 r! T$ u2 Y( U6 _* L
: t  a) t. O$ |1 {# M! j: H, R  O" R       asm(" nop");
$ G+ S3 R5 e) {! d6 H9 R8 G: Q; t" P& f* A; K, p# n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 a0 ~3 f! D- A    }
% X+ y; U" w- g2 [6 d9 A% t( k& i6 F" z* o" G) X) V  e1 t9 P
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( T+ \( L4 j, z% ]' V! D1 R6 W0 X6 L    //UARTprintf( "i=%d\n",i);/ d- c9 ]2 D$ T3 g2 x4 b
    //UARTprintf( "j=%d\n",j);* Y. o3 d' Q. r  F) o
    UARTPuts("Data mismatch in buffers.\n",-2);
! `  Z- ~9 ^/ m' ^    if (upp_interrupt_count == 2 && upp_error_count == 0)7 m. Y, Z* Y/ v( Y9 s
    {
2 T3 c+ d  g0 W) U% U. |6 b        for (i = 0; i<upp_frame_size; i++)
3 K" j3 P" N) U% i- l. l) H! y        {/ ?4 _8 }' T. V* `* h
            if (upp_buffer_a != upp_buffer_b)
$ F: M( x- H0 o4 h            {
: r0 ?3 Z8 n7 a; R3 Y: c                upp_error_count++;
8 w$ k! [* a+ S/ F! B3 [            }6 p& [/ }/ o; @( |) G
        }! u2 c* o7 B3 D) {
    }: a/ D% u; C, ^# R( U4 k4 v) Y& D
; H7 @8 Y0 c/ f& N% v2 P
    /* 报告通信结果*/
5 k2 ^6 b+ |4 ^, A# d: X6 A; Q* h; G    if(upp_error_count != 0)
) o& W0 Q& s& `6 a        UARTprintf( "upp_error_count=%d\n",upp_error_count);# b4 s, L% U: K! H) _7 W$ f' f
    else$ K& x0 J1 j/ ]7 `
        UARTPuts("uPP transfers complete!\n",-2);/ N8 q: d( c; o4 o+ [2 F3 g
3 ?# |, r/ X) p& i; m) q+ s% j5 x
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* p9 J% }7 q0 ~7 ?( L    UARTGets(ch,2);) a( ^! O* z6 j; l  w6 j
    UARTPuts("\n", -2);! Y; `4 d0 C) x8 \0 C

4 i4 p  `( C4 P$ K$ O2 k& }    if(ch[0] == 'y')
5 o8 d  T- ]) K% k4 d$ v% j    {6 _6 _* I9 A) ]
        /*打印全部读到的数据*/
2 L$ O" ]2 [* z2 ^6 ^        for(i=0; i<upp_frame_size; )9 ^9 g% Q! c. I8 F4 ^
        {
# \' s; s/ \6 @' D            for(j=0; j<5; j++)
' f2 |& V- D* Y' d& a6 ~            {
0 g( ]( L: j8 d$ k' s# i                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) K- S) M" I  G) K. G( n
                i++;* a4 s* H" q) x, H. p! e
                //if(i >= 4096)) R+ l1 i" j5 l$ q" c( X0 B
                //    break;
: P. `8 `' {' i) q+ q2 m- F8 B( U% I: X/ f& Y$ s( h
            }% y1 i( Z/ e# m* r: P( ~
            UARTPuts("\n",-2);, Y. c7 g+ F8 ^/ J! A6 \
        }7 T/ Z8 p- b  ?/ t6 N
    }* U& V# R, e* H
: L2 b4 h: V& H6 w+ q6 f& f
}

# u9 g& H- L# r5 j2 [) |

3 b4 ^/ L3 R: b- P! i
; M/ N# e# O2 E: f* h# {
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% m/ B# D( D% p0 k0 ?7 b0 R
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* K( i; _: V) I




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