嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' @" ^8 x) V/ @5 P2 G
Void UPP_TASK(Void)
6 D- Z+ W- F! ~5 l$ q: Y! ~, x{( o) X" U. K' J  _
6 M& J& X9 y) Q4 {# `6 R8 |! w; s
    int i,j,k,target_int_count=2;, v# \# z; `( W( R0 S/ ?& B
    char ch[2];
! K+ Q3 |) _. O" {8 V; |$ n6 ]0 h$ M1 W9 A1 \, Y

1 X! ^, F% Q& H* O" G. ^8 R0 R) {1 z* r- K$ N
    upp_interrupt_count  = 0;
- _7 o+ ]* S; |# I1 e3 X  Z9 {; M    upp_error_count = 0;
% C4 p% H1 M8 i% p, V
+ M1 y4 D; q( J0 h4 @4 Y: H    UARTPuts("\tResetting uPP buffers...\r\n",-2);; f7 R" a, O6 E; Z7 ]
    // Initialize data buffers2 l1 t3 x2 v4 @
    for (i = 0; i < upp_frame_size; i++)
' R! Y- a% I! l    {
  `) m% H% v! W# B6 B  ^4 G       upp_buffer_b =i;
& D# p! |  [% N, Q3 H* i2 u       upp_buffer_a = 0xDEAD;- L8 h. \% K4 y1 ?
    }3 j- e" h7 [8 Y' L( l) b: v
& H& @: b* m" k$ ^+ m
    //for(i=0;i<1024;i++)( A, [* n; x  z
    //    temp=0;
  S+ h$ g1 A) S, j( a" b' n/ }$ {, b4 {, \$ Z
    //UPPReset();, p$ D/ v( R) \; H
    /*启动UPP DMA传输*/2 h2 Y3 Z2 [% z3 V
    UARTPuts("upp_prog_dma_i\n",-2);
  a: t; i* \* |0 i9 d    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% {3 |1 h' T/ ~6 \8 r" b; _- R
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 G) T5 h; A' L! i2 a
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( \4 g( L7 O: F# C( y( o/ e7 J  }# k1 x) Q- m
    UARTPuts("upp_prog_dma_i\n",-2);! f1 z7 s. [4 Q6 V
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: @4 {- C0 k3 _    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" `6 M* ?9 _+ Q8 b8 L! V0 S/ v
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- s# w& I4 \1 p/ [9 v. V0 H) h% l; d. K% X! u
    /*等待UPP传输完毕*/9 R5 K7 b' N+ e6 R/ P8 M7 I* N
    //i=0;
; v3 \  a* ?  s* N8 l6 ~  J    //j=0;
4 W; |* o7 v+ z3 W' r    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  j* L! `. S5 S
    {, G% c9 p- P# c, I8 J, G4 o, r$ [
        /*  测试UPP传输的同时操作普通DDR数据
2 Y; Z3 u- K2 F# Z( `' x+ C6 G        temp=i;
4 a) U9 p* y# k7 r& R3 y0 Y        i++;
( |/ X, [$ @5 W8 \- b* c" X        if(i==1024)
2 W. F( V. q9 Z/ ~; x8 T        {
. l+ M- T: V; O, S) U& z! M            i=0;
, {7 F) f% O* M9 }            j++;
+ e4 V6 E, c+ c  L1 q        }" _0 W, q+ S. @1 E2 K/ W
        */
0 _. _2 p: w) u  {7 b+ V. `" T+ c, j  v& j$ x9 i" \. U! @8 h
       asm(" nop");
, F; E$ Y6 {! f# k% g, E0 C5 U! f2 h2 n. x
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ [5 Y9 r7 d4 W/ `& O" o0 N    }
7 A1 Y4 |4 s. i: c. s( Q* f7 ~2 ?- O, H3 X4 q% }  G2 x
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 f, R" M0 o$ _4 i9 k5 K    //UARTprintf( "i=%d\n",i);# m8 M6 y8 ?+ g
    //UARTprintf( "j=%d\n",j);% s% s1 j: o- X: b6 X6 E: o/ n
    UARTPuts("Data mismatch in buffers.\n",-2);
. Z9 C0 U$ p# o; B    if (upp_interrupt_count == 2 && upp_error_count == 0)
& m- c3 I, A. P4 Z% h    {0 ^" S& d, q) {" h- n. Y# u* t- b
        for (i = 0; i<upp_frame_size; i++)
* U% r! f% b9 K1 Y, L; k) X        {
1 ~! X* _5 A$ L. Y            if (upp_buffer_a != upp_buffer_b)% @5 f! F0 }6 f: u- a7 T
            {
% G& m' y. \3 @9 D$ A5 k, {6 u                upp_error_count++;
0 W/ N. [9 n2 t  u+ k& N' c; J            }
4 W+ X! Z7 x: a        }
$ a7 X% B9 j5 B  l; E- H    }
) s2 j. P; ^, a& i
" ~6 n$ m$ ~! ~" \' h; u    /* 报告通信结果*/+ N) w) B7 O' Y- E7 Y# Z
    if(upp_error_count != 0)- h/ _' Q% c( ^! o% N: N
        UARTprintf( "upp_error_count=%d\n",upp_error_count);# D  W5 M- `2 R# _
    else( K8 L- w8 ]: i! c6 A  N# q
        UARTPuts("uPP transfers complete!\n",-2);
' O: r( g, ^; M0 t8 \8 x4 L" N) n
4 A% @  t9 `: t' ?" g! ^    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* i0 r1 O. t" J8 X    UARTGets(ch,2);! x: ]; T# f/ y1 T  @' H
    UARTPuts("\n", -2);" r: K/ r/ i+ |( k9 ^, j

$ C( T0 |* `% ?' @    if(ch[0] == 'y')
0 _* X) w/ L- Y1 [( ~4 c& h    {
" y  y  D# n7 J1 B; S2 W: M        /*打印全部读到的数据*/# u  f7 x* F+ w+ P
        for(i=0; i<upp_frame_size; )
0 P: p. G0 I% T        {  L! ?. I5 M2 C7 e0 \
            for(j=0; j<5; j++)- _! S$ ~) v8 c8 y- W
            {5 `' S* M9 h) G+ N' g
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 Z$ i) ?4 K( P+ x  Y& \% ]' K
                i++;
" A: O  m" r: \% _4 Y9 w                //if(i >= 4096)
8 D2 m  I" l- P3 a. s  m                //    break;
( ~) G% f/ v, n$ v# n1 B# ^2 L% a/ G7 S( t8 L& J3 X4 v' g
            }2 y9 @% P3 C9 N
            UARTPuts("\n",-2);7 P+ G* m1 n, C4 i5 @! a5 @) T& ^
        }
% O" |/ R% y/ H2 G# {    }6 P+ z$ Z8 A7 B  G! U$ k7 Y' j
0 m+ H6 ~! X% q1 H0 D4 _
}

5 c3 _3 `& O! h3 C, _& D* e$ P* l% |

$ Q& a1 a1 e# E( h4 y
" D, [" w7 k1 D  {3 I) x! A
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 z- ^& n  R% F+ W( W

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 u; f7 y  K! n& g& p5 y





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