嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, u% r3 a6 `8 n5 n( R+ M' ^
Void UPP_TASK(Void)
3 S& z" _# r' U' O{
% j. h& ^3 T3 }; ?; ^
4 O6 Q! s# a1 r& t9 W    int i,j,k,target_int_count=2;+ V' n) u+ g7 k. n
    char ch[2];
. }8 g: d* O% ~, k2 h) `0 `' c8 ?) @
; S9 q- _# u* F3 c  \

' f6 S0 T7 \6 h2 d6 z: s% U& T4 I    upp_interrupt_count  = 0;: V5 \; N' T/ e- L" \. q
    upp_error_count = 0;
4 k* L+ h/ V9 D5 m4 i0 N. W' C1 `* L  C! y5 K
    UARTPuts("\tResetting uPP buffers...\r\n",-2);" u8 N; V/ h! b8 Q6 F
    // Initialize data buffers) e9 B+ a0 Q0 s5 M
    for (i = 0; i < upp_frame_size; i++)
9 O4 R' g& S4 X# p' R4 L; X: K0 ~    {0 L( L4 m5 \+ O0 d- U8 K
       upp_buffer_b =i;# e/ U( Q# o+ j$ O1 ~+ o
       upp_buffer_a = 0xDEAD;; {3 b  O. X$ T$ h, p9 T, g
    }
5 u/ w1 @0 y. W# n; x: i# {7 o
    //for(i=0;i<1024;i++); T" P; C0 |3 N+ u
    //    temp=0;9 m, z+ F8 \" ~  j

, q8 [  W; [8 B+ A! {' ~, u    //UPPReset();
/ A7 m( c5 _' [. H    /*启动UPP DMA传输*/. {$ S4 V7 Q" Z4 g0 L5 W
    UARTPuts("upp_prog_dma_i\n",-2);
, `( v" R2 V4 R+ o( y0 N! E- [4 r) n    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;; _& `/ t; @/ X5 P4 P; j
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* n) X3 k# U- w( ^$ V3 p
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ b& G! Z/ A9 J! Q7 }5 Q4 k& ^

1 a1 J! T5 n, i( X2 l' H    UARTPuts("upp_prog_dma_i\n",-2);0 x) \( F: W4 e" |* Z! U
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 p9 [7 X9 N' [- g- k$ p    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% ]0 T8 N& z6 k$ T
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' J; h+ h& Y. d
! e! f  v. O+ L    /*等待UPP传输完毕*/  q. ?8 P* w, r3 x
    //i=0;4 X. t$ @  s4 }' |8 }  \
    //j=0;
6 b$ f  }5 m% j9 r# z: V    while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 @1 o  W$ m( @( U0 w, K
    {7 W; t' B, {1 r9 P
        /*  测试UPP传输的同时操作普通DDR数据
1 y5 S8 d2 K% d+ f! x# r        temp=i;7 B5 p5 s7 d$ ^7 {
        i++;; \5 V- h6 g# x" o
        if(i==1024). N7 c- r" X5 k7 q
        {
; S! s6 x9 C, q( y            i=0;
, ~) V  I/ g% c, n. V: o: `0 w7 K  H1 Q            j++;
1 D- S- \( x( [' P- t        }
) a/ t) n" }6 o( P4 i$ D5 @- M, d        */4 J9 l5 J" f! M7 \& ]4 H, U

- c6 j! |; A0 i8 R* ^3 A       asm(" nop");/ C4 @/ g1 t# V% |- @2 N7 \
- b9 C" k& c4 o
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 \4 K! U' R% d) X, ?    }, F( Z5 t$ b0 p4 C; v

; O8 `6 w# k% q. n    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. C6 j( g! c. W7 t' O8 a; }    //UARTprintf( "i=%d\n",i);# `/ M, `: q8 ]  E0 W9 ~3 P
    //UARTprintf( "j=%d\n",j);& O3 \$ ~" _/ {; l3 w" x  z
    UARTPuts("Data mismatch in buffers.\n",-2);: @& d3 A* k* q" p! P- ~4 n
    if (upp_interrupt_count == 2 && upp_error_count == 0)- B1 T; d: Y, [$ E) z( y
    {
" X" Y) `4 X' W4 i/ j        for (i = 0; i<upp_frame_size; i++)% ?2 v/ H: w8 P0 E, @' W
        {4 n* Z+ l: h1 V; y
            if (upp_buffer_a != upp_buffer_b)2 Z! Y+ C( b5 a0 P
            {
( \3 J; H% j7 R9 j/ M                upp_error_count++;
: M* _  f6 q+ k/ [3 n7 J8 I            }
3 ~( w4 }( r/ u2 h# D* x. r: Z) }3 X4 |        }/ x0 ^4 y1 V. W
    }9 t4 a1 P' O2 ?5 m' h

% M& Y2 t0 j, I* I  ]9 ~    /* 报告通信结果*/
$ a4 v. Q: q& T) Y7 Z    if(upp_error_count != 0)
5 `4 }' C& A* R9 e* A; K        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, T9 ^0 ^' w. ?( d( \0 m    else
: H+ v7 ^; k2 o        UARTPuts("uPP transfers complete!\n",-2);- O/ v/ }+ v' B0 |4 }/ y% o' M

/ @9 R  u; e' E1 F# `& {    UARTPuts("Do you want to print all the data?(y/n)   ",-2);. E$ {' A1 q$ \$ N. q; c7 \4 ]# k% @
    UARTGets(ch,2);8 k" W  k7 h: v) v$ n1 t2 t
    UARTPuts("\n", -2);
6 |3 I- q& H) k- E. U: e9 k4 y
    if(ch[0] == 'y')
. S% v0 G+ {5 _  Y    {
1 d3 i# o' f( [' K- p        /*打印全部读到的数据*/# y, ^+ y8 p3 n& z
        for(i=0; i<upp_frame_size; )
% I6 H2 {8 ^- D" ?, S) {        {5 m9 s; g, c9 ]9 S. q3 _2 d# ?6 U
            for(j=0; j<5; j++)
$ y; `. N- q2 t: j% b- }9 ?6 |            {
2 h# ^  B' ~; r. v                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' K8 F9 Q/ h  e; w2 i
                i++;
* z8 O; L* B6 ~! P                //if(i >= 4096)
; l$ [2 ?8 h  D0 H2 s5 |( W                //    break;7 U1 B  R8 f& U% ^4 s) K4 B
5 h* r8 o! r2 I
            }0 u3 U* J# Z, [' {  U
            UARTPuts("\n",-2);7 o, e3 W4 ~; t
        }/ E' W9 d6 X+ ]9 a
    }
; s) D8 F9 `, P% ~6 R5 g- ?7 i1 j% ~! J4 S: R
}
6 x5 S, `  G7 P0 s

& E3 g) O5 f9 u$ W
( E- C0 d& a% K. N% L6 X  M0 }  {
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& h  n" e0 d- Z4 q5 P# Y5 x! i
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ z8 W& y8 e+ u+ n& E





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