嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 l0 t4 B" T, q0 u6 M: F
Void UPP_TASK(Void)
; A: P2 C- A5 e{7 ]7 d# }2 n5 y* {* N- ^/ C

3 n! r* R' v2 e$ ]  W5 w    int i,j,k,target_int_count=2;
4 e9 p- d: ~6 c8 I5 u) K# j    char ch[2];
' z. ]( y6 C# R# e0 {+ Q9 y
  `1 |7 s+ ?) i: m& {' J0 @/ j8 B: }$ X; E( n1 T! o# P' S. H

4 n! e8 h8 u+ P" T    upp_interrupt_count  = 0;: z' L$ _, m7 |
    upp_error_count = 0;
) s) T3 m8 I8 {% X% m8 k( D" Q& v4 ~5 h
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 |' M7 L- x3 ~" a) m( ^    // Initialize data buffers
! F: c1 ]! `: j8 {; k$ B# t    for (i = 0; i < upp_frame_size; i++)
# I' o0 F' K1 W+ P; S+ u    {4 p* \$ v; L% v9 l+ K  |
       upp_buffer_b =i;
( W/ t+ i- i8 q  I6 o! r  c       upp_buffer_a = 0xDEAD;
: c1 p. s) ?- O+ t, Z1 e8 ^8 k    }
/ o* ^4 b( v: ?* K. J1 c7 i% B) p
    //for(i=0;i<1024;i++)
  @. J! l; L$ }1 p6 u! j! Y4 Y    //    temp=0;
  j9 p% f" @2 t6 f- V0 X0 c
5 N/ Y) e: \. N: k% J' l# P( K    //UPPReset();
& F! |8 d" U2 g% k5 Q0 {    /*启动UPP DMA传输*/7 v. W* ~/ ^3 C/ o9 D, p) F9 Y' P
    UARTPuts("upp_prog_dma_i\n",-2);
# x9 t( Y' G. Q5 `6 m. R4 M+ Z    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 q( c. Y& x# b( }    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 @! S; u. y# v
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# _& I/ h8 n" H( w

* d* g* Z4 P0 |/ ^' b6 d% A5 p, ^    UARTPuts("upp_prog_dma_i\n",-2);
* m/ d' L) q8 {7 a2 P    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;" J; `) c6 q' w
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* ~  j& I! l' C- L% ?
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  k1 K: D& _# _- G5 ?+ ?+ i0 d
, F* w5 c$ `- G. e; D# |    /*等待UPP传输完毕*/
5 \6 y- Y! }; ]2 ~. S! [    //i=0;' T; e' O( t$ v0 T& k3 m
    //j=0;) T8 ~" u' F* {, s
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! {$ I! t7 J2 R' m+ C( ^4 a    {
6 F1 x9 c& O* _* P) S% s& g$ W        /*  测试UPP传输的同时操作普通DDR数据4 k! I3 J/ K0 L) w8 x& H3 J
        temp=i;) n- l; `% d+ d
        i++;
3 N5 `9 ?2 n, J2 w        if(i==1024)
% [% ?& @2 N6 W, K6 Z        {+ p. E& c1 G( i
            i=0;
: |, l$ g9 p1 w& v' T            j++;# O9 [5 g) f7 e5 U/ k" x- w# C
        }
( _1 R/ v! b% }6 }6 T' j! X        */0 z" N6 J( T) B  V7 V
) a1 p& v1 @2 o
       asm(" nop");
) g* q. E/ {9 U6 x) |
  K- b& Y( i% G$ v/ O       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. n& i9 h1 Z1 i! K% g8 E    }, w$ J  o6 n, |1 l0 B3 D
; n4 E( ~# V6 a+ t$ m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/8 p8 i2 `4 G. D, w* |7 q" t
    //UARTprintf( "i=%d\n",i);+ T2 x. G- q1 f8 a1 H4 T  p
    //UARTprintf( "j=%d\n",j);
- @$ r: E# ?+ ^    UARTPuts("Data mismatch in buffers.\n",-2);
, M  s; s+ h7 Y% G9 k) q' I    if (upp_interrupt_count == 2 && upp_error_count == 0)1 q/ W5 W' b& ]& g% i7 a- R  w
    {6 p: U, ~2 s  s2 x3 `
        for (i = 0; i<upp_frame_size; i++)
7 J  m' d- N8 ^& H/ n        {
9 F; `  _8 s& x+ W' g* s& |            if (upp_buffer_a != upp_buffer_b)' r! {$ c8 Y" B$ y( E: f/ J
            {
' |, s- k0 H' G% |7 }                upp_error_count++;
* }, i+ K. h9 F# o            }  D& L# n* c6 X8 {" `( M' }! N  o
        }* a, Z, n/ T) h  k# O5 P
    }
, C/ [" O* S$ [
# k1 ?1 K1 K0 }! z1 q# B" n3 |) A    /* 报告通信结果*/
! D8 n4 \" V0 R! y6 {$ w$ w    if(upp_error_count != 0)+ Y) J$ w; K3 Y! b. U) q1 u
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 m: z; r! ~+ o0 z5 J! N    else! ~- c3 K4 n; P+ G2 ^; h. n, y
        UARTPuts("uPP transfers complete!\n",-2);: ?9 F' w9 ?7 V& M% @9 |
; {0 V9 A6 n! g! b) T+ e: d
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) V/ [: i3 O2 I. l5 B
    UARTGets(ch,2);5 ~# d( |+ z, g1 I. n3 l% F) z
    UARTPuts("\n", -2);
) ]* n. Q- _" t# D0 k& x
% M& n# }$ ^" J. Y* X( Q# c    if(ch[0] == 'y')
* L2 W% |$ f" ?' ?/ f, B    {- m( m. c  Z  d2 S
        /*打印全部读到的数据*/
: C/ l8 {6 L3 [$ u: R. Z        for(i=0; i<upp_frame_size; )
4 w8 X6 K- m5 y        {
- W. x) O5 r  G4 _% M            for(j=0; j<5; j++)! ^0 t: l: @3 w7 F" M  G/ F
            {  h7 J( |. ~) }4 c  w& ^
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, ?- c& }* g1 n+ y" d: e
                i++;
8 E7 \; p+ Q% K                //if(i >= 4096)4 w$ `# g4 c4 ^: D0 u
                //    break;0 n0 U/ J+ N3 F( P$ |& d! d
4 n( J) s4 j0 v& ^8 x$ x7 S
            }
. Q- g) R( ]$ p% e            UARTPuts("\n",-2);# `3 S5 J- B5 Z$ U, A' G! ^
        }$ a+ I- e: j% d% W2 M
    }1 `3 ]" h6 w  E% ?4 r
6 M4 C4 L+ S0 |7 ~3 R. M6 o
}

: m( I5 h/ a0 a& A+ H9 Q( I
" ?: M8 `+ K1 o7 G7 W# i( m* }

, [+ ~- r9 K! U
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. k0 k& l" r  [% M

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 S3 k  S( m0 ]# [/ |' ]% L. O) ]2 b




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