嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( B% Y3 H; V9 I
Void UPP_TASK(Void)
% Y% n/ k7 ^: r0 E8 a{0 Z; c. J% l! m. D5 @; y, c6 R; I

9 q9 \3 L, D4 S0 v7 j8 ?    int i,j,k,target_int_count=2;
$ }& ?$ l) m$ t0 \/ x- }% o    char ch[2];' c7 w9 M3 M9 H3 }' G
( {1 p  F; p& A$ [1 P1 U
' M0 {  _9 {3 h# ^* K
  A2 z, b- p6 d' @& Q0 Z
    upp_interrupt_count  = 0;
! t* {4 L4 i) z* L    upp_error_count = 0;8 Y) e1 S9 T  v. e

, w: O0 p  f8 v% S% j    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 F+ F3 E# P/ K- U5 x    // Initialize data buffers
* B' Y9 \2 t& d+ G& d# J    for (i = 0; i < upp_frame_size; i++)
& \/ x8 H7 ~/ l) I, {& K6 C    {
1 S( W! ?3 s$ N       upp_buffer_b =i;3 ~" h' ^1 s- c4 B0 a4 b2 I
       upp_buffer_a = 0xDEAD;
+ |' `. Z6 i  i6 h    }
3 A6 I) m* N- h5 d3 G, M. i, w) @& ]/ f: W
    //for(i=0;i<1024;i++)
2 X* f% f0 Y- g    //    temp=0;) s& {. L. X  Q- y* L: s3 Y
( Y+ ]' ~6 B, ^9 I) Y
    //UPPReset();
1 g; ^' ?+ j4 A% Z1 ^% \    /*启动UPP DMA传输*/
% V% J* {# Z) v& ~7 [9 v    UARTPuts("upp_prog_dma_i\n",-2);! j6 c& g/ \. k8 y2 _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) Z% j& _( w1 g- R* u0 _5 _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) L8 \- n9 _$ V! T0 q
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' K/ c( U0 a3 }1 X& t! E& ^5 b$ {

2 @* l' a/ N$ P+ W8 T    UARTPuts("upp_prog_dma_i\n",-2);0 A, Q. f0 p& u$ u
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 u( u: M5 N7 I8 W3 {9 O# @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, r( W# l1 G* P    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, w$ E* B& t9 v' b  R5 ^. G) M
7 e3 \) [  U9 J0 {* U  ^    /*等待UPP传输完毕*/. h/ e  p% u5 o: j
    //i=0;' N" B5 V) k- w, V& t) S" x4 A
    //j=0;
9 P6 `" a: b7 f  b1 ?+ _    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ Z  s, I& Y* Y* O0 b' X- V6 m
    {+ `0 }3 n  F1 L
        /*  测试UPP传输的同时操作普通DDR数据% f% t; ?. z  T! m
        temp=i;
+ P! |0 \( ^9 q; ?$ z( ^" C- n' F        i++;
1 W- ~& ]+ |( P; I! |* [        if(i==1024)
8 a& m  x& y3 Y) @" X        {1 C9 p: R% i6 j$ q7 w! T1 M
            i=0;* h/ ~, H7 @3 ?8 j- G
            j++;
" e- K- B. i: a1 ~        }( w9 h8 s. V5 b% K0 P
        */( i  t/ k3 t1 c9 T
5 s9 c. }9 q( C( n2 O' O. O
       asm(" nop");
" P* Z7 z  b" y) r2 h5 D
0 }4 f0 L# Z6 f+ {8 k. T       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ c) a: b7 B5 B  O1 |
    }; y+ Z9 a! ?5 V( B* @1 }- M, E, W
0 n6 r; X) k6 z& c7 a4 a
    /*检查UPP传输的数据是否正确 (loopback modes only)*/0 P% w3 S1 z0 v2 h2 W
    //UARTprintf( "i=%d\n",i);
% s! L2 d$ I- L& g    //UARTprintf( "j=%d\n",j);& _2 E1 D3 w  Q( u
    UARTPuts("Data mismatch in buffers.\n",-2);
2 M2 o& H0 c5 e    if (upp_interrupt_count == 2 && upp_error_count == 0). w3 A7 k6 n, ]0 s! X( C" }
    {
2 l( y: Z2 U' @) r5 T) P        for (i = 0; i<upp_frame_size; i++)/ y5 ~0 P( z' \! H
        {
. t4 X/ f* Q# J: F  M4 J# K5 d9 ]            if (upp_buffer_a != upp_buffer_b)
& C" ^3 S8 @$ h3 Z& g, ^            {! A5 W( [. F% t1 z; C1 I: y
                upp_error_count++;
# _4 ^$ e/ ^& F' }3 Y6 m            }
% d/ B! p2 j, h5 u9 e4 x& F5 I        }
$ a& i% y4 \, E5 L2 b% Z    }) R# p. r: u0 V4 O

! Z% w; ^7 C$ {( w; y, p' U; F    /* 报告通信结果*/
8 u3 n' F) j4 m2 K/ Y4 a    if(upp_error_count != 0)
: U+ s7 c  m! G# X        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 p: j' x/ e" ?/ F6 Q
    else5 q9 b: Y3 X/ t+ w0 s
        UARTPuts("uPP transfers complete!\n",-2);% U& V) z, V1 {: q2 I7 _4 _, |

5 A2 ]5 N) l: k) ~) D    UARTPuts("Do you want to print all the data?(y/n)   ",-2);! z' v& z9 ~* i( Z; f9 n
    UARTGets(ch,2);
; g3 M8 g. }# c2 B    UARTPuts("\n", -2);( z" _' m, a+ a2 }+ F! {

# G+ O( Y- T. W  A7 g    if(ch[0] == 'y')
+ d9 X6 J9 ^! e# j' |    {
2 ~" p) ^9 z; j  n( L; X- @        /*打印全部读到的数据*/
" r; ~8 W) v% O6 ]( C        for(i=0; i<upp_frame_size; )4 d- \4 R. Y; M6 X9 T/ }' H5 S( }
        {
: f# l) s% s! v% n# S3 S) E            for(j=0; j<5; j++)
4 ^& _# |0 S8 ~            {4 [0 o7 x  r; N, }3 u& U
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 @, D1 o- K- X8 F
                i++;2 Z5 Q5 u/ z* v
                //if(i >= 4096)* q9 L2 I, ^+ e/ k
                //    break;' Y, m: ^5 a/ M, X
3 ^( }& i  H6 c# c- i4 `
            }" Z, O' M* Z0 W" G' ]
            UARTPuts("\n",-2);# y6 A$ a% s. T, I: v
        }" ^4 a" _7 Y( u; \* Z
    }# _3 {8 y% [  l) Q

* p# g" j+ ^+ {. h$ _}

- W( }9 N, j0 \5 Y4 f

3 x5 q- z1 I: N9 a7 a+ Z. C. A5 Q; e; F! u6 {0 \

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( k7 D" G" @1 e: q/ h
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。! ^! v- F# k- r$ _! A  n5 ^. x





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