嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ A9 z' }* H9 g0 j% O2 {2 f# j( L
Void UPP_TASK(Void)( U* n" x* ?3 O* E- @* N, D
{
2 z! C$ @( K9 u7 _8 F) c: {$ p: C3 V
    int i,j,k,target_int_count=2;
' n. z0 r8 m# Z: {    char ch[2];9 ^! }+ A4 M; b9 v0 n0 ?/ B

& y1 Z$ H% b; U0 r* t/ V( C, j+ P
8 l! Y4 \( W" ]1 g
    upp_interrupt_count  = 0;) T; N* i; q- h% n- a. e$ I
    upp_error_count = 0;9 E3 b# I' b! A- t- m+ K5 W9 q
+ |1 y1 V8 n$ S8 H& K1 n8 m& T) j' |" d. h
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 a, C/ P2 _: S1 J5 `! p    // Initialize data buffers
6 `6 D: Y) A8 M8 n( {7 |    for (i = 0; i < upp_frame_size; i++)% `9 N9 r; U; _! G; H1 w. q
    {
" N& z  h  y* ^5 j& S# a       upp_buffer_b =i;
, R1 f; E5 C. v7 h       upp_buffer_a = 0xDEAD;. C% L3 [" K3 J7 U2 I2 c6 e3 o# A; k
    }  H$ [4 V  ^* Q- {) e0 x* `8 n

  G" @$ T7 G! U2 e- Y6 }    //for(i=0;i<1024;i++)
8 e5 \1 Z) T8 _8 Z1 J    //    temp=0;& p5 m% j* W' O1 L. J! P& {$ V

5 k$ l/ M+ ^+ C    //UPPReset();
, ]7 ~% r; Q& ^3 r  }    /*启动UPP DMA传输*/
/ i0 u; n8 q' C( s* n    UARTPuts("upp_prog_dma_i\n",-2);8 q+ c/ W! V8 P
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 |7 A5 V4 a+ p+ @3 d8 c" a9 q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; C* Z# W- C$ x9 f% T  z& i    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% i; }+ R. j; U- s, V
9 ^& |) U/ ^# p9 b  F    UARTPuts("upp_prog_dma_i\n",-2);
4 ^6 T/ O+ O- @: j7 A7 C    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 \; d! s, ?: X/ K( U6 |. b    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( D0 t1 k+ D8 k1 q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 R2 y8 P6 D8 o4 O
8 ~! \- I/ q4 _- _: O0 J$ ~
    /*等待UPP传输完毕*/2 E. b+ q# _1 t/ S% A
    //i=0;$ b4 w) T% z: g6 R
    //j=0;! p" F$ Q3 D* a
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! s  X  s) p7 N" w* @
    {
) y  N; U& c6 z4 y        /*  测试UPP传输的同时操作普通DDR数据  r4 e8 V* K2 L3 j& i5 m
        temp=i;) a$ b$ t. w* b7 Q1 P
        i++;
: `' a6 ^! U9 W& P) y        if(i==1024)  [- }- l- \$ |$ H
        {) k# c* y7 E+ |% i) [+ Y: {6 k
            i=0;1 f& c1 ~# N' o, n* E0 J; W2 O3 m
            j++;
8 R2 w* \' j0 b: }6 G, l        }2 y6 A4 t4 m; T+ X# P! {4 [
        */
& j( T  s) r* _" f: t  {( c
+ T5 S8 B5 m! `  i0 L& V  L$ q7 e       asm(" nop");
% O  ^# X; ~- ^) f+ S/ v# e" s5 v0 p( |. I; f9 Q* V* b" u- d. l
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# X: W8 z, h! {8 D  X* ~    }
* O0 H5 {% G9 S4 V! ?4 C3 I2 f+ p1 s8 o" y- \
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& x* _  A2 z0 v    //UARTprintf( "i=%d\n",i);9 t: B( C3 w, Z4 d* l. Y0 ]
    //UARTprintf( "j=%d\n",j);) [( ]/ k& f2 |4 w; H
    UARTPuts("Data mismatch in buffers.\n",-2);0 [! Z: W/ j+ N8 B+ S7 q9 U' r
    if (upp_interrupt_count == 2 && upp_error_count == 0), \' B, K$ R& H9 [: i- r
    {+ S1 ]* ^1 \% w5 c- O  x
        for (i = 0; i<upp_frame_size; i++)5 Y) V9 T9 p1 x  ]% g) |0 m
        {  J+ x; K# w4 i: S
            if (upp_buffer_a != upp_buffer_b)
8 F! |5 k3 Q/ k  ^4 o. S            {1 E8 U6 C! _1 g# A9 n3 R" K7 ]0 k
                upp_error_count++;
2 h, [6 S. i5 ^$ Y            }0 c0 b& G9 w8 u7 z$ F
        }8 l: E6 Z% w; }, e
    }& s8 M! P; n5 O7 m/ N
6 e$ h" b! z, [; u: l7 [
    /* 报告通信结果*/
, s0 N- _5 L7 Q6 y% o    if(upp_error_count != 0)' `5 t, I, w- ]& l2 W. v0 j
        UARTprintf( "upp_error_count=%d\n",upp_error_count);% f7 y' D" l% t% _' @- R* F9 ?' e7 T
    else
& r7 I% R  U2 b        UARTPuts("uPP transfers complete!\n",-2);, d8 X% d& p  m% V

8 z0 l; q5 M( A% o2 N+ i    UARTPuts("Do you want to print all the data?(y/n)   ",-2);1 y! t9 ^2 n/ [+ e' T; ?; C
    UARTGets(ch,2);
1 T0 A9 U3 d" |' |- W    UARTPuts("\n", -2);6 Z+ K! @1 c. n3 a2 l) S
) H) |  A+ N2 x  G2 U% _, P( R
    if(ch[0] == 'y')7 D9 F1 o5 [- y7 K5 |) k' v5 G
    {8 P' U7 F! b5 w; y9 r# b+ W& O
        /*打印全部读到的数据*/3 q& t( V: E3 x3 A$ \6 S1 [( N. h
        for(i=0; i<upp_frame_size; )9 e* t! Q+ s, i6 q( s; O; [
        {
  }7 Q' M$ I9 o0 t  v) |2 W            for(j=0; j<5; j++)' J0 h& ^  p' `+ a7 C9 I. w% k
            {9 L- G! P1 U5 J  N2 y. U
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, D  `) x5 i' o$ X' w4 C* N# V                i++;
* w( T- v8 ]: R) c4 ?0 @# b, o                //if(i >= 4096)
, X$ n, y' b$ b                //    break;
. B; m; }: A2 i, n" Z
* E" B' ]3 p. u3 x( p            }
+ {8 A- ?! R# U0 A; m' ?            UARTPuts("\n",-2);* l1 x2 M  d# M0 U) u5 a) ~
        }
) |$ t, G) i; L0 B: ^6 t    }! d- _" y6 p" b* b( I
# D# V( j1 Z8 ?& N$ t3 V2 [9 i$ p+ `% _
}

8 _% j3 c" Y8 a5 B
4 b; {" I- A7 E1 \* M; _2 F

- k+ v7 ^' G6 K% q/ d, X
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 ]8 U# p) C8 Z. \2 N1 H+ h
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" R" Q; X: ~: u$ c! j- ~& b4 C





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