嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 f3 v) M2 X: k& K2 p- d6 ~
Void UPP_TASK(Void)
- N' j2 {* R$ `& ^{
4 J5 ~, p) D( e/ H  W
& K# Z( J' Z# a6 w/ I    int i,j,k,target_int_count=2;
( R: z0 g. h& s9 W% y1 i7 g" n    char ch[2];
1 t' V% c% j2 p- s4 S9 Z0 l
+ y7 |0 o' t2 C' \6 R- @: W* Z% d, F6 p

5 ]5 g4 j! B7 z9 B0 I- l    upp_interrupt_count  = 0;4 }0 n8 U4 K# l: m( R" n
    upp_error_count = 0;% h) t* ]+ O0 B1 r( E

! Y% C: c& ~! Y& T( T0 Q    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) _$ p' g9 k6 C; i5 X4 I    // Initialize data buffers; i' V' |% a. F% u
    for (i = 0; i < upp_frame_size; i++)- W2 m9 j7 J: V3 b# w2 m: r
    {( I. T% H0 I. X: z  c0 G2 J
       upp_buffer_b =i;
5 g1 u; g2 f8 ^, `       upp_buffer_a = 0xDEAD;: B$ i+ t# H- R3 ^% a5 c6 R
    }
$ K9 X. S' N/ H6 S4 Q' l4 N0 X/ {# C& l5 H, H* D
    //for(i=0;i<1024;i++)# W" q4 B' e1 x6 ~9 M
    //    temp=0;
: d% e& ?  d5 `& |; H  Y( h* q) c
/ _$ H9 A9 i8 m! f$ _" \4 c/ ?( X    //UPPReset();
) V4 ?/ t$ F+ ~, u& T0 U( j    /*启动UPP DMA传输*/
3 J& b% N- S- A9 ?8 x8 R, M: z    UARTPuts("upp_prog_dma_i\n",-2);
' ~; ~* r1 I; F/ g, W" t, {3 T    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% }" ?* N) [' a1 U: N  a    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. a8 @9 H5 M# {0 B    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; m# |, W& t# u. [; p+ c6 w4 T. ~9 C8 p% u
    UARTPuts("upp_prog_dma_i\n",-2);
! L$ O& O0 D9 \5 _9 M( h    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 I& C3 }! r: M    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# E/ w+ {, g+ l/ V/ m; d    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! |2 c% {2 p6 S: m+ H0 ]
" [' u4 F1 e# |, M; e8 X
    /*等待UPP传输完毕*// h2 v4 f( `% X  P1 ^% W2 m
    //i=0;+ m* }3 J0 b9 ]
    //j=0;4 l0 D8 q5 @+ L9 l7 s
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 P* q$ H5 n  o  M$ V! C; O3 \. k! q  G    {
7 C: R( F5 t  |) I  D3 E        /*  测试UPP传输的同时操作普通DDR数据
" }9 f( J- |/ I: }        temp=i;9 h7 W( l; L4 `  S
        i++;6 P# t/ j  i" W7 P" k
        if(i==1024)# o9 H0 m$ j9 a& f
        {
1 X4 O+ f, ]6 ~5 k; B! }8 c; e# R, k            i=0;/ }  Q9 Y+ P, d5 b: ?' m! `1 O2 I0 \
            j++;% J' R$ `9 _& a" Y. ?* g7 p
        }
# b: J' o2 p: Q( s( c        */
5 ]1 l  q3 R: J
1 _$ b" u; E* D% R$ O/ u       asm(" nop");
9 K5 c9 M( \! x: Z! a/ a' F) p
) A1 `! }+ {, r) h6 g       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 C3 J: r% G$ j* ~    }; q6 m6 J9 _# m+ T+ E1 m

8 v2 @' d4 i0 y; s! {9 w5 v6 t3 }    /*检查UPP传输的数据是否正确 (loopback modes only)*/( I& Z6 K" ^5 {2 D: l
    //UARTprintf( "i=%d\n",i);
* h- O2 Z8 z9 F9 G    //UARTprintf( "j=%d\n",j);- B6 L% q4 T0 `7 F
    UARTPuts("Data mismatch in buffers.\n",-2);
! G! l. w; i: Q  @1 W, _. G    if (upp_interrupt_count == 2 && upp_error_count == 0)5 d5 G9 ?9 X5 v
    {
: T/ @" R7 m  w" p* G        for (i = 0; i<upp_frame_size; i++): \8 |" x$ w# Q/ n
        {
3 `2 O2 f8 F  G1 y6 I            if (upp_buffer_a != upp_buffer_b)
# c% V0 v) K$ b9 t# C  Z            {
8 @; Z- y! E. _                upp_error_count++;
6 E& p; H  e/ u/ u# R& O            }& Z8 S1 n8 {. @0 w/ v; s0 s4 E$ r& |
        }4 U0 Q3 a1 Y- N: P  W
    }- z% `7 q) e$ J
- ?7 s' N9 H1 ?5 g6 j% a
    /* 报告通信结果*/
  u* m7 G$ U# p- d4 ^- V9 T    if(upp_error_count != 0)
: b. q5 o9 w$ f5 f        UARTprintf( "upp_error_count=%d\n",upp_error_count);  J- ?( T2 u$ ]
    else
% M* @, w, Z7 J$ P/ t        UARTPuts("uPP transfers complete!\n",-2);9 X% Y' ?$ k3 J  d

4 ]9 }2 K( C7 C    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 S! g1 j9 W1 ~3 z! M6 t
    UARTGets(ch,2);
9 u* b4 |3 B& u5 R8 X. P    UARTPuts("\n", -2);4 i( T* P0 {5 [
( {7 L$ s( d% l2 X; M2 a6 Q
    if(ch[0] == 'y')
8 W2 T3 e7 w; ^3 n    {& H2 {, Y  x2 G* H1 y
        /*打印全部读到的数据*/1 j9 s+ `: \& Y8 u) E: M
        for(i=0; i<upp_frame_size; )- @# P) R4 T! ]5 Z+ B' S* R
        {6 W) S+ h5 G. G( J* A: ~
            for(j=0; j<5; j++)
: \) L* l' }0 ]( f3 ?; k            {# F& |! w7 s) V, x( U7 c, U0 H; r
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* v: C5 [% B( [2 B
                i++;6 w. k, _; S. f% O$ K8 ~1 g0 p
                //if(i >= 4096)
% i5 t9 A9 l8 h0 I$ T9 [                //    break;; R! s; `5 F6 }/ @

% z' O5 e- X3 j- \$ |            }
. z& X, Y6 \: |9 Y7 w; A; X1 p            UARTPuts("\n",-2);; j. y- z  a; I# f: \0 Z
        }
) D4 f5 J) f% v- n0 h7 l  D    }
- P) d+ F+ W7 A4 k  r* c+ G
) Q# n: ]( H  ]" s6 k& y}

1 ?! }4 `! U" F% p# K

8 G/ F( }7 ^% a% b# C
+ M, ?$ t3 o, r: ?1 h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。6 \9 M. X. l& l7 ]1 {; `1 f! X) Y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& @) `' ^6 o' @* t; C* P





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