嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- b$ L- ~8 ?1 ^4 l; s
Void UPP_TASK(Void)  n6 G7 o# A4 t' }
{7 t$ X7 c- `: t& K$ `: ]5 u1 ~. b

' C# m5 G, Y1 B! l( Y    int i,j,k,target_int_count=2;' C( M/ p6 z) o" G6 _
    char ch[2];2 z) f# e8 w, i6 f  u! _" m
4 U- q% ?! |" g9 N6 b$ @" v" ^

9 ]$ I: d0 C0 r( u/ G
7 g' }- H5 A: ~6 L) j  Q, Q    upp_interrupt_count  = 0;& p' n; J* H% R: k. j( f! b4 O
    upp_error_count = 0;& X: ~1 W$ z9 e+ [; l: N
! k! ~+ t2 ?1 J( I& n+ s5 Z) ]
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 T5 S2 Q& e" j) X& Y/ L5 ~$ t8 d8 W    // Initialize data buffers
+ l8 E5 L8 o( t. K    for (i = 0; i < upp_frame_size; i++)
! A& `! p( }) ]* k    {
5 Z2 K  _4 V. g+ Y, s$ y' r( C       upp_buffer_b =i;
% E" A8 T5 f$ C2 a+ P4 T3 |, |       upp_buffer_a = 0xDEAD;
. ^0 Q7 A+ _  l# p    }
1 w% k5 _7 B8 E! x) w5 `, `6 A+ W/ G* t  @" G5 i
    //for(i=0;i<1024;i++)# p3 B. k; l" {- |" K" Y1 r
    //    temp=0;: M' S) B' S3 O% f$ U: Z: v, L
0 `. Z/ j2 z& Q8 m6 R6 [
    //UPPReset();: u+ x8 ^4 x. p7 V! D; P
    /*启动UPP DMA传输*/
3 o+ `7 P8 j* N. ^7 |7 [; _5 X3 f    UARTPuts("upp_prog_dma_i\n",-2);* j  z$ ]; y' M! ~( A6 M' a4 k
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 b& W/ p& e8 Q1 e, k* s1 V    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 n- G" W' _  a# k# I& E# q9 s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 N: o2 w) x- F+ c+ f
1 Z2 k; D2 B9 f  z- }. B  c) b
    UARTPuts("upp_prog_dma_i\n",-2);
8 i3 x/ z+ U7 \    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! n/ s. i1 F0 A+ U/ v
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% b  v9 m0 w2 Y! |, N
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# x" _  O+ M/ ^- c. F) \. p& ~* W4 T
    /*等待UPP传输完毕*/
$ l; }4 ^+ E' E) I3 F) I    //i=0;
$ c; N) u8 N( Y' x8 x. i% B  `    //j=0;6 t9 D6 q3 [7 g# x! |% }
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ g1 x+ c: N/ O6 f7 W0 Q    {/ q; v& ^- F8 [2 g: I
        /*  测试UPP传输的同时操作普通DDR数据
$ w; ~. \$ N& w3 v- d        temp=i;
) U# M5 j4 P' o* ^" u4 W3 Q4 E( }/ d        i++;# j/ a9 L7 `- |0 e9 h+ Q! S/ {
        if(i==1024)
; J, Y5 y8 z! y& v& y; T' z7 |        {8 a4 W  e% Q9 P2 p9 E6 Z
            i=0;
9 [5 {( G+ T. T" a/ }            j++;8 Z; U! X! F# D: |( U
        }
: Y3 H: D9 `4 t/ Z, [" l        */& q* k8 D( v+ r" k7 u3 a+ ~( m

7 M2 z) Y" \% ?" f       asm(" nop");+ M" e- F: G6 y8 V9 r% P/ L; q
2 _, W. e* {5 F
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 U- v5 p: j$ T) i; u
    }
; [7 K' I+ S* p* D
; x8 l7 s/ @1 D: `    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 D7 m6 ~) Z- v2 J) x/ U
    //UARTprintf( "i=%d\n",i);
3 Q; Y& A) m& R    //UARTprintf( "j=%d\n",j);
9 c1 z1 c) d% k    UARTPuts("Data mismatch in buffers.\n",-2);
2 R) n1 p* M" U5 @7 c% }7 D# ^    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 B) \% A6 |0 u  g' i& j! s3 S  u    {
9 X" G7 U9 L! S7 Z4 s- w9 ~) D        for (i = 0; i<upp_frame_size; i++)5 U+ S. G2 B, @% W+ {7 W
        {
, M$ W, h! _7 C4 @! R* {( a8 U            if (upp_buffer_a != upp_buffer_b)9 E( ?3 m0 z8 L! ?# l# r/ L8 o
            {
, n7 J' t/ R" y/ N2 v- g- E+ k" j                upp_error_count++;! h* O  D& b$ ?# f
            }
# p$ ?' S8 q( s0 M0 f* A        }. c; Z; c( i4 ?5 s. n) ?
    }
0 J9 ^- f+ q! j/ x5 x, `3 |1 b, z# S% k5 j! Q
    /* 报告通信结果*/* r$ L8 j4 F9 \( P  R$ X7 {6 q( Z
    if(upp_error_count != 0)
  o3 n7 A$ g; h* C: ~2 X. R        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ z, p4 }* `' ^; f( ]" h
    else1 I3 W3 ^. Q; c$ g; {
        UARTPuts("uPP transfers complete!\n",-2);
& g7 p% X' M! _- \. O! [6 L4 A1 P& X; S$ ~4 h$ i
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 W4 j: ]! S% ~. v( G
    UARTGets(ch,2);- x1 |! k, e9 v" A3 X1 V
    UARTPuts("\n", -2);
9 h4 U; n" p5 l# |" x
( V/ U4 Y& @! C7 R+ j* H; Z: S; T$ k    if(ch[0] == 'y')4 x& i2 @- ^1 M
    {
' ?' S0 d0 V# i$ r        /*打印全部读到的数据*/
. ^% I4 `3 i6 S        for(i=0; i<upp_frame_size; )
. U# v2 y9 ^- l8 m4 J        {
* A# E+ A' v( H5 r' l- x* E' E            for(j=0; j<5; j++)
" W$ V$ E6 N9 U7 L3 `! S8 i( l            {1 P# O! V' G! n2 `/ H, m
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);4 S$ P# j; a- H, g
                i++;: y& v+ m* B) b4 U! o5 @
                //if(i >= 4096)
0 ?. r1 P6 U: f3 S3 P/ V                //    break;
2 T+ Q. `( B; z' s/ q( G
; r+ L: O6 S! t: G            }
  h6 Z% W/ T6 N            UARTPuts("\n",-2);
5 b# Z/ Q( `% }  s+ M        }
% a1 u: f6 k9 M, N' ?    }3 F2 t; q3 e& Y
9 C& b. T+ c( O9 j+ E/ E
}

# D/ ~! Z+ w. H4 K' c8 x$ H. ?! ]

# e( d9 t  ^% W" x0 }( S
8 Z" b( m6 E7 _+ A/ q6 G
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ B8 y2 E& a6 a  ?' d4 `
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! ^  y) @' S1 I* q3 G: w





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