嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?+ f) p& A6 R# Q
Void UPP_TASK(Void)
2 Q' Y. B, ]% D) b# R# `8 Y! D( Z{
7 V9 t8 S2 v2 |( ^) ]' H
3 o; @- V: g3 k; D3 M9 t    int i,j,k,target_int_count=2;( a# }' m4 r" s4 z4 R9 s
    char ch[2];1 l, u% I. Q; ]
) I  R9 l1 T  i6 k
+ w  _8 X1 l/ b

2 f3 s0 V5 l$ ~, F$ x    upp_interrupt_count  = 0;/ u. s4 c- e, s: Q" ^1 `$ r
    upp_error_count = 0;
5 y2 L6 C% x8 f; K
3 [$ v( G# ]% e' p! G    UARTPuts("\tResetting uPP buffers...\r\n",-2);
! u% d- M8 A# X* g    // Initialize data buffers
, d" a; E' J; w: b$ _# O  A6 P    for (i = 0; i < upp_frame_size; i++)
7 y5 _$ P$ A+ _0 h- c& B    {) H* W, _( k& i
       upp_buffer_b =i;- E4 E9 w, ^  r+ @* ^% K( U: k8 k
       upp_buffer_a = 0xDEAD;
7 ]. ^( d4 T" ]5 \, H    }
" L8 |; R/ X1 W7 o2 q2 |) l5 j1 Z+ Z  q* S/ K4 K' g, ]
    //for(i=0;i<1024;i++)
0 [& I, c3 H* m, I. `) V% g    //    temp=0;5 f1 @% r6 V  {9 ~+ t) v

8 ^) ^  v2 |8 N' W+ Y' N4 z$ x& G    //UPPReset();
7 c+ Y- z7 w3 g% E& p. ?8 F: E    /*启动UPP DMA传输*/
/ h3 L4 ]: T* r' P; p8 U' d    UARTPuts("upp_prog_dma_i\n",-2);. i% c" B$ |9 s: R% f! J5 a
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% ?9 {) K: E7 d8 H' P    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' Q- N2 W1 |6 s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
  Z' u% Y' ?0 _7 Q5 l) q1 a6 X
8 ^$ m1 w" p" q    UARTPuts("upp_prog_dma_i\n",-2);6 k& f8 V: {  R
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;( S: F' w) h% p* e8 O, n
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 I# L; U! z8 l" O/ L7 U; }
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 F# w$ h+ k6 m( O* F. l( }5 p, ^  n3 v6 ]9 G
    /*等待UPP传输完毕*/; o) o7 x/ s6 J. v" P3 h3 P1 `
    //i=0;
- r: M. r" g. D* r    //j=0;1 c4 l3 z# k  t+ w" L- e5 `/ k  W! H: ?9 ^
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ G3 T* D  y: n/ _, j. D
    {
! {! u3 l* W* j/ b, A        /*  测试UPP传输的同时操作普通DDR数据
5 `+ c/ m/ d7 ?' J( [# h" K" G- [        temp=i;& K( Z  O. U- F1 j
        i++;& s4 y- G7 ^- O7 e
        if(i==1024)( R$ L$ m9 Z, [0 U) q
        {
. \0 p, k8 O4 U7 M  L( ^7 r7 N            i=0;
; v+ G5 L8 B! {) C            j++;
# s9 j. g, {3 n3 F" |4 J, J        }; K' ?: A1 I* f5 K8 U
        */# m2 Y1 A2 h2 x' [3 K8 _
1 K# m: p5 j# f3 K' h
       asm(" nop");
) @" \* ~1 T5 V' D: M$ w! `5 o* T9 B. o0 D- y. V( ~  |% m7 f
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 }7 S3 \; p1 C, f& `* \    }
, y; x( `! ^- E& R0 v. H3 B
4 l# T, @; J- w    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( h3 D( O/ k7 d* _6 {2 I! A    //UARTprintf( "i=%d\n",i);
- \9 g& r: N+ {9 R+ Z    //UARTprintf( "j=%d\n",j);
. J( Q' `9 X: a9 x1 A9 z    UARTPuts("Data mismatch in buffers.\n",-2);
7 I: I$ d  d% r; M0 K6 c    if (upp_interrupt_count == 2 && upp_error_count == 0)
! Z0 M6 e! [4 I. r; r; F    {
7 F" R; e% m& @- R: u& B& ^        for (i = 0; i<upp_frame_size; i++)
' F7 S6 k) \; o# \/ w( T. G0 d        {
& N. M& y. B- R# ]5 }+ v8 b5 o0 F            if (upp_buffer_a != upp_buffer_b), s( H; ~3 c! c# I2 M
            {% H; m4 O. \' C5 y1 \# S
                upp_error_count++;
0 b2 [; h7 p7 ]! b) W6 H# J            }
. V& N! ?5 c$ v  Y9 b' N) W        }
6 _8 K) Z+ Y1 Y' l; \; D; R    }/ t  W% a. n0 Z  x% Z

, M* E9 x& G) \8 L3 m) b    /* 报告通信结果*/( O' X4 }6 s. `$ A4 ]9 Q0 r7 _! d0 f
    if(upp_error_count != 0)5 W  x6 o' W8 [: P8 Z' V) h% ?
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; E8 Z/ b$ o1 l6 |, ]/ _    else
' `9 Z) m$ R" K1 ]        UARTPuts("uPP transfers complete!\n",-2);
3 J: D8 d& F$ K0 N
8 v6 w$ n' X6 @/ O    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( f9 Q, s% N4 e7 N, w5 C    UARTGets(ch,2);3 r: n- L7 P# n/ r8 M8 {9 r
    UARTPuts("\n", -2);
7 [, q3 ]# J) |& B4 y+ G
* P6 y' }# W$ }( J# _    if(ch[0] == 'y')- K" t' n3 G3 ]- U  p
    {
; b" H& @0 z$ x4 `6 Z' o- }        /*打印全部读到的数据*/& u& y0 t# A7 q$ k5 D# [; s
        for(i=0; i<upp_frame_size; )
! u& c0 P6 h2 O/ D/ g/ }        {
- ~0 p# c6 v0 {! ^            for(j=0; j<5; j++)
# ~4 o9 l$ Y+ v) s+ }; h            {( l- [+ v  t3 y" l# x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* t- M) Y" E3 S$ f. k
                i++;
1 D) z0 D2 r! v3 J- H  F4 ~9 I& v: @+ `                //if(i >= 4096)
6 r' K% B! v+ V                //    break;# E/ V: H1 @! G  I- W. T

2 M3 B! p. S8 R2 `            }
; Q- }" X2 W5 L5 j3 b# p            UARTPuts("\n",-2);/ i3 Q8 z4 E7 Y+ T3 e) i4 T* u
        }
- ]/ H& f$ S$ w    }$ b$ s. M- R* P( ?; s" _
$ B1 \8 ?4 e) d0 R5 ?6 `! q* S
}

5 W5 ^. E/ U& |! J+ L9 M
( ?) t# m! w# K& q6 m

, V0 E" Z/ n5 P5 Z* ]7 u
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" V- r6 A2 x, U5 Y7 ?

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 p' X& d* `5 c





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