嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 C% y: e% R: q8 ~: D% T  }& P: c
Void UPP_TASK(Void)1 |' l8 ^7 l0 T! U% s
{
$ J  w' u$ b# Y/ u; g$ W! A# t6 ^0 l; ]
    int i,j,k,target_int_count=2;
! U8 l7 C5 G  y: z; k    char ch[2];5 L0 V- }' B6 j$ ~9 F

3 O, q5 M& L6 z6 X$ ^
. l: X/ d5 A1 [4 W' J* Q: ?
2 x7 e: s2 A4 u4 i% {7 _7 S    upp_interrupt_count  = 0;& o7 h! f. Y; H# e, ]
    upp_error_count = 0;# B! D7 K7 k  x
- Q1 a, ?' a" ^/ [5 {
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. x( _5 ?) A) a  n    // Initialize data buffers
# X: w, T8 m, u4 I8 @: d    for (i = 0; i < upp_frame_size; i++)
5 T6 p1 g' e* W    {
7 ~4 {3 D8 z9 m$ {: M  Q) s; e       upp_buffer_b =i;
3 A9 f; i0 P) }       upp_buffer_a = 0xDEAD;
2 j4 g8 j/ P+ F* ~7 t  H    }
( M$ D+ v4 R! [  }9 K% l! f( a  d" h, a2 m( W1 k
    //for(i=0;i<1024;i++)
& h! \7 m6 t9 w    //    temp=0;
7 ~( w5 X6 l) |) s3 _+ ]4 Q! w
/ B4 l; w$ p, r% s% N    //UPPReset();8 n* p5 T; I' D. D
    /*启动UPP DMA传输*/
; z4 z4 _, O/ r' i9 S" A0 _( j    UARTPuts("upp_prog_dma_i\n",-2);
4 t. ~5 Y  h2 \0 N& }# @    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 o& c, e! e8 K$ s. H$ a' q. ^( N    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 K, c9 H: X  F    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* Q! ?+ M: O* u
) |% Z9 g5 l' W. S& v$ n2 s9 I    UARTPuts("upp_prog_dma_i\n",-2);
* L+ O1 I+ ?0 W6 N  N    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ T, m/ c7 z7 }; g% _8 J    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 p8 E* }6 P# I4 _, u; Y# u$ z    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 f3 [7 D' i" V3 b% K: q
, J9 y- }! f8 T' v2 l    /*等待UPP传输完毕*/
$ w: Y9 W4 h! A" Q" Y! w    //i=0;4 ^2 p% q4 w# ]" q
    //j=0;0 |5 @0 P3 l  L2 e+ ~; _9 Q1 y! q( t
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 n( x) q& d* e* [5 N, `4 Y    {# E& L7 l3 u" i+ @; b
        /*  测试UPP传输的同时操作普通DDR数据
2 B' U3 O3 ^2 H        temp=i;& b4 V  O+ _6 ~' r) u7 {1 ?5 I+ a
        i++;* Z  c) J9 x5 i* P# g' F# ?" Y
        if(i==1024)
* z, Q/ K5 N1 k        {0 S9 g8 S! z: r9 l* w
            i=0;% O" ^+ l! f) {% v" U
            j++;
1 b9 H" x1 D6 |9 c" j        }
7 h* O5 Q: z( l) j# N% N( `+ ?        */  V$ O4 M+ |& R# V: P
$ `/ _9 q* @- N& T
       asm(" nop");
- R" A6 }7 }3 n- [8 F6 e6 d% h( V' J: P2 M
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& |" |! ^+ |/ H4 ^  Y' q4 J! D    }+ z& f5 `& G3 ~2 T  B, ~

& P) q3 p$ R: C; t8 a5 F/ s5 F    /*检查UPP传输的数据是否正确 (loopback modes only)*/, A- v9 s* c$ K# ^4 l2 E1 y( R; F1 Z
    //UARTprintf( "i=%d\n",i);7 P) e- S/ H3 k$ w; v  T
    //UARTprintf( "j=%d\n",j);0 R$ v7 a1 _* X" z* D8 T& j, o
    UARTPuts("Data mismatch in buffers.\n",-2);) F1 O- N4 ]/ v) _+ |, Z
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 h5 R2 }7 T* t& T! u    {
! c( ]) }4 Z4 V  M/ }) l5 N        for (i = 0; i<upp_frame_size; i++)" R3 ^2 o3 V, k( m; {+ Q% w4 ^( U
        {
: A9 B% d5 T2 v$ _            if (upp_buffer_a != upp_buffer_b)
7 H: x. I1 |6 }            {7 j" }1 t* K$ A7 q$ B
                upp_error_count++;
% w" w' K# [. q, G7 |2 M8 b8 l            }
: P' j* Z% ^' ?% K- ^        }
+ Y) x; p# p' b/ Y    }
% Y8 h; H( R- T8 Z; c. i. I
3 `6 X4 e% h: g8 w. x$ b, F5 @    /* 报告通信结果*/. y: U, J0 ~6 d0 ]/ a5 M3 @! S
    if(upp_error_count != 0)& b; Z+ k' w9 z
        UARTprintf( "upp_error_count=%d\n",upp_error_count);) a# a2 N* O% {! j! t  k1 L
    else1 O6 K5 f/ s  ?6 x2 R) M1 U+ \
        UARTPuts("uPP transfers complete!\n",-2);2 \0 F- @& p! N$ o6 p
5 `* N0 `6 @* p; H5 Y8 H" T
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);3 k# e+ A3 b- }  e
    UARTGets(ch,2);
9 v( s$ |6 }% R/ r- F    UARTPuts("\n", -2);
( ^8 R6 G/ ]& V7 j7 `. C# d4 _9 s7 D! Q6 m1 T3 Z; D
    if(ch[0] == 'y'), W, O+ P1 N9 t. ?5 j' k
    {" V' `  F9 |/ E  q1 Y# V1 {
        /*打印全部读到的数据*/
# @+ H1 C# t+ ?9 P* ]        for(i=0; i<upp_frame_size; )
, _: V7 {4 D  A8 A7 q# |2 ~        {1 g. k3 q" a, c# J$ K5 f
            for(j=0; j<5; j++)5 U, A& G% J4 \! [+ v
            {
9 q! V( F. C4 U, O                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 ~5 g! r6 @3 P) J
                i++;
+ a9 ~% W5 r( D( Y. f8 o                //if(i >= 4096)2 v7 t$ L9 p1 j( s* o' [! F
                //    break;, H9 z! z# R$ m! M* r2 l5 l- s
# S  B0 U" _- x1 C
            }4 K& ~. t1 k7 h# ?2 B- c$ G$ k
            UARTPuts("\n",-2);! N3 H1 n+ S( p% x+ q( W$ F6 }& Q
        }% s& ?& h# T7 m  k# _
    }7 K& E- F5 I* Z! ^- N8 L; V8 a* {

  Y7 b/ P, z- G' w1 i+ f2 r}
0 y0 ]  N; d. u1 ?) r

% [( `/ F# R2 w" r* H% x1 q( t$ ?; A+ S: \1 I! r3 u+ \6 R

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 F/ h- b% w4 f' H5 `
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 z8 O7 p# [* N' }- j5 c" o





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