嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% k  ^1 T/ x; o0 n- G+ x9 M5 \
Void UPP_TASK(Void)( e. \6 a* H( U# i5 l4 q
{& h- \0 I( s4 [9 S

, _1 b" n6 l  L0 ~/ M( z$ ^    int i,j,k,target_int_count=2;* m( E! S1 v. ^: q1 U
    char ch[2];& A% w; _7 V2 _& c
* c. H+ k" l3 P4 L- [' G; o& S& l

4 g* l8 p+ d7 L
: V& u" j* @( R    upp_interrupt_count  = 0;- }( y" G4 D" H0 ~2 z
    upp_error_count = 0;* }6 ]3 u' f0 c: W. s, j

8 D) `! k5 G) [( ]    UARTPuts("\tResetting uPP buffers...\r\n",-2);* p+ Y5 D4 r" G6 Z. Y- T. w
    // Initialize data buffers
  a. {+ f- _, x: B2 I+ f0 e: Q    for (i = 0; i < upp_frame_size; i++)
. M$ x8 F0 X! Q* U' ]9 h    {0 G/ l3 w+ b  H
       upp_buffer_b =i;
$ a& ]& {$ v/ ]       upp_buffer_a = 0xDEAD;
% \4 p/ n2 U; B. }7 u7 L9 M5 u    }  L: s9 q0 v+ R, a
' Z7 J% d+ w* D3 {+ V! u( P9 b" @
    //for(i=0;i<1024;i++)
3 X# N! w; p1 F. B" I; s7 E    //    temp=0;
" }0 T& ^' j+ a/ c% b9 I* M# w- g1 @8 ]+ q7 o9 Q& Z* Z4 H
    //UPPReset();, _# f( O2 T- |% l5 B
    /*启动UPP DMA传输*/2 U6 R% n! m( p" j
    UARTPuts("upp_prog_dma_i\n",-2);
7 k$ j+ w& m' d& Q8 J    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( `( J8 T* ~3 E+ P# Y8 x( p7 p
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" N0 |7 V' X  ^4 G1 s% |    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ s7 {& Y4 g5 J. [  ]2 M- p1 A/ ~) m8 B. l
    UARTPuts("upp_prog_dma_i\n",-2);  J5 N( H7 T$ A5 F& x) Y3 {7 _
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;% t3 E2 H; ^4 q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 C7 B  |$ p! y' v" @1 X- `
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ H# y  z2 \% I. t, D
5 }3 y5 P! `3 r    /*等待UPP传输完毕*/
2 _9 Q0 U9 d5 }: ]    //i=0;
8 k& S5 ]6 J! E! `    //j=0;
# z, k& _* e: o& J) e' V2 \    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 t1 P9 k) t7 P% P+ E# L
    {
3 c3 `! M; `$ e9 a4 i6 H        /*  测试UPP传输的同时操作普通DDR数据
: A9 \, {% C* [9 ^) n; T, ^: D        temp=i;1 i7 O: }: o+ [- q; \- j
        i++;
2 M- I+ k1 b6 q, Q        if(i==1024)6 i( F! O+ t3 N3 |6 s) ~
        {
6 [: }  `6 O: Z3 K            i=0;* D7 ~4 u7 G+ [/ Z6 A
            j++;. U' U9 k+ ]$ z3 h* S- T
        }
" T! _* N2 j7 u2 B# h! D9 P4 j* j        */
+ D. B9 t& L8 p' \) l9 i, ~5 r! W
7 y5 A' D9 T$ G, Q& r! b       asm(" nop");
- M& F2 [5 Z. r: c3 d
5 C6 M/ [/ e" h: `+ n       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, z( {1 z0 a6 j% c% @: l
    }
( R, Q( U( `9 B7 R2 F/ x+ M- N
) M( f9 {: o! R- z; z6 _: g0 R    /*检查UPP传输的数据是否正确 (loopback modes only)*/
; C9 N% X$ h( l1 l+ C    //UARTprintf( "i=%d\n",i);
" J0 S; i: F0 P% W; s2 q    //UARTprintf( "j=%d\n",j);3 D0 }1 a0 h% O* v( p1 i$ e8 e
    UARTPuts("Data mismatch in buffers.\n",-2);# ]# D) c4 v/ F3 n$ X8 Y& K; Q
    if (upp_interrupt_count == 2 && upp_error_count == 0)
; b; w' o9 E' j5 s7 O; v    {
7 l* T/ N6 m3 y' d! b* B+ o! p, [* q        for (i = 0; i<upp_frame_size; i++)/ L& z* A: P, {
        {
* U+ a. L$ V/ L! y6 M            if (upp_buffer_a != upp_buffer_b)
5 y( A$ v% [5 D) [! S            {# n8 d4 `, l/ R1 [, K) E6 g
                upp_error_count++;6 Y: `9 \# z9 ^5 ~. ?" c2 s
            }( h, ^" i% S7 P0 v( ]6 t
        }$ u9 L/ x. @  w- i; i* _( o! Y
    }7 J5 S6 @2 S9 \1 t, `! p4 F4 F
% r1 ~# U1 ~4 s' |" I
    /* 报告通信结果*/" v) l& z( {9 h! g
    if(upp_error_count != 0)
$ m3 Z2 }2 }3 _        UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ p9 P" r3 `# {6 r# e* l    else( }5 ^% T: @6 L# d, A# c1 G
        UARTPuts("uPP transfers complete!\n",-2);
6 z9 k( d: R) w. a& U! @) D( ~4 M8 R0 M1 a4 J" \3 d) P% Z8 m$ O4 Z. w
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* d4 p& C* s3 D2 i
    UARTGets(ch,2);
' o  {; U% e) l2 K" I    UARTPuts("\n", -2);
! f0 O, h7 r# c1 M. y: w
9 \; ~5 Z. t, _/ l6 i4 O    if(ch[0] == 'y')
& f1 _# ?. x% s0 H# f: ?    {
# I* z8 F2 E% F+ @7 N        /*打印全部读到的数据*/
) G1 }7 a- n: U4 m2 p6 V8 S        for(i=0; i<upp_frame_size; )" C+ }5 u$ l6 `8 _& z: P
        {4 S1 Y8 D& B$ |" t+ a: F) U( {
            for(j=0; j<5; j++)- e# h$ d0 X. @4 W
            {
9 p' s0 r  ^/ P9 C& w- S                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& _* O( J8 `+ ]* O% @; d$ u+ M+ u
                i++;/ M+ f3 @2 v1 y. Z" b5 p
                //if(i >= 4096)  e/ L  f, `& S! _
                //    break;8 h* o7 S9 R3 _" \  O* w
- Y2 b3 B7 \6 d) j
            }/ O8 e% c1 q( K+ P: M
            UARTPuts("\n",-2);
& G9 J' e. X. T. O% N+ \        }% q, x" `) L' G* W+ z% j) A! u; H
    }
) {7 a; q$ B, p  b3 d. J+ T8 ~9 r3 o' d( ]3 f* h) |7 d
}
7 u3 I. O% x& a, y

; T, k) a  B7 q8 I; K9 }; ?! X' |: q

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. b' [) \! t7 `! }8 g

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, N! \; ]" L# Y




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