嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 _9 \  k9 z+ ^. Z3 b4 E
Void UPP_TASK(Void)/ ]3 c9 E6 w) F7 L7 ~! w# h+ t  A+ H
{
2 ~7 b8 c7 h/ Y4 {1 d5 u. S' R+ a+ I) T" b/ f' Y  e0 |4 @1 M2 z
    int i,j,k,target_int_count=2;
2 H. f+ o5 E$ V* j' B    char ch[2];. h- w5 `, H. w9 A9 }
7 I6 l$ t1 h& a& z9 ^* T' L
8 {, N" k! i6 U  n
- o: k% ^/ Z5 [! B1 m6 e
    upp_interrupt_count  = 0;
3 E$ u: v0 ]& Q& b: F( w    upp_error_count = 0;# Y% \' S4 Q  {/ g% L$ j! D1 F) k5 i

$ q5 c8 @5 x5 e( X    UARTPuts("\tResetting uPP buffers...\r\n",-2);% @. V' `/ Y7 Q' y- x- q6 a
    // Initialize data buffers4 A/ g) m- v; @/ Q. s
    for (i = 0; i < upp_frame_size; i++). Z9 e' A" s* x
    {
  c" C$ S: ]: u7 R  b       upp_buffer_b =i;' r6 ]% @9 o; R3 `6 F2 o, N7 h+ S% A
       upp_buffer_a = 0xDEAD;
; G* A7 P* T' V# z    }
/ k# Z7 d) A& v% m; S. f1 F3 E: R4 j" y- N6 r7 {* d. I
    //for(i=0;i<1024;i++)
! t! |( c' G$ Z( o! g: e: {    //    temp=0;! N3 l8 J1 s: u0 R$ {" c
$ C% T5 V: |; t; w4 |1 E& v
    //UPPReset();
1 g4 c2 [7 b1 k; ]) G' J! |    /*启动UPP DMA传输*/4 l5 U" T" N' y5 ^2 I6 l
    UARTPuts("upp_prog_dma_i\n",-2);
0 o5 l1 b! G" t! ?6 z3 A    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, l, T; O# t0 a" I
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' q" B/ i! K. D* h    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 Y& [, v8 d" O" `" P/ M( l$ }+ l( z6 |/ j% E: @
    UARTPuts("upp_prog_dma_i\n",-2);
+ p* ?0 W1 e# a4 t  j7 W8 x    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! ~; {$ V8 n7 e- f: A    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  }# u# p# M; `$ t+ A
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* C( A9 Z; `7 b  @# g' B; x

' W% c8 R: f' k6 L% @    /*等待UPP传输完毕*/
; [; D  ~; l3 A    //i=0;
: L1 R2 t/ h( A    //j=0;
$ _' O2 u- T: [0 \! P    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) f4 e4 f5 m8 z) I. o    {& Y% ^8 k/ h4 k! v6 j% E; C
        /*  测试UPP传输的同时操作普通DDR数据# i( n) x& I4 x6 T6 A+ w1 f
        temp=i;
7 {" U# Q7 w) q2 r+ W- l! w        i++;
7 t% Y: g3 Z3 A% _$ H/ l; s        if(i==1024)
! g% ?* Z% |5 N6 `/ h, d3 Q2 ]        {0 k% M! a, j  ?; `0 v4 t1 I
            i=0;
' t& w+ S1 f4 J0 X            j++;
2 V2 U9 j' U  P/ B+ E! h7 w        }
1 C- u  ]+ T" k& n        */
5 u3 g) W( a, P% t% M1 ^! C
, T  T" B+ p3 [& S# e       asm(" nop");
9 m1 H9 j3 ^; J& R9 F2 [2 Q
# I8 n; v+ q6 u7 m" W       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 q2 I0 @4 z( ~; H: [' \
    }! P6 \% w4 ]8 s* Z+ V( P
. l" `) ~& L* r
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( D" A: L8 A# s& P
    //UARTprintf( "i=%d\n",i);# }9 F+ _6 n4 K0 {$ d, ?1 |- D
    //UARTprintf( "j=%d\n",j);& x# q5 j2 H  i: ^: U5 x
    UARTPuts("Data mismatch in buffers.\n",-2);5 r: q9 s2 K; K2 X. ?
    if (upp_interrupt_count == 2 && upp_error_count == 0)
, y) v7 B" G1 y* I! j, J    {; Q8 y1 E/ _& o
        for (i = 0; i<upp_frame_size; i++)
) t/ W1 l0 l5 }) T+ _3 {2 o# Z        {
0 k  [3 M5 s& h. Z7 n- k            if (upp_buffer_a != upp_buffer_b)
, E& B+ @1 M1 j# V. f            {4 V4 F4 Y1 J) w  `# N( l
                upp_error_count++;9 D7 \- V% S# O+ y; A' }9 a
            }- Y) E( ]: C; Q
        }
6 U  I3 f5 `5 O( r! n    }
$ N* C# t0 q; b' D% b. P) D2 Y8 S' g: D7 z# F
    /* 报告通信结果*/( U% y$ D$ o" K) c
    if(upp_error_count != 0)
* ?# C1 ^, R; d" m$ D" w8 O        UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ N+ N3 e0 o) K( ~5 F0 v, o% E2 p. y% T    else
1 G# E+ g$ d# e) V) Y9 `$ }# _        UARTPuts("uPP transfers complete!\n",-2);
3 O: d$ r) S4 \4 |, ]
4 W. M) \% Y1 i    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ S1 o  J0 [3 i& \7 o/ i
    UARTGets(ch,2);
7 D9 u6 J9 c7 N    UARTPuts("\n", -2);
) S: N0 W, s( w; E( g. P  s) W: [/ ^
    if(ch[0] == 'y')
/ F' K( b8 N. X- x    {$ x, E2 l4 N$ O  z2 J* r0 Q6 }
        /*打印全部读到的数据*/
: Y3 J; [. F' n! R) M6 o  W        for(i=0; i<upp_frame_size; )$ e& [/ x' y5 C$ N+ W) J! K* \
        {! ~6 i( Q" L# y0 c0 _$ N$ C% u+ h
            for(j=0; j<5; j++)' K+ b% y' |: ^- Q& i' s
            {
; B/ }. o) }& r' u, d                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- z$ x3 C- N- O5 L! `! v( B, L
                i++;
- N; L! w, [! ], \/ j                //if(i >= 4096)
0 c1 X0 j3 g- g; {                //    break;
5 F) d  n  m: s' E, S& L% A! Y# _: d) f& |2 B
            }
" u( P* c' f! \0 D6 {9 i  N6 o            UARTPuts("\n",-2);
; Y7 W6 F4 K% ?9 O        }
4 U+ Q; @5 C# u0 \3 U, @+ ^    }
8 r6 ^5 M7 z# `6 E
9 z, `5 }% ?4 Y. i; E: z: Y: k2 y}
" y3 h+ r  E8 m& z
4 f" {- Z8 Q+ j7 W0 i

2 r& X8 F2 Y4 U& L* g/ b( d9 y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! o$ g  U3 ]+ T6 O. s; k! M

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 U* }' P0 D# z1 i





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