嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) c" l6 h7 q2 S3 D6 \7 ^% U
Void UPP_TASK(Void)
# ?* ?, L( S! {9 f1 p# L{4 f" O. q; ]" p% ?0 w% L) \" |9 N
! y) D2 K" a/ S- C
    int i,j,k,target_int_count=2;
: n# u# U- G  e) C9 _# Z9 m8 n5 R    char ch[2];) j+ |: z7 P8 e- v+ c4 p

; S% k7 ?9 i( q$ C' Z& F. W; q- ~2 l- }* a0 q% y

% E9 y- L3 D1 L    upp_interrupt_count  = 0;
% A4 J6 C2 B& P& I3 E3 ^    upp_error_count = 0;
0 B. Z% ]+ S  c* i3 O
! Q1 ~+ j6 q6 E9 j8 F4 D  N    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 C! E$ Z( |  A7 u0 {
    // Initialize data buffers
; m2 \. g) }3 y    for (i = 0; i < upp_frame_size; i++); Z# c9 l" \) N+ m4 l
    {; d" Q2 N- u  D- t
       upp_buffer_b =i;
6 b& l2 j; T* z9 g& u9 n       upp_buffer_a = 0xDEAD;* D0 Z5 l* d( y3 P% I
    }4 g6 M/ m" }; ^
. B# z1 S  d1 m" x$ a- W' \( e
    //for(i=0;i<1024;i++)
2 a9 {- \* @% c' G/ l    //    temp=0;9 E$ d6 q( E' D
0 N/ |; k; c0 F  E
    //UPPReset();8 E' j, b# r  _- W8 b; Y+ [- J
    /*启动UPP DMA传输*/) H# Z+ d( N4 ^+ G/ l0 a7 t) T
    UARTPuts("upp_prog_dma_i\n",-2);
7 R5 n; `% W9 T6 T/ C) F    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" J! a( B+ {4 f' }% {/ _) r1 k6 v
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 h) Q( g) A' z" i& @2 x/ O
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* G0 |, c% L& n) z+ B. K
8 K' N' Q0 d# g6 ?, T    UARTPuts("upp_prog_dma_i\n",-2);
- V$ [' M) |. O( }' H- H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& D5 q: f8 E/ v- ]6 _    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 a7 z$ [9 X' {0 ]    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);9 c7 t9 g! g8 k7 W+ W. b

# y) `( R: k, i& n    /*等待UPP传输完毕*/
  p* V6 d& i6 D: h* \( P    //i=0;
. W- U) f3 s! a/ V! n) p3 [( a  w+ i    //j=0;
$ T5 I, n8 O9 l    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( l# Q4 d- h/ n
    {
$ U& R& U1 i2 m: M* H' H        /*  测试UPP传输的同时操作普通DDR数据- b0 N1 c6 m) G+ J3 c: C" ?
        temp=i;) m* S; Q+ R" c9 u0 i
        i++;: G0 o0 T0 ~6 {) {. m
        if(i==1024)
7 P& C1 K8 t* E3 `( w" Y        {
+ ]/ }) \3 U5 c* w4 u: F            i=0;% |& }( E1 y% N" a" I  U
            j++;0 j* z; P  Y) y( }; m
        }
& H: i% j. H' B) @" z; E) _% N& |        */
9 b& G  G7 H8 n+ G! E7 e6 E3 A+ ~# \/ E* g! Z: |% l( k
       asm(" nop");
, K- i) @$ u; t+ _* x3 B, _, a9 R# E3 t! A' t: r1 K
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" |3 I8 x- v' l4 }    }: i$ f4 t' d' e; ~$ V/ d% }

5 Y; p8 {, Q. M$ u( H    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 c# ~) }: k/ _5 e3 \, X' e    //UARTprintf( "i=%d\n",i);: O9 J  G2 B! `0 H, W
    //UARTprintf( "j=%d\n",j);
6 ]% A9 I1 I8 U# R. h$ E    UARTPuts("Data mismatch in buffers.\n",-2);
' E) a7 Y; ]5 S8 Y    if (upp_interrupt_count == 2 && upp_error_count == 0)8 v4 j/ \5 T; {
    {
+ z6 Y5 M# U, t$ g( R1 P  y9 z  r! `        for (i = 0; i<upp_frame_size; i++)
' u7 v6 r6 m" M0 @        {
9 b% z: r  \# a% ~  i8 r* M            if (upp_buffer_a != upp_buffer_b)
) V2 Z8 \, e$ t- j            {
/ o6 h- q' a( G! s! h                upp_error_count++;
2 j$ w$ T0 c: d: e            }
* M# ]/ d- C7 b8 c2 ?! A        }4 B& n5 h1 a) N: a% ]
    }
% W5 ]! S2 k, I/ w% c2 I
, ]3 p, H$ s4 @; Z' H0 V; s    /* 报告通信结果*/' [3 X; j+ t' k! L/ y# A& @
    if(upp_error_count != 0)
+ H; d. m4 W# ]        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ w* T& v8 K+ L/ T
    else. [) C( C" ~! S" n$ d
        UARTPuts("uPP transfers complete!\n",-2);
) Y/ Y* J4 F: L, s* P' n6 C1 {* W% @9 c4 u7 d9 r% h6 t: p( Q6 G
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 V" ^/ s1 G$ s" u4 `5 ~    UARTGets(ch,2);5 y5 K8 ^4 D3 {, `
    UARTPuts("\n", -2);7 t7 P$ b+ E; Q4 ?9 w+ B' S

! K8 _2 |; d* d. T7 z% B4 f    if(ch[0] == 'y')
. g, }6 Y+ J$ z' ?& V+ u# p    {# ?- ^$ |3 ]$ A" P3 {: l
        /*打印全部读到的数据*/
4 \, k- z5 U' K' e8 [$ G        for(i=0; i<upp_frame_size; )0 L( C6 D  t; h" \7 `5 Y
        {3 f) i/ {! ?3 ^2 h# O5 s" ], \1 A
            for(j=0; j<5; j++)
$ t; B" c( T+ z5 x/ p& m            {
* X1 v, P" b7 m* q# b' f                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" F1 D9 V* |! W5 ]. t& m  e/ ]
                i++;/ T2 z. u- _9 |/ M* D( W
                //if(i >= 4096)
  Z  C4 `! Y* N. |" o4 n8 J+ s                //    break;4 b& ~7 p2 k. Y6 {% Z

/ O+ `% L& B8 m% b1 Z! {            }
" G- P1 c1 c) f, F. U            UARTPuts("\n",-2);, J0 A& g3 F" `) ]
        }, N4 e8 K. _, L& |1 Y
    }  y; _2 U" y  J  d- R( W

5 T9 |" M9 h3 \# }, U9 L}

5 m9 k: h  y3 M& q; E

& Z- h1 e+ t; ]& P' J5 M" h' C/ H# s1 c3 m1 E; y+ u" m( ]

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# q* v% I2 ?9 w1 s- n/ A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 w* s0 Z% }5 `7 v





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