嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 R* [, B1 S' ^0 D
Void UPP_TASK(Void): z+ t- W6 f" j" X$ y- ?. f
{% f+ g* Y1 t9 q& d1 s0 _  E# V" ^) C+ A. t
8 j' Q8 r+ c1 @0 W
    int i,j,k,target_int_count=2;
; b5 I  A" e( n3 |' [& ]    char ch[2];& X0 A$ Q/ I; T$ p5 |3 b! R

/ Z- U5 x  f7 w- |& t! u0 d  d2 Q
* S% S: ]8 M" ]# n+ {$ ~! z" R' m$ J6 T
    upp_interrupt_count  = 0;9 r9 D, E- c2 N) Z8 G& O8 ]
    upp_error_count = 0;
, j0 T" O7 q. V+ d# Q& f! m1 X5 q) S' L0 l  K, p. F1 v* Z* N
    UARTPuts("\tResetting uPP buffers...\r\n",-2);5 X+ n7 @: ]* z  W
    // Initialize data buffers  e1 _* A* t6 Z
    for (i = 0; i < upp_frame_size; i++)) D7 P( ?; z6 o9 j
    {
* W" j2 L: I" }# w$ z% P7 r& _       upp_buffer_b =i;
, q6 ~, u& G# h* \, r* Q( z5 S! V       upp_buffer_a = 0xDEAD;
3 U7 _6 t, S. Y% |# T" ?3 B+ y( t& g    }! O* g  S+ R# |* ?+ @, ~2 K

1 @2 t+ q. D+ K4 F, g' R! D5 A; j    //for(i=0;i<1024;i++)& g" h0 r" H" `+ U& K
    //    temp=0;% g' X+ t4 H' |1 y" d# K

" G3 }9 G$ d! @+ J& Z    //UPPReset();/ c8 s9 C( X* {  j* f
    /*启动UPP DMA传输*/
! D& w6 t3 K+ ?  V8 H0 w    UARTPuts("upp_prog_dma_i\n",-2);- l0 Q2 z0 ]! L
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 k( z' M1 A' K: S, i
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# L' I( z; @2 C    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' C$ v4 y4 n, {
1 C2 _( c0 A. k9 x+ p
    UARTPuts("upp_prog_dma_i\n",-2);
0 ~* R- F( V" o1 ?7 `5 n, u    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. H) M! H1 z& S5 z: _
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% W$ s# `5 V" M% g: Q5 G. h5 [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 G# P  ]7 m: k& V7 z5 R
- {; N& z; K8 h- U    /*等待UPP传输完毕*/& `' Y4 ?* z: i1 c
    //i=0;
- e9 e% I2 m; b" U1 Q% `2 l    //j=0;
2 C* q3 H; X( d    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ _4 n/ n% s+ p2 P* l
    {8 Z& _0 T3 y( z" H. E
        /*  测试UPP传输的同时操作普通DDR数据
8 t# c7 y4 t4 j) Y: Y$ }" C        temp=i;/ t, I: E: x/ n
        i++;  C7 |, ^% K) c- _$ ]2 U7 |
        if(i==1024)
% G8 p7 b6 R- y& r* i4 N        {. s, Y9 {6 G* s' A/ y
            i=0;6 l$ Q7 M4 |/ ^- v! G' P1 }
            j++;0 p2 n  n) l9 a  e
        }6 ^: k! f, l- z' _
        */
) W, w# c% `  F0 w
% L2 G$ u. O! i& \2 H1 L( o       asm(" nop");) U$ I5 o7 U" a; B1 k7 q9 w! Y

- \! u* _; l; _; @/ A" y8 v6 f       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# l) f/ M% U( |$ D+ D: y    }
. @7 ?' |" m9 z$ ]2 I7 q6 J
3 S% G4 Z0 Q+ J( `) D( ~: ?1 q& g    /*检查UPP传输的数据是否正确 (loopback modes only)*/# Z% h) M& E9 B, v1 k1 o
    //UARTprintf( "i=%d\n",i);9 D2 W3 R! d. t2 M
    //UARTprintf( "j=%d\n",j);+ N4 B5 `9 ~2 D* X9 s- ~
    UARTPuts("Data mismatch in buffers.\n",-2);4 \$ p$ i9 T. H
    if (upp_interrupt_count == 2 && upp_error_count == 0)/ y- e- j) s# T9 b, d
    {. m1 y2 s2 x9 t' \$ T. C
        for (i = 0; i<upp_frame_size; i++)
0 `0 u5 H4 h# L+ r& q6 N7 k        {
6 _0 \1 i1 |8 W, J+ D0 ~, I3 T            if (upp_buffer_a != upp_buffer_b)
; m9 ^9 k3 Y1 n% h0 ?; }            {
' W8 V0 B' T% A                upp_error_count++;
; }4 w$ J* {' m3 }6 g5 c/ P            }
' p$ y) H7 y% M5 c  d0 W        }3 b* ]) V% H7 u1 B! I
    }
- F7 g3 U/ {5 w' G  `. U% |5 {
* I$ L( w" M- h6 @% L    /* 报告通信结果*/' {0 c/ T  O6 Q) F: W
    if(upp_error_count != 0)/ Q! L5 p* I; N/ X' s
        UARTprintf( "upp_error_count=%d\n",upp_error_count);& B% X' P3 w4 ~1 @( \/ h( I3 f
    else
$ K0 U6 r. Q. @" d        UARTPuts("uPP transfers complete!\n",-2);
  H& j4 D/ }. q9 F/ E- M( v- L% N; J
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 E! w3 k8 Y! ^
    UARTGets(ch,2);
6 n3 s. n. s) ~: U  }/ I1 C    UARTPuts("\n", -2);& e3 n$ e3 \; X+ W
: x* t  F: W$ u
    if(ch[0] == 'y')3 s0 j6 X/ p, r! ]1 W
    {% v8 h2 Y7 P5 T$ s
        /*打印全部读到的数据*/
% |; C. Z$ q) t9 d! g# E; e        for(i=0; i<upp_frame_size; )
/ a& Q/ q6 B2 Y        {
" N  S' m; Y3 ~5 [& y! ?0 P. _            for(j=0; j<5; j++)
- |% Z, S5 E) h# X* T3 s* z- C            {
. D$ U" F$ K+ n& E8 f                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% }, E: z/ {" S4 E                i++;2 _: G! S) b6 z* j% s( `
                //if(i >= 4096)
7 Z' E; S: w( C, f( ?! v                //    break;
: p# Z2 H3 u+ z( @) U( b$ u+ p. j$ w& W% u
            }1 c# u6 M' A3 B7 N5 X
            UARTPuts("\n",-2);% {7 n+ N( U# x% j
        }
  N  E2 M% b( A8 k4 g) y- ^! T9 n$ N    }
1 [, M. Z! u$ ?3 {9 h0 Y* M+ r& {% }% ~: U' m- c
}
: O! y- K9 P& e4 b

7 e: m: ]) }0 L+ f& t4 a
. |! k2 R, o% o
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 C* `% |+ D+ ^% g. S) l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, k! O! H" T$ |3 T' x





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