嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  b% R. h; G2 b5 J
Void UPP_TASK(Void)  K* f/ W: g- P2 g) W# v' v, q
{
' \: S" P3 U% @: h3 C+ \. K
/ W2 Y& r4 Q  ?: l& _    int i,j,k,target_int_count=2;
. T9 l# R4 R# N    char ch[2];
5 v& Q7 A4 l8 _' s1 v, U6 c: \# f/ o% A% v
! X' m1 |1 v0 \8 u

) Y* {; f8 |, V+ E+ l# o- U    upp_interrupt_count  = 0;
" @2 [; P) |2 _+ G$ b/ Q2 }0 |( R    upp_error_count = 0;
& _$ Q, w% \6 ~) t+ }4 `4 r
: W% E0 x& a& C7 |. q& X    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 h4 Z  }9 k7 ?1 y; J* u0 q  i
    // Initialize data buffers
  l/ i0 v+ k3 L6 \% Q    for (i = 0; i < upp_frame_size; i++)4 X. O% D- K. D2 |; q9 \$ f
    {9 I: q: q+ h3 e. {
       upp_buffer_b =i;
6 H$ G+ ?5 D; v8 T6 k       upp_buffer_a = 0xDEAD;
4 t5 n+ L% x/ x5 {. ]1 S    }7 I4 a" K7 {4 [" B
5 N4 D, y& A9 }6 ?1 l, e
    //for(i=0;i<1024;i++)( H7 b- ~0 X5 r3 z! _
    //    temp=0;
! `( I: w$ [  \, M2 {. C. t, G& p1 k2 ]
    //UPPReset();/ g& h' C6 t* w- c, W& ~3 M
    /*启动UPP DMA传输*/( h" {9 r/ l5 F; L5 `$ h
    UARTPuts("upp_prog_dma_i\n",-2);
5 r; s# P6 H; V' T- N    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. G; I/ I* |. H3 l1 s5 F' N$ [
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& R: r+ c, k1 b0 _    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' `. C8 e5 T, J; k' u) I& K- O
, I* t4 T" I1 q' Q    UARTPuts("upp_prog_dma_i\n",-2);6 V! h& v9 V) \1 ]) G  u
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ H& F8 R2 e7 l& U+ J7 K
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 v2 }4 X! t3 H    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; s5 \: |0 ~, W# H7 U" _

# w# w; Y7 @% c0 j* O* `2 X    /*等待UPP传输完毕*/
0 T. S5 V7 V: @  z    //i=0;, `% {* U/ O, e0 _) a  f! a
    //j=0;
5 |% z+ s) k) Y; f' Q5 m* Q6 V' G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( ~* T7 o- v) Y, h    {1 `2 A# Z# U5 e/ K" j& L( C
        /*  测试UPP传输的同时操作普通DDR数据
9 h0 M$ n: [. @0 g: p$ g        temp=i;$ J6 y5 {9 m' g
        i++;
) g9 e" |' a, x( M1 H) c        if(i==1024)6 K& F9 @2 W6 t3 |2 N; O5 x8 M
        {$ D3 A" t- \# E  f7 X. _6 [
            i=0;' q  R, [6 Z5 c6 s/ {) r* C2 G
            j++;9 W, ^/ ^* p  P8 s+ t
        }: s! S8 o8 O( R) G- o
        */
$ X# x3 F# U) u5 Q( B
1 h2 |6 k% B  {# V) S8 o$ N0 r3 y       asm(" nop");
( P* B: _6 }  J  v
4 k( t3 w0 Q$ @       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# |8 u$ b1 r8 B    }
0 w7 n; N, N+ T3 {
; C) E* W8 |" `- P- Q    /*检查UPP传输的数据是否正确 (loopback modes only)*/0 V9 j+ C) Y7 k2 h  |
    //UARTprintf( "i=%d\n",i);
/ P) j0 |! o* K) ~* E    //UARTprintf( "j=%d\n",j);
: V+ U+ M( [( N( v. A& ^    UARTPuts("Data mismatch in buffers.\n",-2);# u4 }+ p2 H; A3 x( R
    if (upp_interrupt_count == 2 && upp_error_count == 0)0 p+ i) _2 I. p$ Z0 L1 i* c
    {) @& @8 ^  Y+ g: D$ G; X+ _
        for (i = 0; i<upp_frame_size; i++)
3 N+ Y3 G% E3 f+ j        {
1 n$ w- Q; n% j2 w6 q            if (upp_buffer_a != upp_buffer_b)0 Y) l2 `  w. x3 G0 c8 S0 ?
            {
6 @# L  G# B) V                upp_error_count++;3 P7 S/ L7 |, @
            }
. q$ j+ \- v) V5 }0 M! r        }, z9 E5 K; `0 ~" w! h$ w2 a
    }8 a7 S" i' t! K8 y

) s" w5 x9 G. g; E- w    /* 报告通信结果*/9 b/ Y9 v/ A! u% S
    if(upp_error_count != 0)3 x5 x. u2 k9 b9 h. I: [- ]
        UARTprintf( "upp_error_count=%d\n",upp_error_count);% w. _5 f% i5 m/ S) }
    else
" f; g" h" _! s# o( l% ~' h        UARTPuts("uPP transfers complete!\n",-2);
2 E% c) {: T, ~5 X$ N  x
# U- g7 n7 R# p, m3 f    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ F4 X9 c1 _( u& x9 p' s    UARTGets(ch,2);
& J: `1 j% h5 v; y% Z$ A2 U0 n    UARTPuts("\n", -2);
2 U8 n4 [# z2 y3 C9 R
6 O: ?, p. [1 ?  D: T    if(ch[0] == 'y')) x5 Z; J) C  m7 ?
    {
$ q+ [, S* F; T5 y& a        /*打印全部读到的数据*/
; ^& |. e9 F+ g5 t' X" k/ Z6 P4 h8 ?: f        for(i=0; i<upp_frame_size; )7 n3 \, r3 N5 _- x1 p
        {
3 ?2 x; ^/ d' T' {( B2 s" o3 F8 P            for(j=0; j<5; j++)
/ I& L7 K7 b- q' U) s, H            {8 Q+ E4 _5 T! K0 [% @1 F: Z3 l
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
2 d- [& e( r* {" h                i++;
  k# V) [0 O$ l" {# W9 r                //if(i >= 4096)
! t; T3 H# U% F% V                //    break;
. U2 M: @  o$ c! Z  _& a+ `$ O
* |) G4 Q' I, [            }
0 g8 r' h2 s) q0 ~- b            UARTPuts("\n",-2);: P! p, K. P  P: G% z; j
        }
& r4 ?; h1 v6 Q& E6 i6 T' h    }* ?$ M; ~. M$ W" U; J. b$ q+ j

& G3 V" ?( l  K+ j  y  Y' x# P}
2 f/ @# L7 \- j. b' n% a6 d& P
: @; H1 r1 p( C6 `$ E2 z/ M! [
" y! {3 {1 V8 ~& I2 l

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 Q! s) o" q: [- R% E: J2 R1 r4 w
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 J2 N; b6 |# M, k2 q, `0 w  r





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