嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) k$ G! s8 [2 r3 [3 `& f
Void UPP_TASK(Void)) D$ b1 I  r4 T6 O5 _/ q
{8 @5 I6 Q9 c3 t  O+ q1 J

: n7 B$ a( o! _$ ?3 v    int i,j,k,target_int_count=2;
8 y4 K! u- c& P8 u3 ^! ^$ e    char ch[2];& {0 c, v$ D" b. D

5 D7 _6 N# N, v9 R+ h# U2 `8 F4 G# E% r% ~

3 M& X5 W# z2 |: w( J4 Q    upp_interrupt_count  = 0;
6 U0 f" g6 @7 j! y    upp_error_count = 0;
1 I9 R8 O0 ]8 ^9 B8 ~0 w6 V3 S9 H! E2 O
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 J/ E9 J2 N) T! s% T    // Initialize data buffers
+ U" T) s# Q/ m3 h    for (i = 0; i < upp_frame_size; i++)
0 o# S# r' W8 ^. B    {6 M( @4 A. N  P% |, [; f
       upp_buffer_b =i;
9 s  A6 d5 F/ l% l2 B       upp_buffer_a = 0xDEAD;
, o6 B3 F2 W; y2 G) w    }! d5 b1 w5 Q( v/ b  x4 K- q3 B
6 m; N! j+ I, B# U! g6 q1 b
    //for(i=0;i<1024;i++)
! e8 X; a7 T' t& f    //    temp=0;
! s  {4 ]5 ?' |6 M- w! o; J/ Z9 ?; M7 `' G
    //UPPReset();
/ x5 c3 V4 D( W( b5 q, ^    /*启动UPP DMA传输*/1 @& d" O! O: I7 m/ ^0 P5 N
    UARTPuts("upp_prog_dma_i\n",-2);- j* s1 R+ c: w9 {
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;$ P; C3 b+ e$ \5 p) l
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 m% ?, g6 L' j
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. l; I% `( F- B2 j4 c% n7 [$ g/ p7 n
! b: |- `0 t5 `1 r- Z    UARTPuts("upp_prog_dma_i\n",-2);& b0 U" E" @& V4 x0 C6 ^2 l+ K
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 x- Y4 H# d. q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! a+ |# H) x: v) |! a: \: e
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( `. l6 y$ X% o0 s8 w$ @1 b5 ?* _) [4 P7 h5 O
    /*等待UPP传输完毕*/
2 a8 T# o' c2 Y6 v    //i=0;. w8 ^6 r; e8 o; \. ]' _6 `
    //j=0;/ B' v2 n  X7 c' t% p" O" ^
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! b# W" M* w$ ]  C1 J9 Q' `2 l% e    {/ h; A* Y0 [8 [: N" U
        /*  测试UPP传输的同时操作普通DDR数据
! t1 M* O! d, p3 e- R        temp=i;
- m3 x7 X' Y3 ]. n        i++;/ q, b; y3 b! v1 j9 H; N
        if(i==1024); R3 u, z2 [. r+ |% p' `4 n# R
        {- d8 Y, Y" U  A! V4 i
            i=0;3 g. B1 v: B; v1 o2 r
            j++;
% F; n. n1 q. S3 b) |3 t        }; W/ H* i+ S0 g/ W9 `! M& h! h0 E
        */
6 ?; u" s5 S! f% w! C' W) f: S+ l4 g% k  K3 Z- l. D
       asm(" nop");
) w/ o/ J# a, y, D
9 y; `  b3 l) T) {) D. l* E* x       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);3 R2 O! r! E# Y$ V9 o. g( W
    }
* F9 |7 T9 G1 E0 a! k
1 Y+ I2 z) l7 i0 Y# v  D    /*检查UPP传输的数据是否正确 (loopback modes only)*/  u7 E- W4 a8 x& o1 p+ ^; }
    //UARTprintf( "i=%d\n",i);
& ?4 ~7 }6 F9 p8 m, u: w    //UARTprintf( "j=%d\n",j);' F5 f' @: \$ M6 z( n% m6 r
    UARTPuts("Data mismatch in buffers.\n",-2);: }7 h$ |9 q7 H! J+ S9 B) \
    if (upp_interrupt_count == 2 && upp_error_count == 0)3 D% i$ D2 v8 b
    {
$ Z2 g- H# E! E9 ?        for (i = 0; i<upp_frame_size; i++)
+ d# [! `2 E- p        {
: o; F' L& s7 r9 J! r# a            if (upp_buffer_a != upp_buffer_b)
7 y/ \. M4 t  @% X2 [6 x: f  {8 R            {4 G* @+ a/ B4 u% v: n/ z$ p$ ]2 @
                upp_error_count++;
2 g8 t4 a/ g* l6 j            }
. F8 }1 u) Q; x7 f& ]* X. i8 c        }" m6 Y% z9 `$ F# U: C7 L
    }% Q# J3 Z& c3 Y

; [. C$ O; O( i    /* 报告通信结果*/; e2 s) Z3 i; D4 A" |, D
    if(upp_error_count != 0)
" C+ z, v4 R) T3 j) z% H. R: m( n- r        UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ I$ H5 [& ~/ f5 \    else
$ o, I, n+ t5 w( B; W        UARTPuts("uPP transfers complete!\n",-2);
$ I1 R7 U1 D. Q) v  u1 z7 B7 u- g
1 b" x* g, V2 b: T# v! T3 j9 Z    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
. K0 h: n4 ?9 ^; R7 Q* r    UARTGets(ch,2);
7 R5 S: B7 E4 K, F0 Q    UARTPuts("\n", -2);
/ m  l# A4 p1 w+ J5 m, F8 Y) b7 ^, o( y7 h5 C) y
    if(ch[0] == 'y')
+ g- ~2 [6 |0 |5 I: E- s    {
0 f2 d4 G& @2 X2 i  `5 B$ j        /*打印全部读到的数据*/
! y8 f5 }" W) `# w9 T' \        for(i=0; i<upp_frame_size; )
7 j: k8 D8 A  b* f        {; @( _: E# }: ?( Q
            for(j=0; j<5; j++)2 ^) l' T. B8 C6 A/ P
            {% F( _# T; }: l+ R% `: k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ l6 t: g4 r/ I) G8 D                i++;
0 a: L9 P6 X+ x3 G; r                //if(i >= 4096)
6 f6 G2 V+ x  n5 V. z4 Q                //    break;* z  B1 c) n2 }1 w; k& r4 z

  h# a# r0 ~- r7 O/ j- w            }( V5 S" B8 C) S. l: x- m, Z
            UARTPuts("\n",-2);) v, K) L4 o( p. _% r; k; \# k0 d: v+ n
        }
) M" i7 p* A8 @7 ?( ]2 V    }" T% g2 p: F) P, v, l3 F# f
; l& r. S" x6 ~9 R  |& Q5 a: K
}

7 _% {+ C( z& {) H8 [) u: r

' m* ?2 I3 _0 y( J8 w8 X
8 X* P9 U9 e- G) ^- P
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 B& G) U3 a$ n1 Z# h- u
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ T; |5 {/ P9 r6 O/ k  I0 l" [




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