嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ R* s: s5 L' Y/ }
Void UPP_TASK(Void)) F% ?3 r: ]5 [/ a% h' v
{0 I3 P1 x% w- v6 O

/ p( V% e$ W3 Q$ {* D+ T. v    int i,j,k,target_int_count=2;' `0 L; W: r' I. D' I7 c# S8 p
    char ch[2];
$ V: E* O( g6 m& D
# n- O8 D3 r1 C6 t! c
# T4 _; K9 Z/ e) F" n: b9 o% q# P& k! t) Y+ C4 K
    upp_interrupt_count  = 0;
0 S; D' e8 L2 s0 m    upp_error_count = 0;2 i( S" X( J. b3 x

) J% q' \! G7 K    UARTPuts("\tResetting uPP buffers...\r\n",-2);! n- O4 O6 ?: K, j
    // Initialize data buffers
+ j& G) q$ }, V- Z    for (i = 0; i < upp_frame_size; i++)
- e% p, ^+ [! U- o% V    {6 R6 M7 m# z2 y4 D& g
       upp_buffer_b =i;% e4 p  G, y* N
       upp_buffer_a = 0xDEAD;
) ]8 o% x$ @% r' L    }
. M. Y0 V  g! ]8 \5 Y2 C. q
+ F$ ]+ x% t4 i, j) V5 g3 y. G% Y    //for(i=0;i<1024;i++)
. D5 X$ {5 W; q0 K    //    temp=0;
: j0 r, P, N, ~2 Z1 B
8 Q# z2 w) }" |/ w0 \6 y; T# Q# ]4 E    //UPPReset();5 H* s+ i/ I( q
    /*启动UPP DMA传输*/5 y+ f+ F7 c9 k, u
    UARTPuts("upp_prog_dma_i\n",-2);* P' F- o7 n% o
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* r* u( S0 c' @( R' M
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' b9 I9 V1 g/ x+ Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( y# Q$ `* Y8 v$ t' H9 x+ ~  L# r  _+ l+ y; s- f
    UARTPuts("upp_prog_dma_i\n",-2);1 I/ S' U: c; [; }9 U+ x4 H
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 ^* D- v3 B0 {+ E  K    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! u4 D7 R5 K9 I, c, M2 h* s0 }& ?
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ ]6 W! v9 V1 ?# V1 z, Q! ~- v$ i. G: H" q" j+ `! a+ i7 p
    /*等待UPP传输完毕*/0 h0 K5 w6 n# Q( C+ {  r
    //i=0;
  a/ k* t$ c- v, h    //j=0;; {; f7 j" ?9 w2 y! C) ^
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" z4 b8 J# Y; P  ^' d4 Q. N
    {
" N4 d% `8 g$ z        /*  测试UPP传输的同时操作普通DDR数据
/ z6 h/ H7 q' o$ p% ~  i% v) J7 d        temp=i;& M+ v6 K4 ?4 c, J* v! l) F) _- m
        i++;
& |, q8 Y9 t! a4 K        if(i==1024)4 M, i" [; B! y+ `; Y4 v1 M$ y
        {& C- j% L2 Z' x0 w
            i=0;+ J% N4 [( r% R
            j++;, d$ y( y& J9 e
        }6 J( ~2 L5 b/ K
        */4 L' T: c$ n7 J# c) `
+ R6 {& l0 V% C' \6 Z
       asm(" nop");, U' @# j, h- b

: a' _5 Y) B" A4 P: x0 t! C" c6 q' Y0 u       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 X9 k2 |6 t* r4 c) {    }
; m" e8 B7 h6 O) R! O) N; A# `! C
) x) y  d7 Y/ A: [& Z; \    /*检查UPP传输的数据是否正确 (loopback modes only)*/& N( r, a2 `# Y
    //UARTprintf( "i=%d\n",i);
/ q2 ]$ q7 d3 C! o0 X# G4 S    //UARTprintf( "j=%d\n",j);$ {7 Z. }6 q9 B
    UARTPuts("Data mismatch in buffers.\n",-2);) Q. w  Q; @# f6 N5 ^& D  \$ @
    if (upp_interrupt_count == 2 && upp_error_count == 0)
' u1 G! j" N, j7 M# ~    {
7 ~; Z) Q& I5 e# P$ q8 |( K        for (i = 0; i<upp_frame_size; i++)4 C5 L: f* s8 h/ ?' w
        {
+ Z% n! C; \3 c9 X& [) n7 x            if (upp_buffer_a != upp_buffer_b)
7 j0 z9 S# V0 f            {6 }* n. ^5 {( |8 E
                upp_error_count++;8 C& C' k$ i, [* J( p0 w8 u/ {
            }7 x* J' w% m; z0 ~. H
        }
& i- U! F; A* c2 E6 }1 H, Z; i9 l0 L    }, ]" g' R6 g7 ~/ ?$ O
' Y: \2 p" X: `# s' K
    /* 报告通信结果*/
9 U& i/ O( S# {' U4 r* G" q# Z    if(upp_error_count != 0)
- r! p3 K# U7 |' Q& {# m' m        UARTprintf( "upp_error_count=%d\n",upp_error_count);
. g) R& j4 @9 M8 d7 n    else- h8 G0 t; j( l7 j7 D; [9 M: O
        UARTPuts("uPP transfers complete!\n",-2);
6 \8 [8 f7 _3 N  h1 u+ Q( ~; C  C0 L1 q  {
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
# Y/ g9 k/ e, \6 ]* z2 I$ A$ z    UARTGets(ch,2);
4 L, J4 _6 b) ^, ]& i    UARTPuts("\n", -2);4 o2 ]" H" p, I0 ^- p

) N  h3 N: ^% K5 k+ J" J( M8 z    if(ch[0] == 'y')
0 T6 Y  u7 ^9 ?- r, y    {* V( L  N" e  \7 Z; J% S8 U
        /*打印全部读到的数据*/- @. @% v# T- S; t) u$ ~6 b
        for(i=0; i<upp_frame_size; )) O5 {0 C/ R6 x* R0 @, B
        {
, i& w8 K1 d! K" _            for(j=0; j<5; j++)
, J& K% r" B, I$ ]" l            {
5 e+ b" o$ d- G                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- I6 Y/ G. j! z8 d+ X# t8 M2 L
                i++;$ v2 x1 X- F6 H7 E
                //if(i >= 4096)3 G2 Y& a7 c1 c6 a
                //    break;- o' k) ^. ]. J& H' V7 s& n$ c/ ]

6 z! W/ J, }' J' n% o            }- \: e+ q9 Q: a' P
            UARTPuts("\n",-2);4 e1 D5 [% D% o# M
        }
, G+ N0 l8 a* T" h    }
; D2 ?/ S% v' t6 D' m
+ i% T# u  N) {! i& }}
* n+ E" C8 Y6 G/ W
. e8 e0 ]. F3 O7 R
7 `; P! s# n: u& c0 B

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 {* H6 ]0 O1 ?9 N; R) [
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ b8 s# h7 p- C+ O




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