嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ r2 }% S7 S, i! Y2 @
Void UPP_TASK(Void); f- t/ E' K% P6 B
{
! i( \2 \8 B" G& g5 S) B' t% z1 ]  {4 z
    int i,j,k,target_int_count=2;' T# R5 G7 }5 v$ a! {9 J
    char ch[2];
+ H1 T% |. J' v  a5 M5 }0 c4 b
8 m' ~+ a! u- u$ i0 Z! [" D  v: Z3 y" Y% _

7 v0 D. s+ f2 J" G    upp_interrupt_count  = 0;
  Z) Y* F. Y; n$ T& u2 D! A- T    upp_error_count = 0;
4 k) e) f" o1 K& c
1 e6 D: ~" s% K. h6 @8 l# P, z8 R    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 d/ {0 ?+ H5 e% m' @7 Q
    // Initialize data buffers7 F7 c1 P0 J! D; d
    for (i = 0; i < upp_frame_size; i++)& V: M4 U/ n. F% ^& s
    {
8 O" z! x1 q$ c& u* d* X4 I4 {, P       upp_buffer_b =i;2 [8 m: U; Z2 V3 X, r% T  `' \+ D! t
       upp_buffer_a = 0xDEAD;
4 |5 T* c$ V/ D2 l: k( n8 p    }
: n' N) j1 B) M5 N3 [
. V6 h/ G7 a2 Z, R$ q% z    //for(i=0;i<1024;i++)
  n% v( M1 Z- ]' T& d! ?    //    temp=0;( ]! _. A# y6 x" B5 e8 I7 ]0 `

" ?' q* Y$ X9 O6 R3 o    //UPPReset();
) L* w8 A  L' q( [9 L    /*启动UPP DMA传输*/
- a1 ^" v- l6 {    UARTPuts("upp_prog_dma_i\n",-2);
) ?" v$ G, o: p( M6 i    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  {+ i7 C) x* }  s2 M
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 j7 p9 B6 M' I" G4 I9 w& u4 T    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, Z5 @$ ~) t3 H( z5 e4 m7 x
3 A2 L9 P9 S7 n# b: `" s. W7 S- `% h    UARTPuts("upp_prog_dma_i\n",-2);; ?. @; A' u4 h. k4 r1 g% f
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: k# `$ d+ L/ x6 T/ p0 p& Y
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; v5 g0 N# X4 n9 z$ O
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);4 C1 Z8 q0 Q+ ]4 z

1 \* i$ @' e! f! r; r* V$ s/ ]    /*等待UPP传输完毕*/
4 X% u5 d* Y9 I    //i=0;
+ P1 a# E( ]: }    //j=0;
5 Z' }9 |2 s  P- k    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) p3 Q6 z+ \5 g3 G    {
' T8 T! d$ P6 k- t2 h' K& F        /*  测试UPP传输的同时操作普通DDR数据
4 Q% `1 Z- g9 n1 _$ Y! z        temp=i;1 a6 F+ W) C: I6 D; ^( J" \
        i++;
" [! w: }! s, Y8 M6 P+ k        if(i==1024)0 l" s! v3 A1 Q* k6 z0 q+ n
        {
( ?$ r" t& x' a0 ^# A- P8 Y            i=0;+ l# {) J9 @% r
            j++;
6 e6 q% j( M. Q        }8 h/ }% ~! n* B
        */
: E- e1 X/ |8 K+ _" K& i7 r( S2 a, R5 ?+ c; g: k
       asm(" nop");
7 P) u" X0 f% ]' w: v3 B. @
+ {5 o* x2 H+ y: H+ T* s" s       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! C& S' d% r* `5 o. N% P0 {& ?8 A    }
6 O. d# N$ x5 Y* @& F
# _. v; u# U4 s2 V8 A    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- G3 \! G5 ]: P1 W9 N    //UARTprintf( "i=%d\n",i);
- A" U. F5 D4 y! p' E: [9 S    //UARTprintf( "j=%d\n",j);; W2 a8 F" {# x, A5 n' U% e0 D
    UARTPuts("Data mismatch in buffers.\n",-2);
/ s, D3 ?! p# z7 J' {# R    if (upp_interrupt_count == 2 && upp_error_count == 0): P0 P( ?& H) j, a0 U
    {
- T/ _) i+ I# d7 k+ F        for (i = 0; i<upp_frame_size; i++)
) F9 G* x, `/ A        {
, F( U4 D! O0 R* ^0 M2 Y            if (upp_buffer_a != upp_buffer_b)! v; K" b3 ?; ], S8 |* [( e
            {/ x) p1 }$ c! ?  b$ K
                upp_error_count++;
4 \, D6 Y$ h3 R: t3 o; x            }: U" P! W8 y. k6 x! q! ^9 |
        }
, o; i5 ~5 ]; j% N$ A    }
7 f2 V8 G* K' i" N9 y' m1 {; E0 }1 w9 Z3 k
    /* 报告通信结果*/
7 }0 I5 o& N# z" z. w. F( d5 q) X    if(upp_error_count != 0)
8 ]0 v! @. Q7 @6 w+ \! S8 R, r        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 T6 o# P9 S# }% g3 Z    else3 \  j; e! y, g* J
        UARTPuts("uPP transfers complete!\n",-2);5 S3 z; J: }  p6 u

" O0 V" X: p9 k! O* q5 F' c7 Y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);# g/ j; {) ^* J; j$ d
    UARTGets(ch,2);
3 Y+ A2 [# M1 j    UARTPuts("\n", -2);
& N! W7 z  J0 Z& Y; ~7 G% c. O% V( }& a" I' M; ^
    if(ch[0] == 'y')
' M8 }7 z, D; s( ^9 y1 B2 W, s    {
) S2 ]/ |! D& ?5 m8 i        /*打印全部读到的数据*/
! x- U" A7 U& U# X# V        for(i=0; i<upp_frame_size; )) u4 M2 a  r/ i; a) ~: f5 x; S! g
        {
# [5 K; m5 G5 j$ M            for(j=0; j<5; j++)) I( n2 T% {1 j3 [: O& ?
            {  O7 j) g& R7 W( R" K) ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- o7 Q1 d& f9 A4 I3 D
                i++;7 s- A" t, B) j, T) U' O" |' \0 r) a
                //if(i >= 4096)/ ~8 H, B. c( J" ?* K8 }+ j6 l  D
                //    break;
* m2 Y8 Y8 A$ M0 t3 f: z4 I! d& C1 ]6 [
            }
, _. a9 b, i9 Y" R( N) `            UARTPuts("\n",-2);* V" x, ?! L. s0 q1 e; T/ p
        }6 {5 C! A# f, ^& F' K/ n# S9 n" w
    }) Y) }) l% T0 v* |3 _/ I7 E  j

6 n! s# Y5 }% S}

) A, M. V7 V: J* B* K* Z# f1 K! o& I

! }* U) E) u0 @0 \
% F; d, D# Y# e) ?( v
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。2 A- Q/ u3 q1 I

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: @6 M* W% `7 q7 F+ p9 S




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