嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! G3 V+ y* Y7 g; i
Void UPP_TASK(Void)
- U( y. }, |. ?8 L* G- ?; E5 [{, d0 p8 e; A2 l* B( `

; a3 N8 k2 t' M$ @+ i/ A" y$ L) g    int i,j,k,target_int_count=2;8 z& d! k) M3 s9 C3 J. Z" Y  h
    char ch[2];
& D+ N8 ~" s0 Y& x# m/ x
* y! Y1 L. m7 s" V, E
* z3 {, F/ a0 U# h: K( J( k" R4 \: E( t
    upp_interrupt_count  = 0;$ i' C' {2 x- n, e/ Z3 g5 @: w
    upp_error_count = 0;' |! L* b% t' k6 r/ g0 v# s$ [
9 n7 I" R3 b5 e6 |
    UARTPuts("\tResetting uPP buffers...\r\n",-2);! E" u# f% j2 ^9 v  \1 I! u, Q
    // Initialize data buffers
! w8 K# T% @7 a+ f    for (i = 0; i < upp_frame_size; i++)( V) m$ J: _9 `: ^
    {* R/ W) Q* F/ ^! O8 M% `% p0 A7 ?
       upp_buffer_b =i;6 ^' `7 P( E# M/ z1 q0 C6 s
       upp_buffer_a = 0xDEAD;+ b# l6 j8 w- E/ }4 W( }7 [; |
    }
/ q3 z  K" R9 s: ^0 z9 i8 Q9 M4 L2 N$ k; Y' E4 w. U
    //for(i=0;i<1024;i++)$ X, c% f6 W( @/ h- l
    //    temp=0;
: Y4 l3 Z' i" j/ {
# j3 m5 ^: ~( O* B    //UPPReset();% {% d: w" g; o6 L7 g- [
    /*启动UPP DMA传输*// \2 [5 D+ i0 u! H2 X2 N4 n
    UARTPuts("upp_prog_dma_i\n",-2);8 j9 G4 O9 ?4 @4 K' O6 T. E6 p$ R
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- Y) U$ l' d0 M. R8 r. e    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) O/ @8 h/ m7 F) j4 N) G
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 O! f( K: }; `1 `1 H

% f2 Q# k5 `7 K+ f4 ^& a% b    UARTPuts("upp_prog_dma_i\n",-2);
) M0 _1 [5 W4 o: b    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;6 D/ g7 x" f3 K6 a# X2 y2 c% C! v
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 m! l# i- Z4 a0 ~/ X9 Q9 v
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);7 \# k. K. T+ j7 g$ N
- |+ j  d0 h% c
    /*等待UPP传输完毕*/
1 P3 ~3 m3 N- `/ D, m    //i=0;; }1 _0 C3 J* M& p2 |. x
    //j=0;
! [; l  _2 z# Y    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* F- [- _. f3 F    {$ R$ l1 V% x% j# u; m/ b
        /*  测试UPP传输的同时操作普通DDR数据8 k. h# Q8 U, d! q1 _
        temp=i;
1 y; \! R' Y% M, p. Y: j        i++;/ A+ y) Z+ b, X$ n& U
        if(i==1024)
" W' B- P" Z3 Y& U' }: d        {
$ k, P9 ~  w! x            i=0;
- M" q7 H# ^+ G- y3 C/ B. }            j++;' e8 @- j, s9 D3 X# Z7 h3 Y! Y: f+ k
        }
  z0 a$ e5 y4 e+ `3 j* B! u/ }        */& \, k  v4 k: R6 h) j& Y7 |1 |
! S: n9 y& y0 m
       asm(" nop");
/ Y8 r$ w) M; J" G4 s
, L( e/ T+ m0 ~( L' N; l       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 j0 B5 T! E8 f! f
    }: I) O7 L/ b* J' t* N% ?% z
8 E6 }( ?% n8 [+ P. W
    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 A/ Q3 y% J3 C: U- S4 ~: X" j
    //UARTprintf( "i=%d\n",i);* k2 E8 U0 p1 K. K* z! ~- S
    //UARTprintf( "j=%d\n",j);
( J$ r8 ~# K4 [; V% W1 ~    UARTPuts("Data mismatch in buffers.\n",-2);
8 l4 O8 X9 X" \) o8 ^    if (upp_interrupt_count == 2 && upp_error_count == 0)3 x) ^; U* y* e& E
    {8 T% T* X( z0 F  r
        for (i = 0; i<upp_frame_size; i++)
: i5 }5 [0 f: ]6 o4 e3 N  n( j3 ]        {
6 _. M( F1 N9 o1 j' D( x9 `            if (upp_buffer_a != upp_buffer_b): }- c8 O6 b( t
            {
* [% i1 x' b6 v3 ~; \' i# G                upp_error_count++;7 I3 Y9 z4 f4 Q5 j. r+ I& Y
            }* l- L+ m9 @( q+ ^0 S( @
        }5 b5 }9 ?. a2 ^: J- b0 ]/ i
    }3 a5 X' E* _) o8 E0 j; g' m/ p( B
4 X/ e* ~  i  M' x( l" B* @
    /* 报告通信结果*/, `, o& k% G; \& H$ m3 Y
    if(upp_error_count != 0)8 _- H& K# u" [! h: C7 F
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 {* E/ u2 S  x7 y    else
/ K. I5 Y& J4 X' t        UARTPuts("uPP transfers complete!\n",-2);
$ `* }& a5 S; y; q- n( H
% F; w: p1 y$ B( u% O9 `) y0 Q# A    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& T% Y4 M' T1 W3 J6 d: G7 ]    UARTGets(ch,2);
: J2 D9 R2 E* R    UARTPuts("\n", -2);+ D- N: `7 {9 G2 f

. Q/ j# K3 @4 A  V* w, z  @    if(ch[0] == 'y')$ j4 K( h6 d( J
    {6 _( j# Q7 U; O% W" i
        /*打印全部读到的数据*/
+ ^/ ~* c$ l+ T+ E" y- X        for(i=0; i<upp_frame_size; )2 r! F! G; P4 d+ j4 n) G
        {
& \7 Q  x( M' F7 c            for(j=0; j<5; j++)9 ]  l1 |6 Y( _, [; x( }, c
            {
8 A; w3 {% Y- l" ?7 M- S                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" ~( L" Z% d. g* l8 p0 |$ K
                i++;- S) E+ [6 v2 X9 H3 R8 z2 v
                //if(i >= 4096)
' h/ f8 c% U$ W7 I4 o                //    break;
$ u7 }3 G  n+ N7 Y9 N5 Y
/ c9 j) h+ V) Z" |- C# l- \3 i            }, H4 _( @! H0 b! m. `9 m/ G4 A, H
            UARTPuts("\n",-2);  L6 C5 ~; P% _# M
        }
" ~" V. n5 t6 T+ y( B    }7 h6 h; ]5 n6 N' K% X: s2 ~; Q
; H0 F2 T' N3 z3 G+ F8 s- k
}
9 X/ M. H4 d; A1 j- ?$ R, }
, _( A3 Y# X5 \4 b* h

# z  G7 v. X. P# G! b5 H: [% r0 K
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。# o: x8 y3 S2 o* _' D8 Z: j

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 `% s# H! N! c, c, ^% C





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