嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% E! S* O4 v! t( n
Void UPP_TASK(Void)+ l4 ^7 [9 G/ a1 w3 W. W
{
* D0 C  w; a  w& j' Z, ?3 O+ ^' E
  r5 t8 _- r( C2 J    int i,j,k,target_int_count=2;
5 [$ i. m7 ~6 Q2 s& W, N- h9 q    char ch[2];6 U: K( q1 j( }, p/ l( B
' _# u. v& ]+ p& |; Y

( S; ~0 b' g0 C: f- d
5 S- z3 |; ]/ R8 ?% u' h    upp_interrupt_count  = 0;- ?$ e1 b% E! J
    upp_error_count = 0;- ]4 D" e0 V* F, d$ J

: }3 R. k5 c+ r- O    UARTPuts("\tResetting uPP buffers...\r\n",-2);8 c1 m. D+ T% p& ?; y
    // Initialize data buffers
6 x8 g  V; M3 j' v) b+ p/ J7 `    for (i = 0; i < upp_frame_size; i++)
2 p  x8 z* }, `; e1 u6 U, q- V    {
% d% s6 u/ s' W+ e       upp_buffer_b =i;& X; {) k8 P) S! T" _9 K' G
       upp_buffer_a = 0xDEAD;6 p) a# b3 u$ d% ]! l
    }: ~* E+ \  ]1 W, G! N% W

# _8 N) |  P; i% P" u7 T8 \    //for(i=0;i<1024;i++). p. U6 |5 M8 _# u4 @# X' V. c4 o
    //    temp=0;
/ q8 b3 w" G) I4 k2 i
9 o  o. z: P- G7 x( k    //UPPReset();* p/ M/ M2 a* u# n6 [
    /*启动UPP DMA传输*/2 o8 C! f2 }! z* I
    UARTPuts("upp_prog_dma_i\n",-2);
2 B0 v' O9 ^6 d5 P- j; D    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;0 W& t: B6 ~; j1 [7 @8 H
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* n* P8 B1 @+ y1 W
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 \  p% ?9 E( H  q, \: b' B7 P' V+ x
: d: }! r) `/ _  L( p
    UARTPuts("upp_prog_dma_i\n",-2);
; M, V' q0 J& x* n- L: M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) J9 D4 v5 p% F" B# Q( `6 q$ [    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ G' Q: z4 G- x7 @% m
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# s" Y* q0 v/ q0 `( Z

$ I, `- ^. W! X% s' Y# P    /*等待UPP传输完毕*/7 a  [; \6 ^; }  [' H4 v- p) V
    //i=0;" V2 w$ f6 e# ?: Z0 m$ p/ q# ?1 s
    //j=0;" [6 r9 ]- d) N
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 O; N* M7 a3 S/ @2 o0 K7 U
    {
/ D. R) w$ h( x0 Z5 R! ~. K3 z2 }6 d" D        /*  测试UPP传输的同时操作普通DDR数据
, @- M1 R$ f# o7 W6 S$ g        temp=i;
. |( Q3 [* ^  H1 H- a. @: ~        i++;) R, z5 H  \# ?7 ~) u- R) T
        if(i==1024)3 i1 t3 f2 J$ r2 z) y! \7 E
        {5 t0 P* K+ O2 Q' w, ~! H% b4 }
            i=0;
5 J% o; i1 ?2 f1 T  t) F! \8 j            j++;
6 O# k4 \. I" G2 P! a6 \  V        }) q# x  s+ o# q: R0 O) A, L
        */
9 s* ?- Y1 @8 f/ v( i! r
! Z& z4 Y5 S# W/ v; A4 W       asm(" nop");+ O* e% m4 ]- w
4 _  b$ d) U0 ~
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 P" Z7 j' B* B+ ]    }
' g2 _* u' d) V4 j" c6 \' r
7 v  Z8 l3 c6 r* p2 J    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 x) h) ^# W* A7 d& B    //UARTprintf( "i=%d\n",i);
) R, G; S7 z2 s) _. R    //UARTprintf( "j=%d\n",j);, R0 ?7 P6 r; [& n0 {6 H
    UARTPuts("Data mismatch in buffers.\n",-2);
# E# C) h7 w1 }; H- Q, l9 }- I7 K    if (upp_interrupt_count == 2 && upp_error_count == 0)1 ], S+ _1 e: q- a, ]  K0 n- Z$ Y
    {
8 m2 D; o! e+ u' y; n( x3 Q6 a1 G        for (i = 0; i<upp_frame_size; i++)
; H  ]! q" D' t) I5 T: H5 ^        {" a, z3 G% }& L8 M  ]) t
            if (upp_buffer_a != upp_buffer_b)
5 T9 R7 l7 }  a$ Q$ {# M            {
) o' R/ h6 u/ A% C) j                upp_error_count++;
: \0 A0 N% L, S6 o' W            }* S( y) y( b! f* L' M2 e/ i
        }
& U; c/ k, `$ \# C* l    }
5 R' {6 w2 o) C  C
' q: w( |2 @; |. [; `    /* 报告通信结果*/  v  W8 c! W8 y: S* o; j6 J6 O
    if(upp_error_count != 0)8 I$ q( s1 W" R7 R5 `/ l0 F7 {
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 W8 Q* v7 G8 K4 t9 d/ |    else
/ e& y% H3 U. A1 Z9 Z, E        UARTPuts("uPP transfers complete!\n",-2);/ {; D) _8 r& g3 o& r
1 U( y8 G4 M4 p. B( k" k2 k+ @
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; E+ X  M$ z5 l8 Q2 b
    UARTGets(ch,2);1 S: _% }0 z6 P1 [; {7 y+ @' B
    UARTPuts("\n", -2);# W5 t3 @; r; V3 k7 e8 Q
" s, u0 Q$ |" `) E7 X
    if(ch[0] == 'y')' b0 M  f( S0 c! b
    {( Q0 y% {0 ]" r- k( m
        /*打印全部读到的数据*/
* [4 J' q8 U# v        for(i=0; i<upp_frame_size; )" k; M/ M6 ^2 I! A; x
        {; R' _5 X4 ~' e# D' X7 C
            for(j=0; j<5; j++)
9 p: o- l$ [; ]$ B6 D, C            {
8 c1 M2 s' k2 w3 s% ?# x                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);7 J1 E& k$ I& m3 I
                i++;
6 Y; r$ O1 T. i. d7 |, a) i3 e' @                //if(i >= 4096)7 ~8 d) _" v1 @; X2 }, c
                //    break;
5 V$ u2 h3 v1 S( P$ U5 i) Y+ ?0 w* L
            }
/ \( z# [9 t: V2 \, c            UARTPuts("\n",-2);
% L' W9 u5 ?6 ?        }, Q0 a" I4 P! m' u8 B: v, M
    }
% m# q* P) v& n' s7 ?; L7 t
+ v( i9 F) K9 d' @  S0 R}
6 I! b2 a  x: P5 d- s# U/ Z0 q" M" F
8 j" ]! B. i" f: ^7 B

3 ]# n9 |8 P# U' r+ G. ]
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。2 N: d3 l/ l5 f, i4 W: N

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: h, ]" q% }+ D




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